当前位置:首页 > 通信资讯 > 正文

用c语言编写井字棋游戏(c语言井字棋简单版)

本文实例为大家分享了C语言实现简单井字棋游戏的具体代码,供大家参考,具体内容如下

1.什么是井字棋

井字棋相信大部分人都玩过

规则:双方轮流放子,当某一方的三个子连成一线(行,列,对角)时,该方获胜。

2.游戏前的准备

1. 菜单

游戏正式开始前我们可以为用户提供一个选择菜单,笔者做了一个最简单的游戏开始菜单:

用c语言编写井字棋游戏(c语言井字棋简单版)

代码:

?
1 2 3 4 5 6 7 8 /*菜单*/ int menu() { printf("###########################\n"); printf("## 1.Play 2.Exit ##\n"); printf("###########################\n"); return 0; }

2. 打印棋盘

要玩游戏我们首先要有一个3*3的棋盘,棋子信息则用一个二维数组来表示,并进行初始化:

?
1 char chess[ROW][COL] = { '\0' }; //ROW=3,COL=3

显示棋盘我们可以写一个函数:

?
1 2 3 4 5 6 7 8 9 10 11 /*显示棋盘*/ int ShowBroad(char chess[][COL]) { system("cls"); //刷新界面 printf(" %c | %c |%c Player: X\n",chess[0][0],chess[0][1],chess[0][2]); printf(" ---------- Computer: O\n"); printf(" %c | %c |%c \n", chess[1][0], chess[1][1], chess[1][2]); printf(" ----------\n"); printf(" %c | %c |%c \n", chess[2][0], chess[2][1], chess[2][2]); }

将棋盘打印出来的同时在旁边显示出玩家和电脑所用的棋子。棋盘效果:

用c语言编写井字棋游戏(c语言井字棋简单版)

由于电脑是随机落子的,这样我们就会用到随机数,于是可以在后面加上随机数的种子,为之后的随机数做准备。
至此,准备工作就完成了,这部分的代码如下:

?
1 2 3 4 5 6 7 8 int a ,count =0; char chess[ROW][COL] = { '\0' }; menu(); //显示菜单 printf("Please Enter Your Chose:>\n "); scanf("%d", &a); if (a != 1){ return 0; } ShowBroad(chess); srand((unsigned)time(NULL));

其中count是用来统计已占用的格子。

3.游戏开始

做完准备工作后我们开始正式的游戏逻辑编写。游戏逻辑可以这样考虑:

先由用户输入一个坐标,进行胜负和平局判断,若未产生任何结果则由电脑落子,之后同样进行胜负判断,如此循环直到产生胜负或平局。

基于此,我们将所有游戏过程写在一个死循环中,直到产生游戏结果则跳出。

1. 玩家落子

代码:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 if ((user_x >= 1 && user_x <= 3) && (user_y >= 1 && user_y <= 3)&&\ chess[user_x-1][user_y-1]=='\0'){ //输入是否合法 chess[user_x - 1][user_y - 1] = 'X'; count++; if (Judge(chess) == 'X'){ //判断玩家赢 ShowBroad(chess); printf("You Win! :)\n"); break; } else if (count == 9){ //判断平局 ShowBroad(chess); printf("Draw!\n"); break; }

解释:当用户输入坐标在棋盘内并且该位置尚未被落子时,(user_x >= 1 && user_x <= 3) && (user_y >= 1 && user_y <= 3)&&\ chess[user_x-1][user_y-1]=='\0')将棋盘对应坐标元素改写成“X”(chess[user_x - 1][user_y - 1] = 'X';),之后将格子占用数count+1.

2. 判断胜平

为了判断是否胜利,我们可以写一个函数,将棋盘现在的数据传入,在里面逐行逐列判断。

代码:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /*判断*/ char Judge(char chess[][COL]) { for (int i = 0; i < COL; i++){ //判断行 if (chess[i][0] == chess[i][1] && chess[i][1] == chess[i][2] && chess[i][2] != '\0') { return chess[i][0]; } } for (int i = 0; i < COL; i++){ //判断列 if (chess[0][i] == chess[1][i] && chess[1][i] == chess[2][i] && chess[2][i] != '\0') { return chess[0][i]; } } if (chess[0][0] == chess[1][1] && chess[1][1] == chess[2][2] && chess[2][2] != '\0') { //判断对角线 return chess[0][0]; } if (chess[0][2] == chess[1][1] && chess[1][1] == chess[2][0] && chess[2][0] != '\0') { return chess[0][2]; } return ' '; }

此时是玩家落子之后,不会产生负,所以不需要判断是否输了。检查Judge()的返回值。当玩家胜利时输出胜利,游戏结束,当平局时输出平局,游戏结束

?
1 2 3 4 5 6 7 8 9 10 if (Judge(chess) == 'X'){ //判断玩家赢 ShowBroad(chess); printf("You Win! :)\n"); break; } else if (count == 9){ //判断平局 ShowBroad(chess); printf("Draw!\n"); break; }

3. 电脑落子

电脑是随机落子的,于是需要给chess()传入随机的x和y,于是这里用到rand()

?
1 2 3 4 5 6 7 8 9 10 11 12 13 void computer(char chess[][COL]) { int x, y; while (1){ x = rand() % (COL) + 0; y = rand() % (COL) + 0; if (chess[x][y] == '\0'){ chess[x][y] = 'O'; break; } } ShowBroad(chess); }

这里要注意当随机的坐标未被落子时才能使用,所以用死循环来查找一个合法的坐标,当找到时电脑才能落子,之后跳出循环,并刷新棋盘。

4. 判断负

与上面一样,我们调用Judge()函数来判断,当返回的是“O”时候,输出信息,游戏结束。

?
1 2 3 4 if (Judge(chess) == 'O'){ //判断电脑赢 printf("You Lost!\n"); break; }

最终游戏界面:

用c语言编写井字棋游戏(c语言井字棋简单版)

结束

至此,一个简单的井字棋游戏就完成了,内容简陋,可以优化的地方还有很多,各位可自行扩展。由这个简单的三子棋我们还能进一步发展成五子棋,做出更多的内容,先挖个五子棋的坑,以后来填。

main函数代码:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 int main() { int a ,count =0; char chess[ROW][COL] = { '\0' }; menu(); //显示菜单 printf("Please Enter Your Chose:>\n "); scanf("%d", &a); if (a != 1){ return 0; } ShowBroad(chess); srand((unsigned)time(NULL)); while (1) { int user_x, user_y; printf("Please Enter:<x,y>\n"); scanf("%d%d", &user_x, &user_y); //玩家落子 if ((user_x >= 1 && user_x <= 3) && (user_y >= 1 && user_y <= 3)&&\ chess[user_x-1][user_y-1]=='\0'){ //输入是否合法 chess[user_x - 1][user_y - 1] = 'X'; count++; if (Judge(chess) == 'X'){ //判断玩家赢 ShowBroad(chess); printf("You Win! :)\n"); break; } else if (count == 9){ //判断平局 ShowBroad(chess); printf("Draw!\n"); break; } computer(chess); //电脑落子 count++; if (Judge(chess) == 'O'){ //判断电脑赢 printf("You Lost!\n"); break; } } else continue; } system("pause"); return 0; }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_41913884/article/details/83623508

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。