c语言之三子棋游戏

前言

在做这个程序之前,我先说一下要实现这个游戏需要一定的知识基础,比如分支语句,循环语句,二维数组等等,所以如果是新学的小伙伴,就先去学习相关的知识,等到学完知识再来学习这个游戏代码的实现,还是一件挺有意思的事情,至少我是这么认为的。

程序框架

在这个我先去说一下这个游戏的框架:

一,要做一个菜单,让人去选择;

二,是做这个游戏的实现;

1,要把数组的内容全部初始化,全部放入‘ ’;

2,打印棋盘;

3,玩家下棋;

4,电脑下棋;

5,判断输赢;

这里我是为了方便大家理解所以列了一个大置的清单,其实像我们如果说要去实现一个复杂的程序,我觉得构建框架是一个非常有意并且可以锻炼我们自己的思维,一个复杂的程序肯定离不开多个函数的实现,所以我们接触一个新的程序可以先理清其中的逻辑,先去构建框架,再去做细节,好了,接下来我会带着大家去实现这个游戏。

程序框架实现准备

开始之前我们先新建一个项目,然后再新建test.c,game.c,game.h的三个文件,带.c的是源文件,带.h的是头文件,这里因为要实现一个游戏的程序很复杂,所以单独拿出来写。

1,我们首先来写一个简单的程序,目的就是实现菜单的打印以及游戏的开始,这里因为还没开始编写关于游戏的代码,所以我们在test.c上编写这段代码,如下图:

 

 这样菜单页面就做好了,这里我说一下为什么使用do while,因为不论玩家怎么选择,都是要先打印菜单给玩家去看,嗯,这里都是比较基础的知识,接下来我就要开始game.c的实现了。

这里呢我说一下game.h,这里我为了方便,就把#include<stdio.h>放进头文件中,然后在test.c中包含一下就好了。还有这里为了方便我就定义了两个宏,分别表示行和列。

1.初始化棋盘

接下来,我们就要开始写game.c了,首先,我们写一个二维数组,然后写一个程序把数组全部初始化为空格,即‘ ’,放图:

 

 

这里我放了game.h和game.c,想必大家对框架应该有所了解了吧,这里其实对test.c中的主函数也有要求,我就放在最后去说了 。

2.打印棋盘

大家应该都下过棋,知道棋盘长什么样子吧,对,像‘井’字一样,好了,知道这个那么就可以去想代码了,我这里就直接上图了:

 

 我这个逻辑是什么呢,就是双层循环,内层循环实现列打印,外层循环实现行打印,而且打印也有讲究,这里逻辑是先打印数据,在打印分割线。效果如上,但是这个是不是没达到棋盘的效果,正常的话边角是不应该打印东西的,那么应该怎么去掉呢,很简单,一个if语句就OK了,

 这样是不是看上去好看多了,也更像一个棋盘了,这里我用了三个if语句,前两个都是判断‘|’是否打印的,最后一个是判断’---|---|---|’是否打印。

3.玩家下棋

先看图吧:

 这里就是定义两个变量来确定数组元素位置,这里我们玩的是三子棋,那么x,y的取值是不是就是1~3,注意了这里在玩家看来都是从1开始的,而数组是从0开始的,所以要各自减1,看到这里是不是有人运行代码了,发现不对了,哈哈,很正常,知道为什么吗,因为我们写的game函数里光有玩家下棋了,你们想一想,玩家下棋,实际上就是对二维数组的值进行改变,所以改变完了我们是不是要重新在打印棋盘啊,这次你们再去试试,哦,不出所料,又错了吧,为什么呢,循环啊,你难道只让玩家下一次棋吗?(这里我们先不讨论电脑下棋的事)。所以说逻辑缜密才是编好代码的关键。

4.电脑下棋

电脑下棋最重要的点就是生成随机数,你们可以自己去查,这里我就不过多赘述了;

我要说的是生成随机数的函数有新的头文件需要包含,而且还有时间戳的概念,而且时间戳也要包含头文件,你们自己去查吧。

5.判断输赢

 这里的逻辑就是一行三个字符相等或者一列三个字符相等或者对角线三个字符相等,返回值为字符本身,这个我们在test.c中用一个变量来接收这个函数的返回值,返回为‘*’,玩家赢,返回为‘#’,电脑赢,返回为“q”,平局,返回为“c”,继续比赛。

6.game函数的实现

 以上的就是在test.c中的game函数写的程序框架,看到这里,大家多多少少都明白一点了吧,好了,以上就是这次我讲解的内容,希望大家三连,然后这个是这次的源码链接https://gitee.com/dragon-bank-sky/class110.giticon-default.png?t=N3I4https://gitee.com/dragon-bank-sky/class110.git

 

 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,设计三子棋游戏可以分为以下几个步骤: 1. 定义棋盘:通常使用一个三行三列的二维数组来表示棋盘,用数字0表示空位,用数字1表示玩家1下的棋子,用数字2表示玩家2下的棋子。 2. 实现落子功能:用户输入行列坐标,程序判断该位置是否为空位,如果是则将该位置设置为当前玩家下的棋子。 3. 判断胜负:每次玩家下完棋后,程序需要判断是否有一方取得胜利,可以通过遍历棋盘来实现。 4. 实现人机对战:可以使用随机数来模拟电脑的落子,也可以使用一些简单的算法来提高电脑的智能程度。 下面是一个简单的C语言三子棋游戏代码示例,供参考: ``` #include <stdio.h> #include <stdlib.h> #include <time.h> int chessboard[3][3]; // 棋盘 int check_win(int player) // 判断胜负 { int i, j; for (i = 0; i < 3; i++) { if (chessboard[i][0] == player && chessboard[i][1] == player && chessboard[i][2] == player) { return 1; } if (chessboard[0][i] == player && chessboard[1][i] == player && chessboard[2][i] == player) { return 1; } } if (chessboard[0][0] == player && chessboard[1][1] == player && chessboard[2][2] == player) { return 1; } if (chessboard[0][2] == player && chessboard[1][1] == player && chessboard[2][0] == player) { return 1; } return 0; } void print_chessboard() // 打印棋盘 { int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { if (chessboard[i][j] == 0) { printf(" "); } else if (chessboard[i][j] == 1) { printf("X"); } else if (chessboard[i][j] == 2) { printf("O"); } if (j < 2) { printf("|"); } } printf("\n"); if (i < 2) { printf("-+-+-\n"); } } } int main() { int player = 1; // 玩家先手 int row, col; srand((unsigned)time(NULL)); // 初始化随机数生成器 printf("Welcome to the Tic-Tac-Toe game!\n"); printf("Player 1: X\n"); printf("Player 2: O\n"); while (1) { printf("Player %d's turn.\n", player); if (player == 1) { printf("Please input the row and column numbers to place your chess(X).\n"); scanf("%d%d", &row, &col); if (chessboard[row][col] != 0) { printf("This place has been taken, please choose another place.\n"); continue; } chessboard[row][col] = 1; } else { printf("Thinking...\n"); while (1) { row = rand() % 3; col = rand() % 3; if (chessboard[row][col] == 0) { break; } } chessboard[row][col] = 2; } print_chessboard(); if (check_win(player)) { printf("Player %d wins!\n", player); break; } if (player == 1) { player = 2; } else { player = 1; } } return 0; } ``` 注意:以上代码仅作为参考,可能存在一些漏洞和不足之处,需要在实际使用中进行完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值