C语言实现三字棋小游戏

  • 前言
  • 游戏效果
  • 游戏实现

前言

本三字棋小游戏是依靠二维数组为核心来实现的,可以更加好理解掌握c语言数组的概念知识,依靠做小游戏项目,把学到了知识在输出出来加已巩固,最后有源代码

游戏效果

游戏实现

1.做出游戏菜单

2.游戏棋盘的创建

3.游戏开始下棋

4.判断游戏结束

5.源代码
1.菜单的实现

写一个菜单函数menu()

 printf("******************\n");printf("****  1.play ******\n");printf("****  0.exit *****\n");printf("******************\n");

在到main函数中调用


2.游戏棋盘的创建

这里可以看见玩家的落子的位置,和电脑落子的位置都给记录下来了,所以这里写一个game()函数
1.创建存储数据的容器

char board[3][3];
  • 这里有个问题就是要是以后我们不想只玩三字棋,想玩五子棋,或者十字棋怎么办呢
  • 数组大小写死了,缺少了灵活性,所以我们试着把数组大小写都头文件去,以后只要应用一下头文件就可以获取变量了,而且以后修改只需要改头文件里面的变量就可以了。

    创建一个头文件,里面定义数组大小


创建一个game.c的文件,函数的实现在这个文件里

#pragma once
#define ROW 3
#define COL 3


前台引用一下头文件,这样就可以到处使用刚刚定义的变量了

2.初始化棋盘

  • 其实初始化棋盘,就是往棋盘里面放空格

    这里的参数是要传过去一个棋盘,和具体的几行几列,才好把每一个二维数组添加空格子进去

头文件里面声明一下


game函数里面,定义一个初始化棋盘函数

InitBorad(board,ROW,COL);


初始化棋盘函数的实现,是在game.c文件里面实现

void InitBorad(char borad[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i=0 ; i < row; i++){for ( j = 0; j < col; j++){borad[i][j] = ' ';}}
}

2.打印棋盘

  • 在game.h定义打印棋盘函数
  • 在主方法test.c文件,引入打印棋盘函数
  • 实现打印棋盘函数
