由玩家输入棋子坐标将棋子存入数组board中,由chessBoard得数组存储方式为{{%c|%c|%c}---{%c|%c|%c}---%c|%c|%c},最后根据isWin返回值判断玩家或电脑是否赢了游戏
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#pragma warning(disable :4996)
void game();
void menu();
void chessBoard(char board[][3]);
char playerMove(char board[][3]);
void comeputerMove(char board[][3]);
int isFull(char board[][3]);
char isWin(char board[][3]);
void menu()
{
printf("########################\n");
printf(" 1.play \n");
printf(" 2.exit \n");
printf("########################\n");
}
//1.输出菜单2.选择进入游戏//
int main()
{
menu();
int choice;
scanf("%d", &choice);
switch (choice)
{
case 1:
game();
break;
case 2:
exit(0);
}
system("pause");
}
void game()
{
char board[3][3];
char ret;
memset(board, ' ',9); //数组清零//
//do{//
do{
chessBoard(board); //输出面板//
//playerMove(board);//
ret = playerMove(board); //输出提示坐标使玩家将棋子放入棋盘//
if (ret == 'o')
{
comeputerMove(board);
//chessBoard(board);//
//break;//
}
else
{
printf("please try again\n");
//break;//
}
} while ((isWin(board)!=0)||(isFull(board)==1)); //当棋盘满了或者isWin函数返回值不为零时跳出函数//
char win;
win = isWin(board);
if (win = 'o')
{
printf("you win\n");
//break;//
}
else if (win = 'x')
{
printf("you lose\n");
//break;//
}
else if (win = 'p')
{
printf("pinju\n");
//break;//
}
else
{
printf("erro!\n");
}
//} while( (isWin(board) != 0) || (isFull(board) == 1));//
}
void chessBoard(char board[][3])
{
int i = 0;
for (i = 0; i < 3; i++)
{
printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
if (i < 2)
{
printf(" - - - \n");
}
}
}
char playerMove(char board[][3])
{
int x;
int y;
printf("please enter<x,y>\n");
scanf("%d%d", &x, &y);
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = 'o';
return board[x - 1][y - 1];
}
else
{
printf("please try again\n");
return 1;
}
}
void comeputerMove(char board[][3])
{
srand((unsigned long)time(NULL));
do{
int x = rand() % 3;
int y = rand() % 3;
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = 'x';
break;
}
} while (1);
}
char isWin(char board[][3])
{
int i = 0;
for (i = 0; i < 3; i++)
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2])
return board[i][1];
}
for (i = 0; i < 3; i++)
{
if (board[0][i] == board[1][i] && board[2][i] == board[1][1])
return board[1][i];
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[2][2] != ' ')
{
return board[0][0];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
{
return board[1][1];
}
if (isFull(board) == 1)
return 'q';
else
return 0;
}
int isFull(char board[][3])
{
int i;
int j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
if (board[i][j] == ' ')
{
return 0;
}
}
}
return 1;
}