小时候,在学校和小伙伴除了互相追逐着玩闹玩游戏以外,相信很多小伙伴们也有和朋友在课堂上拿一张纸玩井字棋的美好回忆。(如下图酱紫啦~)

那今天呢,我们就用C语言制作一款简易的井字棋来练习一下对代码的感觉,顺便找一下以前儿时美好的回忆。

<一>制作棋盘

首先,我们需要创建一个头文件,两个源文件,方便之后的调用和书写。当然,要注意一件重要的事情,就是注意源文件和头文件的对应~~~~

对于棋盘,很明显,这是一个九宫格,而九宫格大家第一时间能想到什么呢?对的~二维数组,一个三行三列的二维数组。所以刚开始当然是要创建啦,然后在这个二维数组上制作棋盘。

char board[ROW][COL] = { 0 };

第一步当然是要先初始化,给每一个对应的板块赋值"空格",对的,就是space

void InitBoard(char board[ROW][COL], int row, int col)
{for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){board[i][j] = ' ';}}//memset(board, ' ', row*col*sizeof(char));
}

第二步,我们创建好一个棋盘就相当于有了这张纸,那想要玩的话是不是就要接着做点其他事情?举个栗子:画线?

void ShowBoard(char board[ROW][COL], int row, int col)
{printf("=====================\n");for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){//三个空格printf(" %c ", board[i][j]);//两列竖线if (j < col - 1){printf("|");}}//换行printf("\n");for (int j = 0; j < col; j++){printf("---");//if (j < col - 1){printf("|");}}printf("\n");}printf("=====================\n");}

这里的话,我要对这个棋盘进行一下说明,因为只有代码大家可能会看懵。

这是在vs上执行了代码之后的棋盘,那小伙伴们可能就看懵了呀,你确定这是三行三列的二维数组?

是的,宝贝们~就是你想的那样,这样看可能不太那么明显,那我们再仔细点 ------>

这样看能明白嘛~对应代码,循环加判断,就是这么神奇~

<二> 制定下棋人员

如果我以后技术到了一定的地步,我可以学学大佬,搞个区域网对战,但是现在的话,就只能先和人机battle了。.

void ComputerMove(char board[ROW][COL], int row, int col)
{while (1){int x = rand() % row;//[0,1,2]int y = rand() % col;if (board[x][y] == ' '){board[x][y] = 'O';break;}}
}

这段代码唯一需要注意的:这个生成,具有唯一性,就是如果你玩这个三子棋,你如果第两局走和第一局棋一样的路,那么人机也会走一样的路,为了防止这种情况发生,我们需要给主函数加点神奇的魔法:

srand((unsigned)time(NULL));

然后能,接下来就是我们自己走啦,就这九个格子,用相对应的坐标来走,代码设置一下边界防止某些伙伴突发奇想想玩点其他的而导致数组越界后,我们自己的路就简单地制作完成啦。

void PlayerMove(char board[ROW][COL], int row, int col)
{while (1){printf("请输入你的坐标:\n");int x = 0;int y = 0;scanf("%d%d", &x, &y);if (x >= 1 && x <= 3 && y >= 1 && y <= 3){//x   oif (board[x - 1][y - 1] == ' '){board[x - 1][y - 1] = 'X';break;}else{printf("该位置已经有棋子\n");}}else{printf("坐标不合法\n");}}
}

然后就是,你走一步我走一步,你走一步我走一步,你走一步我走一步.............(别忘了每走一步之后打印棋盘)

PlayerMove(board, ROW, COL);//每走一步 都得判断  输赢ret = IsWin(board, ROW, COL);if (ret != ' '){break;}ShowBoard(board, ROW, COL);ComputerMove(board, ROW, COL);ret = IsWin(board, ROW, COL);if (ret != ' '){break;}ShowBoard(board, ROW, COL);

<三>胜负判定

如果没人拉着我能和我伙伴玩一宿,哈哈哈哈,但是和电脑的话,emmmmm,先来看看我们的胜负判定。

关于不是平局的情况,那么无非就是我赢或者电脑赢,上面的ret变量和Iswin就是来记录返回值的,我是0,电脑是X,等等,不对我是X电脑是0,也不对,为啥感觉怪怪的...............

if (ret == 'X'){printf("玩家赢\n");}else if (ret == 'O'){printf("电脑赢\n");}else if (ret == 'Q'){printf("平局\n");}

那不论是我赢还是电脑赢,其实都只要列出对应情况即可(就是三行,三列,两条对角线):

for (int i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2]&& board[i][0] != ' '){return board[i][0];}}//列for (int j = 0; j < col; j++){if (board[0][j] == board[1][j] && board[1][j] == board[2][j]&& board[0][j] != ' '){return board[0][j];}}if (board[0][0] == board[1][1] && board[1][1] == board[2][2]&& board[0][0] != ' '){return board[0][0];}if (board[0][2] == board[1][1] && board[1][1] == board[2][0]&& board[0][2] != ' '){return board[0][2];}

接着就是平局啦

static int IsFull(char board[ROW][COL], int row, int col)
{for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){if (board[i][j] == ' '){return -1;//没有满}}}return 1;//说明当前平局
}

我们每走一步都要判断是否是平局,对了,还有,可能会有小伙伴问了,说上面的胜利与否都是返回字符的,这里怎么就返回整数了呢?那我们在IsWin这个函数最后加个判断就好啦~

//是否是平局if (IsFull(board, row, col) == 1){return 'Q';//平局}return ' ';//没有平局  正常的情况下

<四>总结

首先来张截图玩一把:

所以以后区域网和朋友对战可能还好玩一些。

三子棋是一款特别简单的游戏,而且也没有特别复杂的代码,也特别适合新手练习,写三子棋最最主要的是逻辑思维要清晰,难点主要在于制作棋盘和胜负判定,还有一些其他需要小细节也是需要我们注意的,好了,好久没发博客了,各位小伙伴,一起努力进步呀。

PS:赶紧写递归,拖了有两星期了都......

C语言简易小游戏--三子棋相关推荐

  1. C语言趣味小游戏——三子棋

    全篇无任何废话,本文的解释大多数都在代码段中,所以一定要看代码,边看边学边理解. 这只是初学者入门的一个小游戏,不难懂,没有什么复杂的内容 可以先学习一下比三子棋还简单的猜数字小游戏 C语言趣味小游戏 ...

  2. 用c语言实现小游戏三子棋

    小游戏之三子棋 小游戏之三子棋 三子棋的基本玩法 游戏制作思路 制作步骤 1.菜单 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑下棋 6.判断胜利 完整代码 ​​​​​​​小结 三子棋的基本玩 ...

  3. 简易小游戏——三子棋

    你好,我是L-may 点我码云 提取代码 游戏介绍 三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉棋.一条龙.井字棋等.游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线 ...

  4. (超详解)C语言实现小游戏三子棋

    目录 一,实现目标 二,整体思路 1.创立三个文件:text.c(实现测试的逻辑)                                                            ...

  5. 童年小游戏三子棋(C语言数组实现)

    目录 认识游戏 游戏框架 游戏实现 基本构思 棋子 棋盘 下棋 判断输赢 效果展示 全部代码 游戏效果 认识游戏 三子棋是黑白棋的一种.三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等 ...

  6. 趣味益智小游戏 三子棋+五子棋 优化版(可任意选择棋盘大小)

    前言 今天牛牛给大家分享的是c语言实现三子棋和五子棋游戏,初学者可能有些不理解的地方,记得私信提问哦,牛牛会一 一回答的. 目录 前言 一.游戏介绍 二.游戏设计思路 2.1 主函数测试区(test. ...

  7. 简单小游戏------三子棋

    目录 前言 一.整体的逻辑 创建菜单 创建棋盘 打印棋盘 玩家下棋 电脑下棋 判断输赢 整合代码 game.c test.c game.h 总结 前言 经典数组游戏三子棋 一.整体的逻辑 1.创建菜单 ...

  8. C语言小游戏——三子棋(井字棋)

    文章目录 前言 一.前期准备 二.游戏整体结构及思路 1.程序主体结构: 2.代码解读 3.完整源代码 总结 前言 相信大家小时候都玩过井字棋小游戏,拿石子在地上画或是用笔在纸上画······今天我们 ...

  9. c语言小游戏 三子棋,C语言实现简单的三子棋小游戏

    学习完数组就能用C语言写出的简单小游戏: 编译器使用的为VS2013 代码分为三个部分 1.头文件 game.h 2.源文件 game.c 用来存放游戏中所有的函数 3.源文件 test.c 用来存放 ...

最新文章

  1. 密度聚类算法DBSCAN实战及可视化分析
  2. Django连接mysql数据库浅析
  3. 卷积云神经网络_2018.10
  4. 《大咖讲Wireshark网络分析》目录—导读
  5. 拒绝暴力调参!推荐一个模型Debug神器!
  6. JupyterHub on Kubernetes-Helm安装
  7. 计算机应用基础 东师 离线,东师1609计算机应用基础离线作业(8页)-原创力文档...
  8. [BJWC2011]元素
  9. 深度学习入门笔记(六):误差反向传播算法
  10. Mozilla Firefox,去广告插件
  11. 脱发、秃头防不胜防?这里有一份给码农的减压指南
  12. Java面试题超详细讲解系列之四【Jvm篇】
  13. android 重复文件夹,清理手机空间小工具!搜索重复文件App
  14. 直方图的定义、意义和特征
  15. mysql 将年月日转换成年_SQL数据库中怎么将时间格式转换到年和月?
  16. python中私有属性无法访问的原理_python私有属性访问不到吗?
  17. HTTP Referer介绍和使用
  18. docker swarm的常用操作
  19. IP地址,子网掩码以及子网掩码的划分
  20. win10简繁体输入转换输入法设置转换

热门文章

  1. BigDecimal变为负数
  2. 输入框怎么才会长“眼睛”?——显示密码与隐藏密码
  3. Linux系统上刻录光盘
  4. 使用git创建仓库,并上传代码
  5. 嵌入式开发38,39,40天(项目3:基于A8开发板的局域网聊天工具)
  6. 补丁psu、spu、cpu的意思
  7. java设计模式简介
  8. outlook2007 如何设置背景
  9. 学计算机加数模社团,“数学建模协会”社团简介
  10. mysql数据库的简单基本操作以及连接数据库步骤以及mysql的安装等等