C语言三子棋怎么做,步骤和方法是什么?
导读:C语言三子棋怎么做,步骤和方法是什么?用C语言实现三子棋并不难,下文给大家介绍了详细的实现步骤及代码,大家可以参考了解看看,对新手学习C语言有一定的学习价值,接下来跟随小编学习一下吧。 一、写代码前明确下棋时的步骤与顺序 1.创建一个3...
C语言三子棋怎么做,步骤和方法是什么?用C语言实现三子棋并不难,下文给大家介绍了详细的实现步骤及代码,大家可以参考了解看看,对新手学习C语言有一定的学习价值,接下来跟随小编学习一下吧。
一、写代码前明确下棋时的步骤与顺序
- 1.创建一个3*3的棋盘.
- 2.将上面创建的棋盘中每个格初始化成' '状态.
- 3.打印出初始化完成的棋盘
- 4.玩家落子
- 5.电脑落子
- 6.判断胜负
写代码之前梳理好大概的思路,先写出初步的主函数
int main() {
char winner = ' ';
//1.创建一个棋盘,并初始化.
char board[MAX_ROW][MAX_COL] = {
0 }
;
//2.init函数将棋盘每个格子初始化成' '.
init(board);
while (1) {
//3.打印棋盘
printBoard(board);
//4.玩家落子
playerMove(board);
//5.判断胜负
winner = checkWinner(board);
if (winner != ' ') {
//胜负已分
break;
}
//6.电脑落子
computerMove(board);
//7.判断胜负
winner = checkWinner(board);
if (winner != ' ') {
//胜负已分
break;
}
}
在创建棋盘是char board[][]的[]中不要写3,写3在后面看代码时不能明确分清3代表什么
因此建议定义宏
#define MAX_ROW 3 #define MAX_COL 3
这样可以清楚的看出[]中的内容代表什么,提高可读性.
二 根据初步的主函数完成想要的代码
1.写一个函数来初始化棋盘
//将棋盘初始化成' '
void init(char board[MAX_ROW][MAX_COL]) {
for (int row = 0;
row MAX_ROW;
row++) {
for(int col = 0;
col MAX_COL;
col++) {
board[row][col] = ' ';
}
}
//设计随机种子
srand((unsigned int) time(0));
}
2.打印棋盘
void printBoard(char board[MAX_ROW][MAX_COL]) {
system("cls");
for (int row = 0;
row MAX_ROW;
row++) {
printf("+---+---+---+\n");
for (int col = 0;
col MAX_COL;
col++) {
printf("| %c ", board[row][col]);
}
printf("|");
printf("\n");
}
printf("+---+---+---+\n");
}
system("cls")是让每次打印棋盘前清除之前的棋盘这样能让界面清晰一些
(使用的是简单的C来完成程序所以打印的棋盘也比较简陋)
3.玩家落子
void playerMove(char board[MAX_ROW][MAX_COL]) {
printf("请玩家落子!");
while (1) {
printf("请输入落子的位置(row col):");
int row = 0;
int col = 0;
scanf("%d %d", &
row, &
col);
//输入后验证输入内容是否合法.
if (row 0 || row >
= MAX_ROW || col 0 || col >
= MAX_COL) {
printf("输入有误.请重新输入!\n");
continue;
}
if (board[row][col] != ' ') {
printf("当前位置已有棋子,请重新输入!\n");
continue;
}
board[row][col] = 'x';
break;
}
}
以输入坐标的方式来实现落子,并且要检测玩家落子是否合理,以免输入无效的坐标.
4.电脑落子
void computerMove(char board[MAX_ROW][MAX_COL]) {
printf("轮到电脑落子");
while (1) {
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (board[row][col] != ' ') {
continue;
}
board[row][col] = 'o';
break;
}
}
电脑落子采用随机数的方式来进行落子,因此需要设置随机种子,将它写在初始化棋盘函数内,每次初始化一次进行一次随机种子的设置
由于是随机落子因此实现的不是人工智能而是人工智障.
5.判断胜负
int checkWinner(char board[MAX_ROW][MAX_COL]) {
//检查所有行
for (int row = 0;
row MAX_ROW;
row++) {
if (board[row][0] != ' ' &
&
board[row][0] == board[row][1] &
&
board[row][0] == board[row][2]) {
return board[row][0];
}
}
//检查所有列
for (int col = 0;
col MAX_COL;
col++) {
if (board[0][col] != ' ' &
&
board[0][col] == board[1][col] &
&
board[0][col] == board[2][col]) {
return board[0][col];
}
}
//检查对角线
if (board[0][0] == board[1][1] &
&
board[0][0] == board[2][2] &
&
board[0][0] != ' ') {
return board[0][0];
}
if (board[0][2] == board[1][1] &
&
board[0][2] == board[2][0] &
&
board[0][2] != ' ') {
return board[0][2];
}
if (isFull(board)) {
return 'q';
}
return ' ';
}
检查每行 每列 对角线是否有三个相同的棋子从而判断胜负.
int isFull(char board[MAX_ROW][MAX_COL]) {
for (int row = 0;
row MAX_ROW;
row++) {
for (int col = 0;
col MAX_COL;
col++) {
if (board[row][col] == ' ') {
//棋盘没满
return 0;
}
}
}
return 1;
}
检查棋盘有没有下满(可能出现和棋)
这就实现一个简单的三子棋游戏
在主函数中玩家落子后应也判断一次胜负,以免出现玩家胜利电脑再落子的情况.
三、三子棋实现代码
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h>
#includetime.h>
#define MAX_ROW 3
#define MAX_COL 3
//将棋盘初始化成' '
void init(char board[MAX_ROW][MAX_COL]) {
for (int row = 0;
row MAX_ROW;
row++) {
for(int col = 0;
col MAX_COL;
col++) {
board[row][col] = ' ';
}
}
//设计随机种子
srand((unsigned int) time(0));
}
void printBoard(char board[MAX_ROW][MAX_COL]) {
system("cls");
for (int row = 0;
row MAX_ROW;
row++) {
printf("+---+---+---+\n");
for (int col = 0;
col MAX_COL;
col++) {
printf("| %c ", board[row][col]);
}
printf("|");
printf("\n");
}
printf("+---+---+---+\n");
}
void playerMove(char board[MAX_ROW][MAX_COL]) {
printf("请玩家落子!");
while (1) {
printf("请输入落子的位置(row col):");
int row = 0;
int col = 0;
scanf("%d %d", &
row, &
col);
//输入后验证输入内容是否合法.
if (row 0 || row >
= MAX_ROW || col 0 || col >
= MAX_COL) {
printf("输入有误.请重新输入!\n");
continue;
}
if (board[row][col] != ' ') {
printf("当前位置已有棋子,请重新输入!\n");
continue;
}
board[row][col] = 'x';
break;
}
}
void computerMove(char board[MAX_ROW][MAX_COL]) {
printf("轮到电脑落子");
while (1) {
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (board[row][col] != ' ') {
continue;
}
board[row][col] = 'o';
break;
}
}
int isFull(char board[MAX_ROW][MAX_COL]) {
for (int row = 0;
row MAX_ROW;
row++) {
for (int col = 0;
col MAX_COL;
col++) {
if (board[row][col] == ' ') {
//棋盘没满
return 0;
}
}
}
return 1;
}
int checkWinner(char board[MAX_ROW][MAX_COL]) {
//检查所有行
for (int row = 0;
row MAX_ROW;
row++) {
if (board[row][0] != ' ' &
&
board[row][0] == board[row][1] &
&
board[row][0] == board[row][2]) {
return board[row][0];
}
}
//检查所有列
for (int col = 0;
col MAX_COL;
col++) {
if (board[0][col] != ' ' &
&
board[0][col] == board[1][col] &
&
board[0][col] == board[2][col]) {
return board[0][col];
}
}
//检查对角线
if (board[0][0] == board[1][1] &
&
board[0][0] == board[2][2] &
&
board[0][0] != ' ') {
return board[0][0];
}
if (board[0][2] == board[1][1] &
&
board[0][2] == board[2][0] &
&
board[0][2] != ' ') {
return board[0][2];
}
if (isFull(board)) {
return 'q';
}
return ' ';
}
int main() {
char winner = ' ';
//1.创建一个棋盘,并初始化.
char board[MAX_ROW][MAX_COL] = {
0 }
;
//2.init函数将棋盘每个格子初始化成' '.
init(board);
while (1) {
//3.打印棋盘
printBoard(board);
//4.玩家落子
playerMove(board);
//5.判断胜负
winner = checkWinner(board);
if (winner != ' ') {
//胜负已分
break;
}
//6.电脑落子
computerMove(board);
//7.判断胜负
winner = checkWinner(board);
if (winner != ' ') {
//胜负已分
break;
}
}
if (winner == 'x') {
printf("恭喜你,你赢了!\n");
}
else if(winner=='o') {
printf("你真菜连人工智障都玩不过\n");
}
else {
printf("你和人工智障五五开\n");
}
return 0;
}
运行界面如下:
以上就是关于C语言三子棋怎么做的介绍,本文只是提供了一种实现思路,代码仅供参考,需要的朋友可以了解看看,希望对大家学习C语言有帮助,想要了解更多可以继续浏览网络其他相关的文章。
文本转载自PHP中文网
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: C语言三子棋怎么做,步骤和方法是什么?
本文地址: https://pptw.com/jishu/655092.html
