前几天写了一个三子棋小游戏,但是比较简单,因为以前写的游戏棋盘只能是3x3那么大。今天对那个程序做了两点改进:

1.现在可以实现在任意大小的棋盘上下棋了。

2.因为棋盘可能变大,为了玩家方便确定坐标,加了行和列的标号。

看普通版三子棋游戏请点这里

改进后游戏简介:

如上图所示,在game.h文件中,通过修改宏定义可以改变棋盘大小,在这里我将其大小改为了9x9。

从键盘输入1进入游戏,程序打印的棋盘如下图所示:

我们输入坐标玩一局,结果如下图所示:

可以看到,棋盘9x9,行标号和列标号清晰明了。

代码修改过程:

我是在原有代码基础上修改的,看原有代码请点击链接:https://blog.csdn.net/qq_39014877/article/details/99710425

1.添加行标号和列标号

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

{

int i = 0, j = 0;

printf(" ");//为了行标号能对其打印

for (i = 0; i < col; ++i)//打印列标号

{

printf(" %d ", i + 1);

}

printf("\n");

for (i = 0; i < row; ++i)

{

printf("%d", i + 1);//打印行标号

for (j = 0; j < col; ++j)

{

printf(" %c ", board[i][j]);

if (j < col - 1)

{

printf("|");

}

}

printf("\n");

if (i < row - 1)

{

printf(" ");//为了将横线整体右移一个空格

for (j = 0; j < col; ++j)

{

printf("---");

if (j < col - 1)

{

printf("|");

}

}

printf("\n");

}

}

}

对game.c文件中的DisplayBoard( )函数(打印棋盘函数)进行修改便可实现打印标号功能。

在每次打印棋盘前先打印列标号,然后在打印每一行之前先把该行的行表标号打印出来。在打印标号的过程中有一些对其问题需要设计者根据实际情况进行调整。

2.实现输赢判断

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

