三子棋

  • 楔子:
    三子棋是我们小时候经常玩的游戏,那么我们今天尝试用C语言实现一下这个小游戏.需要用到的主要知识就是函数封装和数组.
    以下为程序主体:
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>//定义棋盘为 3 * 3
#define ROW 3
#define COL 3
char g_board[ROW][COL];//对于全局变量,没显式初始化,就会默认初始化为 0
void menu() {while (1) {printf("         三子棋\n");printf("-----------------------\n");printf("1.开始游戏  0.退出游戏\n");printf("-----------------------\n");int a = 0;scanf("%d", &a);//接受玩家选择指令if (a == 1) {break;}else {printf("\n输入有误,请根据选项数字重新输入!\n");printf("\n");continue;}}
}//1.进行棋盘的初始化
void Init() {srand((unsigned int)time(0));//设置随机种子for (int row = 0; row < ROW; ++row) {for (int col = 0; col < COL; ++col) {g_board[row][col] = ' ';//未下子用空格表示}}
}//打印棋盘
void Print() {printf("|---|---|---|\n");for (int row = 0; row < ROW; ++row) {printf("| %c | %c | %c |\n", g_board[row][0],g_board[row][1], g_board[row][2]);printf(" ---|---|--- \n");}
}//玩家落子回合
void PlayerMove() {printf("请玩家落子!\n");while (1) {printf("请输入坐标(row col):\n");int row, col;scanf("%d %d", &row, &col);//判断输入参数是否合法if (row < 0 || row >= ROW || col < 0 || col >= COL) {printf("输入的坐标非法,请重新输入!\n");continue;}if (g_board[row][col] != ' ') {printf("当前位置已经有子,请重新输入!\n");continue;}g_board[row][col] = 'x';//完成元素的更迭,直观上来看就是"落子"了break;}
}//电脑落子回合
void ComputerMove() {printf("请电脑落子!\n");while (1) {//电脑"随机下"int row = rand() % ROW;int col = rand() % ROW;if (g_board[row][col] != ' ') {continue;}g_board[row][col] = 'o';break;}
}//判断棋盘是否全部填满的函数
int Isfull() {for (int row = 0; row < ROW; ++row) {for (int col = 0; col < COL; ++col) {if (g_board[row][col] == ' ') {return 0;}}}return 1;
}
char CheckWinner() {//检查行列斜线是否可以连成三个//行for (int row = 0; row < ROW; ++row) {if (g_board[row][0] == g_board[row][1] &&g_board[row][0] == g_board[row][2] &&g_board[row][0] != ' ') {return g_board[row][0];}}//列for (int col = 0; col < COL; ++col) {if (g_board[0][col] == g_board[1][col] &&g_board[0][col] == g_board[2][col] &&g_board[0][col] != ' ') {return g_board[0][col];}}//斜  两条对角线if (g_board[0][0] == g_board[1][1] &&g_board[0][0] == g_board[2][2] &&g_board[0][0] != ' ') {return g_board[0][0];}if (g_board[0][2] == g_board[1][1] &&g_board[0][2] == g_board[2][0] &&g_board[0][2] != ' ') {return g_board[0][2];}//判断和棋情况if (Isfull()) {//如果填满了 返回和棋return 'q';}//如若没填满  返回 胜负未分return ' ';
}//游戏逻辑主体
int main() {menu();//1.先打印菜单函数,让玩家选择Init();//2.玩家选择开始,初始化棋盘Print();//3.打印棋盘char winner;//4.判断胜者while (1) {//winner -> x 玩家胜//winner -> o 电脑胜//winner -> ' '胜负未分//winner -> q 和棋//5.玩家落子,判定是否游戏结束PlayerMove();winner = CheckWinner();if (winner != ' ') {//如果CheckWinner函数返回了 胜负未分 则跳出循环,跳出玩家落子阶段break;}Print();//打印更新后的棋盘//6.电脑落子,判定是否游戏结束ComputerMove();winner = CheckWinner();if (winner != ' ') {break;}Print();}if (winner == 'x') {printf("玩家胜\n");Print();}else if (winner == 'o') {printf("电脑胜\n");Print();}else {printf("和棋\n");Print();}system("pause");return 0;
}

需要注意的是:

  1. 在程序首用define定义变量是为了程序的延展性,让他不仅限于此代码,而可以扩展成为4 * 4或者 5 * 5的四子棋或五子棋.
  2. 整个游戏逻辑必须明晰:
    打印菜单,让玩家选择.
    打印棋盘 (选择开始再打印,否则退出游戏)
    玩家落子,判定胜负
    电脑落子,判定胜负
    大体框架明确了,接下来就是完成拆分的具体小模块了,化整为零的解决.
  3. 尽量不要只局限于本项目,尽量多抽象一些参数出来,将它包装化,让我们可以对它进行延伸和衍生,达到一定程度上的泛型编程.
  • 总结:
    一个小游戏的实现,让我对所学知识的总和运用能力有了一定的提升,函数是为了主体而服务的,所以一定要确定目标逻辑,再有针对性的下笔.

回忆童年游戏之棋盘决奕相关推荐

  1. 回忆童年游戏,完美利用Python制作飞机大战(爷青回~)

    名字:阿玥的小东东 学习:python.C/C++ 博客链接:阿玥的小东东的博客_CSDN博客-python&&c++高级知识,过年必备,C/C++知识讲解领域博主 目录 pygame ...

  2. 90后计算机电脑的游戏,80后、90后的童年游戏记忆,盘点那些能勾起你时光的回忆的老游戏...

    80后.90后的童年游戏记忆,盘点那些能勾起你时光的回忆的老游戏 2020-09-15 22:01:59 7点赞 11收藏 7评论 有人说喜欢回忆过去就说明人已经老了,可能玩的越多的游戏,越能对比出当 ...

  3. 【黑科技回忆童年】用Docker玩转神奇宝贝!

    [黑科技回忆童年]用Docker玩转神奇宝贝! 这个画面怀念吗?现在就教你如何用docker玩转神奇宝贝! 项目实战 原项目简介 weplay是一个socket.io库的展示项目,你可以在socket ...

  4. 任天堂fc/sfc童年游戏合集视频发布了

    任天堂fc/sfc童年游戏合集是一款街机游戏的大合集,相信80后的玩家童年时都接触过任天堂的红白机游戏,当年你是不是祈求父母在周末玩上几个小时?或者你是不是很兴奋的到邻居家里噌上几把?绝对经典怀旧! ...

  5. Python代码,能玩30多款童年游戏!这些有几个是你玩过的

    大游戏小游戏有千千万万,这些小游戏应该只有90后才玩过和懂吧 儿童节即将到来,虽然秃头程序员没有头发,但是童心还是一直都在的,今天就分享一些私藏的童年游戏,十几行代码就能进入使用Python开发的小游 ...

  6. php井字游戏代码_井字游戏 - 做一款回忆童年的游戏

    99% of information we read, we forget anyway. The best way to remember is to "DO". 游戏完整的代码 ...

  7. 【井字游戏】做一款回忆童年的游戏

    99% of information we read, we forget anyway. The best way to remember is to "DO". 体验地址:ht ...

  8. Pygame合集】回忆杀-“童年游戏”,看看你中几枪?(附五款源码自取)

    不会吧不会吧!不会现在还有人不知道这几款游戏吧?! 现如今,你我都已长大,从一个懵懂的孩童成长为了成年人.成年的我们,也时常会怀念过去,怀 念那无忧无虑的童年时光. 在童年,时间就像是一个陪伴我们嬉戏 ...

  9. 【童年游戏回忆】——扳机游戏代码复现

    背景 90后小时候玩的都是自创的游戏,踢沙包.踢足球(把纸弄成球,包N层).跳方格.挖沙子.堆泥巴.挖坑道.骑自行车.荡秋千.打卡片.叠元宝.猜猪蹄四角.拍手.跳皮筋.翻花绳.转笔.弹射笔.弹射纸球. ...

最新文章

  1. Win10自动息屏太快解决方法
  2. C语言 将文件内容转换成Dump文件数据格式
  3. 3d max 安装和导入rvt模型失败
  4. opencv 3和qt5计算机视觉应用开发_【资源分享】有哪些学习openCV的网站或书籍?...
  5. 2017-2018-2 20179302《网络攻防》第十一周作业
  6. 系统分析之100亿级日志系统是怎么设计出来的?
  7. nginx负载均衡的简单实现
  8. java 异常处理机制(java 编程思想)
  9. VC2008的运行库问题。
  10. io python 读取pdf_Python读取PDF文件--pdfminer
  11. ArcGIS编辑操作的常用快捷键一览表
  12. css 下边框 90%,css怎么设置下边框
  13. Python元组、数组、列表的区别
  14. 百度贴吧中的匿名回复,根本不是匿名,完全可以看到用户的全部IP。
  15. ym——Android从零开始(27)(山寨版微信-下)(新)
  16. 北美票房:《玻璃先生》无悬念夺魁
  17. 二级公共基础知识总结笔记
  18. 计算机组老师颁奖词,教研组颁奖词5篇
  19. DTC社群运营怎么做?
  20. 【实用工具】Visio画时序图组件

热门文章

  1. 校园卡查询系统C语言,校园卡帐号的查询方法
  2. CV7 颜色追踪和图像阈值
  3. poi-util 加强 POI 相关操作工具包
  4. part1-CST建模
  5. Android:alpha换算表
  6. 解决VirtualBox虚拟电脑控制台严重错误
  7. ElasticSearch7学习笔记之Mapping
  8. 提交git仓库报错Your branch is up-to-date with ‘origin/master‘.
  9. opencv立方体的画法_美术生干货,最详细的立方体透视变化及画法讲解,不看后悔!...
  10. 红点奖设计概念奖设计之星奖