No offense, but your Tic tac toe seems overly complicated.. here's mine.
Code:
#include <iostream.h>
#include <windows.h>
#include <conio.h>
typedef unsigned short int USHORT;
char board[3][3];
char playername1[25];
char playername2[25];
const char player1 = 'x';
const char player2 = 'o';
char playerup = 'x';
const char blankchar = '-';
USHORT i, ii, x, y, moves, move;
void table(void);
int init(void);
int getInput(char player);
int setInput(char player);
USHORT checkWin(char playerup);
int main ()
{
init();
system("CLS");
table();
do
{
if (moves < 9)
{
getInput(playerup);
while (setInput(playerup))
{
cout << "\tThat move has already been made!\n\n";
getInput(playerup);
}
system("CLS");
table();
if (playerup == 'o')
{
playerup = 'x';
} else {
playerup = 'o';
}
} else {
cout << "\n\tNo winner this time, thanks for playing\n\n\n\t";
//system("PAUSE");
_getch();
return 0;
}
} while (checkWin(playerup) == 2);
if (playerup == 'x')
{
cout << "\n\tCongratulations " << playername2 << ", you've won!\n\n\n\t";
//system("PAUSE");
_getch();
return 0;
} else {
cout << "\n\tCongratulations " << playername1 << ", you've won!\n\n\n\t";
//system("PAUSE");
_getch();
return 0;
}
}
USHORT checkWin(char playerup)
{
if (playerup == 'x')
{
if (board[0][0] == board[0][1] && board[0][1] == board[0][2] && board[0][2] != blankchar)
{
return 0;
}
if (board[1][0] == board[1][1] && board[1][1] == board[1][2] && board[1][2] != blankchar)
{
return 0;
}
if (board[2][0] == board[2][1] && board[2][1] == board[2][2] && board[2][2] != blankchar)
{
return 0;
}
//CHECK COLUMNS
if (board[0][0] == board[1][0] && board[1][0] == board[2][0] && board[2][0] != blankchar)
{
return 0;
}
if (board[0][1] == board[1][1] && board[1][1] == board[2][1] && board[2][1] != blankchar)
{
return 0;
}
if (board[0][2] == board[1][2] && board[1][2] == board[2][2] && board[2][2] != blankchar)
{
return 0;
}
//CHECK DIAGONALS
if (board[0][2] == board[1][1] && board[1][1] == board[2][2] && board[2][2] != blankchar)
{
return 0;
}
if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[0][2] != blankchar)
{
return 0;
}
} else {
if (board[0][0] == board[0][1] && board[0][1] == board[0][2] && board[0][2] != blankchar)
{
return 1;
}
if (board[1][0] == board[1][1] && board[1][1] == board[1][2] && board[1][2] != blankchar)
{
return 1;
}
if (board[2][0] == board[2][1] && board[2][1] == board[2][2] && board[2][2] != blankchar)
{
return 1;
}
//CHECK COLUMNS
if (board[0][0] == board[1][0] && board[1][0] == board[2][0] && board[2][0] != blankchar)
{
return 1;
}
if (board[0][1] == board[1][1] && board[1][1] == board[2][1] && board[2][1] != blankchar)
{
return 1;
}
if (board[0][2] == board[1][2] && board[1][2] == board[2][2] && board[2][2] != blankchar)
{
return 1;
}
//CHECK DIAGONALS
if (board[0][2] == board[1][1] && board[1][1] == board[2][2] && board[2][2] != blankchar)
{
return 1;
}
if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[0][2] != blankchar)
{
return 1;
}
}
return 2;
}
//UGLY CODE; THIS PRINTS OUT A NICE LOOKING TABLE.
void table(void)
{
cout << "\n\n\tCurrent Table\n";
cout << "\t" << (char) 201 << char (205) << char (205) << char (205) << char (205) << char (205) << char (203) << (char) 205 << char (205) << char (205) << char (205) << (char) 205 << (char) 203 << (char) 205 << char (205) << (char) 205 << char (205) << char (205) << char (187) << endl;
cout << "\t" << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << endl;
cout << "\t" << (char) 186 << " " <<board[0][0]<<" " << (char) 186 << " " << board[0][1] << " " << (char) 186 << " " <<board[0][2]<<" " << (char) 186 << endl;
cout << "\t" << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << endl;
cout << "\t" << (char) 204 << char (205) << char (205) << char (205) << char (205) << char (205) << (char) 206 << char (205) << char (205) << char (205) << char (205) << char (205) << (char) 206 << char (205) << char (205) << char (205) << char (205) << char (205) << char (185) << endl;
cout << "\t" << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << endl;
cout << "\t" << (char) 186 << " " <<board[1][0]<<" " << (char) 186 << " " << board[1][1]<<" " << (char) 186 << " " <<board[1][2]<<" " << (char) 186 << endl;
cout << "\t" << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << endl;
cout << "\t" << (char) 204 << char (205) << char (205) << char (205) << char (205) << char (205) << (char) 206 << char (205) << char (205) << char (205) << char (205) << char (205) << (char) 206 << char (205) << char (205) << char (205) << char (205) << char (205) << char (185) << endl;
cout << "\t" << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << endl;
cout << "\t" << (char) 186 << " " <<board[2][0]<<" " << (char) 186 << " " << board[2][1] << " " << (char) 186 << " " << board[2][2] << " " << (char) 186 << endl;
cout << "\t" << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << endl;
cout << "\t" << (char) 200 << char (205) << char (205) << char (205) << char (205) << char (205) << char (202) << (char) 205 << char (205) << char (205) << char (205) << (char) 205 << (char) 202 << (char) 205 << char (205) << (char) 205 << char (205) << char (205) << char (188) << endl;
cout << "\n";
}
//UGLY CODE; THIS JUST PRINTS OUT A PRETTY TITLE
int init(void)
{
cout << "\t" << (char) 201 << (char) 205 << (char) 203 << (char) 205 << (char) 187 << " " << (char) 201 << (char) 205 << (char) 203 << (char) 205 << (char) 187 << " " << (char) 201 << (char) 205 << (char) 205 << (char) 187 << " " << (char) 201 << (char) 205 << (char) 203 << (char) 205 << (char) 187 << " " << (char) 201 << (char) 205 << (char) 205 << (char) 187 << " " << (char) 201 << (char) 205 << (char) 205 << (char) 187 << " " << (char) 201 << (char) 205 << (char) 203 << (char) 205 << (char) 187 << " " << (char) 201 << (char) 205 << (char) 205 << (char) 187 << " " << (char) 201 << (char) 205 << (char) 205 << (char) 187 << "\n";
cout << "\t " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 204 << (char) 205 << (char) 205 << (char) 185 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 204 << (char) 205 << "\n";
cout << "\t " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " " << (char) 186 << " \n";
cout << "\t " << (char) 202 << " " << (char) 200 << (char) 205 << (char) 202 << (char) 205 << (char) 188 << " " << (char) 200 << (char) 205 << (char) 205 << (char) 188 << " " << (char) 202 << " " << (char) 202 << " " << (char) 202 << " " << (char) 200 << (char) 205 << (char) 205 << (char) 188 << " " << (char) 202 << " " << (char) 200 << (char) 205 << (char) 205 << (char) 188 << " " << (char) 200 << (char) 205 << (char) 205 << (char) 188 << "\n";
cout << "\tInstructions: use number keys to determine move.\n\n";
cout << "\t[1][2][3]\n";
cout << "\t[4][5][6]\n";
cout << "\t[7][8][9]\n\n";
cout << "\tContact: [email protected]\n";
cout << "\t[x] Player 1, please enter your name now->";
cin.getline(playername1, 25, '\n');
cout << "\t[o] Player 2; enter yours->";
cin.getline(playername2, 25, '\n');
for (i = 0; i < 3; i++)
{
for (ii = 0; ii < 3; ii++)
{
board[i][ii] = blankchar;
}
}
return 0;
}
int getInput(char player)
{
if (player == 'x')
{
cout << "\t" << playername1 << ", make your move->";
cin>>move;
while (move != 1 && move != 2 && move != 3 && move != 4 && move != 5 && move != 6 && move != 7 && move != 8 && move != 9)
{
cout << "\n\t Invalid input, please restate->";
cin>>move;
}
switch (move)
{
case 1: { x = 0; y = 0; break; }
case 2: { x = 0; y = 1; break; }
case 3: { x = 0; y = 2; break; }
case 4: { x = 1; y = 0; break; }
case 5: { x = 1; y = 1; break; }
case 6: { x = 1; y = 2; break; }
case 7: { x = 2; y = 0; break; }
case 8: { x = 2; y = 1; break; }
case 9: { x = 2; y = 2; break; }
{
cout << "\n\tInvalid input, please restate->";
getInput(playerup);
}
}
return 1;
} else {
cout << "\t" << playername2 << ", make your move->";
cin>>move;
switch (move)
{
case 1: { x = 0; y = 0; break; }
case 2: { x = 0; y = 1; break; }
case 3: { x = 0; y = 2; break; }
case 4: { x = 1; y = 0; break; }
case 5: { x = 1; y = 1; break; }
case 6: { x = 1; y = 2; break; }
case 7: { x = 2; y = 0; break; }
case 8: { x = 2; y = 1; break; }
case 9: { x = 2; y = 2; break; }
{
cout << "\n\tInvalid input, please restate->";
getInput(playerup);
}
}
return 2;
}
}
int setInput(char player)
{
if (board[x][y] == blankchar)
{
board[x][y] = player;
moves++;
return 0;
}
return 1;
}