{

int i = 0;

int j = 0;

int k = 0;

for (i = 0; i < row; ++i)//每一行连续的三个格的判断

{

for (j = 0; j < (col - 2); ++j)

{

if (board[i][j] == board[i][j+1] && board[i][j+1] == board[i][j+2] && board[i][j] != ' ')

{

return board[i][j];

}

}

}

for (i = 0; i < col; ++i)//每一列连续的三个格的判断

{

for (j = 0; j < (row - 2); ++j)

{

if (board[j][i] == board[j+1][i] && board[j+1][i] == board[j+2][i] && board[j][i] != ' ')

{

return board[j][i];

}

}

}

for (k = 0; k < col; ++k)//从左上到右下的上半三角的三点一线的判断

{

j = k;

for (i = 0; ((i+2)0; --k)//从右上到左下的上半三角的三点一线的判断

{

j = k - 1;

for (i = 0; ((i+2)=0); ++i, --j)

{

if (board[i][j] == board[i+1][j-1] && board[i+1][j-1] == board[i+2][j-2] && board[i][j] != ' ')

{

return board[i][j];

}

}

}

for (k = 0; k < row; ++k)//从右上到左下的下半三角的三点一线的判断

{

i = k;

for (j = row - 1; ((i+2)=0); ++i, --j)

{

if (board[i][j] == board[i+1][j-1] && board[i+1][j-1] == board[i+2][j-2] && board[i][j] != ' ')

{

return board[i][j];

}

}

}

if (IsFull(board, row, col) == 1)

{

return 'p';

}

return 'c';

}

现在的棋盘已经不再是3x3的特殊棋盘了,为了能够判断输赢,自然不能用以前的方法。我们只需要对IsWin( )函数内部的判断方法进行一定的修改就可以实现整个功能。

(1)首先是对于行和列的判断。原来的程序只是对每一行的前三个格以及每一列的前三个格进行判断,在这里我们需要用一个嵌套循环,实现每一行和每一列的连续的三个格的判断。

(2)然后对斜着是否满足三点一线的情况进行判断。该判断分为四步,分别是从左上到右下的上半三角的三点一线的判断,从左上到右下的下半三角的三点一线的判断,从右上到左下的上半三角的三点一线的判断,从右上到左下的下半三角的三点一线的判断。其中每一步都是使用一个嵌套for循环实现的,通过嵌套for循环对每一块三角形区域进行判断,以第一种情况为例:

第一种情况就是对上图中的7条线进行判断,通过嵌套for循环实现,具体实现请看上面代码。

通过这两个改进,我们的加强版三子棋游戏就设计出来了!

源代码连接:https://github.com/xiao-hao-hao/three-in-a-row

vs2010c语言小游戏,用C语言写一个三子棋小游戏(用VS2010实现,加强版)相关推荐

  1. 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)

    作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...

  2. python小测试8_用 Python 写一个颜值测试小工具

    我们知道现在有一些利用照片来测试颜值的网站或软件,其实使用 Python 就可以实现这一功能,本文我们使用 Python 来写一个颜值测试小工具. 简介 要实现颜值测试功能,大致有两种方式:一种是自己 ...

  3. 手把手教你如何写一个三子棋/N子棋的小游戏

    这里写目录标题 第一步 游戏进入界面 第二步,初始化棋盘 第三步,打印棋盘 第四步,玩家和电脑下棋 第五步,判断输赢 三子棋或者N子棋怎么写? 让我们先来玩一把.再来看看怎么写. 程序运行界面 1为玩 ...

  4. 用python编写一个猜年龄的小程序-用Python来写一个男女相亲小程序|码农的情人节...

    功能: 你输入你的性别,年龄,生日,我程序就给匹配一下你喜欢的类型,下面我们具体来讲讲怎么用Python写 第一部分:用户输入部分 1.获取用户的输入:我们用raw_input() args =raw ...

  5. 使用C语言写一个三子棋

    1.游戏开始界面 void menu() {printf("**********************\n");printf("** 1.play 0.exit **\ ...

  6. css如何实现一个小三角形,用纯css写一个常见的小三角形

    js小技巧 js判断字符长度 直接使用String对象的属性,空格亦算一个字符 myString = "Hello world"; length = myString.length ...

  7. C语言小项目--三子棋小游戏

    学了这么长时间的C语言,你是否觉得没有一个没写过稍微长点的代码显得很没有成就感!不怕,今天带你做一个小游戏,领略一下写C和小游戏的快乐.写完记得给自己一个鼓励哦! 一.三子棋小游戏 想必大家都玩过三子 ...

  8. 【三子棋小游戏的设计思路以及代码实现】

    目录 一,设计思路 二, 代码实现 首先,欢迎各位点进我的文章.话不多说,正如标题一样,接下来,我来给大家讲解三子棋小游戏的设计思路以及代码实现.            一,设计思路 一. 大家应该都 ...

  9. c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

最新文章

  1. leetcode--两数之和--python
  2. SAP变式配置的完整指南(中英文双语版)
  3. args, sys.argv的区别
  4. linux字符设备移动硬盘,Red Hat Enterprise Linux 7.5挂载NTFS移动硬盘
  5. 在c语言中利用链表常见问题,C语言,链表中遇到棘手有关问题
  6. PAT乙级(1034 有理数四则运算)
  7. python计算相关性显著性p值_基于python实现计算两组数据P值
  8. Jzoj3898 树的连通性
  9. 《精通Linux内核必会的75个绝技》知识杂记
  10. 在Java中获取系统属性
  11. AcWing 4. 多重背包问题(多重背包 朴素版)
  12. ALSA驱动中snd_soc_write()原理分析及demo(二十二)
  13. format函数使用matlab,Matlab基本函数-format函数 | 学步园
  14. .net中对象序列化技术
  15. IBM Watson:好的AI能够在方方面面推动人类文明的发展
  16. U盘 量产记录(俩盘符合并为一个盘符)
  17. html修改字体大小到10像素,ps怎么修改字体大小
  18. adb 修改安卓设备的Mac地址
  19. ExcludeClipRect和无闪烁图像
  20. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组

热门文章

  1. linux学习笔记:07-QEMU IMX6ULL搭建
  2. java调用cmd清屏_Java | 使用JNA在Java中实现cls(cmd清屏)功能
  3. 使用echarts绘制火焰图
  4. 学习记录(一)制作python版本的CIFAR10数据集
  5. 《热血传奇》wix、wil文件解析Java实现
  6. pca百分比取多少比较好_PCA分析
  7. 理发店出售洗护产品如何登记
  8. 【机器学习新书推荐】ML.NET Revealed
  9. 东方不败III游戏修改大师
  10. android 选择打开系统软件解压缩zip包