电子商务公司网站设计,专业群建设 网站,福州+网站开发,企业内部网站模板简介#xff1a;
目标很简单#xff1a;实现一个 三子棋小游戏。三子棋大家都玩过#xff0c;规则就不提及了。本博文中实现的三子棋在对局中#xff0c;电脑落子是随机的#xff0c;不具有智能性#xff0c;玩家的落子位置使用键盘输入坐标。下面开始详细介绍如何实现一…简介
目标很简单实现一个 三子棋小游戏。三子棋大家都玩过规则就不提及了。本博文中实现的三子棋在对局中电脑落子是随机的不具有智能性玩家的落子位置使用键盘输入坐标。下面开始详细介绍如何实现一个简单的三子棋游戏。
步骤一制定框架
想要实现一个小游戏第一件事就是制定框架那么制定框架是什么意思怎么制定框架
#includechess.h
int main()
{int n 0;do{menu();printf(input:\n);scanf(%d, n);switch(n){case 1:game();break;case 0:printf(exit\n);break;default:printf(input error,input again:\n);break;}} while(n);return 0;
}这里的menu函数只是一个打印函数定义如下
void menu()
{printf(**************\n);printf(*** 1.play ***\n);printf(*** 0.exit ***\n);printf(**************\n);
}
将main函数写全就是制定了一个完整的框架只要我们输入1就会进入game函数之后实现进行游戏输入0就会退出游戏结束程序输入其他数会让我们重新输入。整个过程就是这么简单。我们只需要实现了game的过程整个游戏就制作完成了。
那么game函数怎么实现呢
步骤二实现game函数 我们在做一个项目的时候需要把函数的声明放在头文件里函数的定义放在源文件里但是具体情况可以根据个人偏好来我个人是喜欢把主函数里会用到的函数声明放进头文件里定义放在源文件里。如果在函数的定义中需要实现另外一个函数就在另外一个函数的声明和定义就都放在源文件里。
要实现game函数我们需要先将game的流程想清楚
我们默认玩家先下棋玩家输入一个合法坐标然后电脑在下棋。并且每当玩家或者电脑下棋之后需要判断对局是否结束如果结束那么最后落子的一方胜利。另外在玩家或者电脑下棋之后我们需要将棋盘和棋子打印出来。
void game()
{char pieces[ROW][COL] { 0 };piecesInit(pieces, ROW, COL);board(pieces, ROW, COL);while (1){system(cls);board(pieces, ROW, COL);printf(player move!\n);playerMove(pieces, ROW, COL);system(cls);board(pieces,ROW,COL);if (judge(pieces, ROW, COL)){printf(you win\n);break;}printf(computer move!\n);computerMove(pieces, ROW, COL);Sleep(1000);system(cls);board(pieces, ROW, COL);if (judge(pieces, ROW, COL)){printf(you lose\n);break;}}
}
pieces二维数组是用来储存棋子位置信息的玩家的棋子是星号电脑的棋子是井号
下面对game函数中用到的函数进行解释
piecesInit将pieces初始化使得每一个元素都是空格这样初始状态就不会打印出棋子
board传入pieces数组将棋盘和棋子一并打印
playerMove玩家下棋将pieces中的一个空格元素变为星号
computerMoe电脑下棋将pieces中的一个空格元素变为井号
judge返回值是int如果对局结束了就返回1未结束返回0
这样整个game的流程就形成了
步骤三实现game函数中的各个函数
void board(char pieces[ROW][COL], int row, int col)
{for (int i 0; i row; i){printf( %c | %c | %c \n,pieces[i][0],pieces[i][1],pieces[i][2]);if (i row - 1){printf(---|---|---\n);}}
}//如果不理解可以在自己的电脑上把棋盘敲出来就会明白board函数的原理不敲出来不可能搞明白
void playerMove(char pieces[ROW][COL],int row,int col)
{int x 0;int y 0;while (1){printf(x:\n);scanf(%d, x);printf(y:\n);scanf(%d, y);x--;//用户输入的起始位置是1而数组下标起始位置是0y--;if (x 0 || x2 || y 0 || y2 || pieces[x][y] ! )//判断是否非法printf(error,again\n);elsebreak;//正确输入退出循环}pieces[x][y] *;
}
void computerMove(char pieces[ROW][COL], int row, int col)
{int x 0;int y 0;while (1){x rand() % 3;//取0到2的一个数y rand() % 3;if (x 0 x 2 y 0 y 2 pieces[x][y] )//如果位置合法{pieces[x][y] #;break;}}
}
int judge(char pieces[ROW][COL], int row, int col)
{//判断是否有一行三个棋子一样for (int i 0; i row; i){int sum pieces[i][0] pieces[i][1] pieces[i][2];if (sum 3 * * || sum 3 * #)return 1;}//判断是否有一列三个棋子一样for (int j 0; j col; j){int sum pieces[0][j] pieces[1][j] pieces[2][j];if (sum 3 * * || sum 3 * #)return 1;}//判断两个对角线是否有三个棋子一样int sum1 pieces[0][0] pieces[1][1] pieces[2][2];int sum2 pieces[0][2] pieces[1][1] pieces[2][0];if (sum1 3 * * || sum1 3 * # || sum2 3 * * || sum2 3 * #)return 1;return 0;
}
这样就实现了一个简单的三子棋看看效果如何