void DisplayBoard(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;for (j = 0; j < col; j++){printf(" %c ", board[i][j]);//打印的那一行的数据if (j < col - 1) //为了最后一行不打印printf("|");}printf("\n");if (i < row - 1){int j = 0;for (j = 0; j < col; j++){printf("---");if (j < col - 1)printf("|");}printf("\n");}}
}

3.游戏开始下棋

- 玩家下棋

game.h里面定义函数

void PlayerMove(char board[ROW][COL],int row,int col);

test.c里面引用函数

PlayerMove(board,ROW,COL);
DisplayBoard(board, ROW, COL);  //玩家下好棋 打印棋盘

game.c里面实现玩家下棋函数

void PlayerMove(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;printf("玩家下>\n");while (1){printf("请输入下棋的坐标:>");scanf("%d %d\n",&x,&y);if (x>=1 && x<=row && y>=1 && y<=col)  //判断下棋落子 是否在坐标内  {if (board[x-1][y-1] == ' ') //因为用户 并不是程序员不知道数组是从0开始的,所以减1{board[x - 1][y - 1] == '*';  //用户下子 *代替break;}else{printf("坐标已有棋,请重新输入\n");}}else{printf("坐标非法,请重新输入\n");}}
}

- 电脑下棋
在game.h里面定义一个电脑下棋函数

void ComputerMover( char board[ROW][COL],int row, int col);

在主方法main里面引用

在game.c里面实现电脑下棋

void ComputerMover(char board[ROW][COL], int row, int col)
{printf("电脑下:>\n");while (1){int x = rand() % row;   //%3 就是余数0-2 int y = rand() % col;if (board[x][y] ==' ') //电脑判断是否是可下的地方{board[x][y] = '#'; //电脑下棋break;}}}

注意rand()函数要搭配srand()函数一起使用

随机数需要引用的头文件,直接在game.h 文件里面引用

4.判断输赢

  • 在写之前,我们是否需要定一个规矩,游戏输赢有4种情况
    1.玩家赢了 - *
    2.电脑赢了 - #
    3.平局 - Q
    4.游戏继续 - C

    立下这个规则,我们才正式开始


    在game.h定义函数

char IsWin(char board[ROW][COL], int row, int col);

在test.c 写入以下代码

char ret = 0;   //接受游戏状态 while (1){//玩家玩PlayerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);  //玩家下好棋 打印棋盘ret = IsWin(board, ROW, COL);    //判断输赢if (ret != 'C') //C是我们的继续,如果我们不是C 那就是其他的结局 那么游戏结束{break;}//电脑玩ComputerMover(board, ROW, COL);DisplayBoard(board, ROW, COL);  //电脑下好棋 打印棋盘ret = IsWin(board, ROW, COL);   //判断输赢if (ret != 'C') //C是我们的继续,如果我们不是C 那就是其他的结局 那么游戏结束{break;}}if (ret == '*'){printf("玩家赢了");}else if (ret == '#'){printf("电脑赢了");}else{printf("平局\n");}DisplayBoard(board, ROW, COL);  //电脑下好棋 打印棋盘

在game.c实现函数

//判断游戏是否有输赢
char IsWin(char board[ROW][COL], int row, int col)
{int i = 0;//判断三行for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] !=' '){return board[i][1]; //不管里面是什么元素 都要返回回去}}//判断三列for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[2][i] != ' '){return board[1][i]; //不管里面是什么元素 都要返回回去}}//对角线if(board[0][0] == board[1][1]&& board[1][1]==board[2][2]&&board[1][1]!=' '){return board[1][1];}//对角线if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' '){return board[1][1];}//判断平局//如果棋盘满了返回1 ,不满返回 0int ret = IsFull(board, row, col);   //是否棋盘满if (ret ==  1 ){return 'Q';}//继续return 'C';
}

里面有个IsFull函数 判断棋是否平局

int IsFull(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for ( i = 0; i < row; i++){for ( j = 0; j < col; j++){if (board[i][j] == ' ') //如果里面的所有各种还等于空,就返回没有满{return 0;}}}return 1; //满了返回1
}

好了以上就是三字棋小游戏的代码了,快来自己动手实现一下吧,这需要一定的二维数组基础知识,其实代码实现不难,尝试去做就可以了。

三字棋源代码

【c语言】 我使用c语言基础做了一个老少皆宜的”国民小游戏(三字棋)“相关推荐

  1. 自己做的一个超级简单的小游戏

    自己做了一个简单的uniy3d小游戏 方向键控制一个小球躲避别的小球,撞到指定的墙胜利,被别的球撞到失败. 初学者练手 Player move Enemy move Islose_Trigger Sp ...

  2. c#推箱子小游戏代码_C#做的一个推箱子的小游戏

    C#做的一个推箱子的小游戏 c# 2021-1-6 下载地址 https://www.codedown123.com/59125.html 本推箱子游戏使用数组实现,用不同的数字标识不同的物体,从而简 ...

  3. 自己做的一个炸碉堡的小游戏(SWING)

    2019独角兽企业重金招聘Python工程师标准>>> import java.awt.event.KeyAdapter; import java.awt.event.KeyEven ...

  4. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

  5. 做一个简单的java小游戏--贪吃蛇

    做一个简单的java小游戏–贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/article/detail ...

  6. 做一个简单的java小游戏--单机版五子棋

    做一个简单的java小游戏–单机版五子棋 学了java有一段时间了,今天就来搞一个简单的单机版五子棋游戏. 实现功能:那必须能进行基础的输赢判断.还有重新开始的功能,悔棋的功能,先手设置的功能和退出的 ...

  7. 使用Unity从零点五开始,做半个不能玩的小游戏(完)

    在上一回<从零点五开始做半个不能玩的小游戏(二)>中,我们完成了下列事情: 1.重构野外.城市及英雄代码. 2.为英雄添加了简单的状态机,使其可以在世界中玩耍. 3.搭建了简单的数值体系, ...

  8. 用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便加强一下pygame库的学习. 玩法:每次点击鼠标时,会以鼠标 ...

  9. 用pygame做一个简单的python小游戏---生命游戏

    用pygame做一个简单的python小游戏-生命游戏 生命游戏(Game of Life) 生命游戏(Game of Life)是剑桥大学约翰·何顿·康威(John Horton Conway)教授 ...

最新文章

  1. C 语言 *** glibc detected *** free(): invalid next size (fast): 0x0000000000be1010 ***
  2. Qt qCompress和qUncompress 压缩和解压文件
  3. KVM、QEMU和KQemu的区别:
  4. CNN收购Beme视频分享APP 11个员工也将加入
  5. 结合zxing 和zbar 扫一扫
  6. 不要在意七十亿分之一对另七十亿分之一的看法
  7. HDU1233 还是畅通工程
  8. Netty学习总结(3)——Netty百万级推送服务
  9. mongodb数据导入hbase,spark读取hbase数据分析
  10. 第十八篇 难点突破之-VUE中使用 C-LODOP 实现模板的套打
  11. 计算机主机并行接口,计算机并行接口技术原理.ppt
  12. ftl不存在为真_ftl 语法
  13. win7触摸板怎么关闭_笔记本电脑触摸板快速关闭,避免误碰影响操作
  14. dell笔记本外接显示器_笔记本连接显示器怎么设置【图文教程】
  15. 安全态势感知系统java_代码分析平台CodeQL学习手记(十三) - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com...
  16. 第26期《Runtime Error可能产生的原因》
  17. Redis主从配置,简单滴很
  18. php 如何生成noncestr,如何创建和使用nonce
  19. android 剪贴板管理器,Clipper一个强大的剪贴板管理器为Android | MOS86
  20. 机器学习算法——决策树4(剪枝处理)

热门文章

  1. tpshop开发手册
  2. [展览人周刊]华展云20170731期
  3. SVN authz 配置详解 转载
  4. MySQL之账号管理.建库以及四大引擎
  5. python花式输出_Python——花式打印对象的若干种方法
  6. 关于上传文件格式验证
  7. 华为mate40和苹果12promax哪个好 有什么区别?看了这篇再决定
  8. java jsonfield_FastJson 使用@JSONField注解和@JSONCreator指定构造方法
  9. 134179-38-7,N3-PEG3-NH2,Azide-PEG3-Amino叠氮-三聚乙二醇-氨基的化学性质
  10. Python自学笔记——视频课程来自小甲鱼零基础入门学习python