Advertisemen
#include <stdio.h>
#include <stdlib.h>
#define bool unsigned char
#define true 1
#define false 0
char **createBoard()
{
int i;
char** Board;
Board = (char**) malloc (sizeof(char*)*3);
for (i=0;i<3;i++)
Board[i] = (char*) malloc (sizeof(char)*3);
return Board;
}
void initBoard(char ***Board)
{
int x,y;
for (y=0;y<3;y++)
for (x=0;x<3;x++)
(*Board)[y][x] = '.';
}
void printBoard(const char **Board)
{
int x,y;
printf("\n");
for (y=0;y<3;y++)
{
for (x=0;x<3;x++)
printf("%c",Board[y][x]);
printf("\n");
}
printf("\n");
}
void addPosition(char ***Board, char ascx, char ascy, char turn)
{
int x,y;
x = ascx - 48;
y = ascy - 48;
(*Board)[y][x] = turn;
}
void changeTurn(char *turn)
{
if (*turn == 'O')
*turn = 'X';
else *turn = 'O';
}
lass="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">char checkGameWon(char **Board)
{
char symbol;
//check centre first
if (Board[1][1] != '.')
{
symbol = Board[1][1];
//check top left diagonal and bottom right diagonal
if (Board[0][0] == symbol && Board[2][2] == symbol)
return symbol;
if (Board[0][2] == symbol && Board[2][0] == symbol)
return symbol;
if (Board[0][1] == symbol && Board[2][1] == symbol)
return symbol;
if (Board[1][0] == symbol && Board[1][2] == symbol)
return symbol;
}
//check top straights
if (Board[0][0] != '.')
{
symbol = Board[0][0];
if (Board[0][1] == symbol && Board[0][2] == symbol)
return symbol;
if (Board[1][0] == symbol && Board[2][0] == symbol)
return symbol;
}
//check bottom diagonal
if (Board[2][2] != '.')
{
symbol = Board[2][2];
if (Board[2][1] == symbol && Board[2][0] == symbol)
return symbol;
if (Board[1][2] == symbol && Board[0][2] == symbol)
return symbol;
}
return '.';
}
void deleteBoard(char ***Board)
{
int i;
for (i=0;i<3;i++)
free((*Board)[i]);
free(*Board);
}
bool winRoutine(char **Board)
{
bool won = checkGameWon(Board);
if (won != '.')
{
printf("\n~~~%c wins!~~~\n",won);
return true;
}
return false;
}
bool isValidChar(char c)
{
return c>=48&&c<=50;
}
bool isValidInput(char input[3], char **Board)
{
if (!isValidChar(input[0]) || !isValidChar(input[1]))
return false;
//positioned char
if (Board[input[1]-48][input[0]-48] != '.')
return false;
return true;
}
int main()
{
char **Board;
char turn = 'O';
char won;
Board = createBoard();
initBoard(&Board);
while (!winRoutine(Board))
{
char buffer[3];
printBoard(Board);
do scanf("%s",&buffer);
while (!isValidInput(buffer,Board));
addPosition(&Board,buffer[0],buffer[1],turn);
changeTurn(&turn);
while (getchar() != '\n');
}
deleteBoard(&Board);
scanf("%c",&won);
return 0;
}
Advertisemen
Tidak ada komentar:
Posting Komentar