一、首先,什么是三子棋

大家还记得下面这个东西

不同地方的孩纸们可能画的有些区别

如果你不知道什么是三子棋,那么请看下图

二、如何实现三子棋

(1)棋这类题目,一般要知道一下几点:

二维数组。

一般用二维数组来完成。所有的棋子移动都是二元数组内元素的变化来完成的

移动问题。

用C语言实现三子棋,要有选点,判断选的点对不对,移动的点是否能移动(好比如说我的棋在那块,你可移动到这把我吃了= =)

判断获胜的问题。

这一点当然不必多说。

(2)本次实验所遇到的问题

①判断能否从一个点到另一个点就用了N次if else 语句,感觉比较麻烦

②一个点不能覆盖另一个点

③一个点,本来就无路可走了。

可是我选择了这个点,无法返回重新输入了。。。

(3)第三个问题的解决方法

如果选了一个无路可走的棋子,那么。。。重新开始吧

三、一些利用到的小知识点

1、清屏

每次棋子移动后,清理之前的屏幕,再输出来。

2、Sleep函数

每走1步,歇一秒。下棋是一个思考的过程,得有间歇

3、小音乐功能

利用转义字符“\a”的峰鸣声,来实现每走一步提示一下

四、未完成的东西:

1、无路可走棋子的解决问题

2、机器人暂无下棋功能,需手动输入(如果机器人选择了无路可走的棋子,游戏要重新开始多少次啊

3、If else 用的过多,看起来太费事,而且一不小心就会写错。(之前已经调试N次错误在这个地方)

五、代码块(未完):

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
void Print_Chess();
int check(int x);
void change();
void Play();
void Robort_change();
int che[3][3] = { 1, 1, 1, 0, 0, 0, 2, 2, 2 };//游戏用到的函数为全局变量数组
void Print_Chess()//用来打印棋盘
{system("cls"); //清屏 int i = 0;int j = 0;printf("\t\t=============少年经典三子棋====================\n\n\n");for (; i<3; i++){printf("\t\t\t\t");for (j = 0; j<3; j++){if (che[i][j] == 1)printf("○ ");else if (che[i][j] == 2)printf("● ");else if (che[i][j] == 0)printf("※ ");elsebreak;}printf("\n");}
}
int check(int x)//判断是否有人获胜
{   int a = 1;if (che[0][0] == x){if ((che[0][0] == che[1][1]) && (che[1][1] == che[2][2])){ a = 0;}else if ((che[0][0] == che[1][0]) && (che[1][0] == che[2][0])){a = 0;}else if ((x == 2) && (che[0][0] == che[0][1]) && (che[0][1] == che[0][2])){a = 0;//防止白点在起始位置获胜 }elsea =  1; //没有人赢,返回1 }else if (che[0][1] == x){if ((che[0][1] == che[1][1]) && (che[1][1] == che[2][1]))a = 0;elsea = 1;//没有人赢,返回1 }else if (che[0][2] == x){if (che[1][2] == x && che[2][2] == x)a = 0;else if (che[1][1] == x && che[2][1] == x)a =  0;elsea = 1;}else if (che[1][0] == x){if (che[1][1] == x&&che[1][2] == x)a =  0;elsea =  1;}else if (che[2][0] == x){if (che[2][1] == x&&che[2][2] == x){if (x == 1){printf("%d", x); a = 0;}//不让黑子在起始位置获胜 elsea = 1;}}elsea = 1;return a;
}
void change()//黑棋
{int i = 0;int j = 0;int m = -666;int n = 0;int ch = 0;do{printf("\n玩家1:请输入要移动的棋子的坐标:\n");scanf("%d %d", &i, &j);if (che[i][j] == 2){     printf("\n请输入需要到的坐标:\n"); while (ch == 0){if (m != -666){printf("输入有误,重新开始游戏!");Play();}scanf("%d %d", &m, &n);if (m<0 || n<0 || m>2 || n>2)ch = 0;else if (che[m][n] != 0)ch = 0;else if (m == 0 && n == 0 && i == 1 && j == 1)//从(1,1)走到(0,0) ch = 1;else if (m == 1 && n == 1 && i == 0 && j == 0)//从(0,0)走到(1,1) ch = 1;else if (m == 1 && n == 1 && i == 2 && j == 2)//从(2,2)走到(1,1) ch = 1;else if (m == 2 && n == 2 && i == 1 && j == 1)//从(1,1)走到(2,2)ch = 1;else if (m == 0 && n == 2 && i == 1 && j == 1)//从(1,1)到(0,2)ch = 1;else if (i == 0 && j == 2 && m == 1 && n == 1)//从(0,2)走到(1,1)ch = 1;else if (m == 2 && n == 0 && i == 1 && j == 1)//从(1,1)到(2,0)ch = 1;else if (i == 2 && j == 0 && m == 1 && n == 1)//从(2,0)走到(1,1)ch = 1;else if (i == m && (((j - n) == 1) || ((n - j) == 1)))ch = 1;else if (j == n && (((i - m) == 1) || ((m - 1) == 1)))ch = 1;elsech = 0;}}} while (che[i][j] != 2);che[i][j] = 0;che[m][n] = 2;
}
void Robort_change()//白棋
{int i = 0;int j = 0;int m = -666;int n = 0;int ch = 0;do{printf("\n玩家2:请输入要移动的棋子的坐标:\n");scanf("%d %d", &i, &j);if (che[i][j] == 1){ printf("\n请输入需要到的坐标:\n");while (ch == 0){   if (m != -666){    printf("输入有误,重新开始游戏!");Play();}scanf("%d %d", &m, &n);if (m<0 || n<0 || m>2 || n>2)ch = 0;else if (che[m][n] != 0)ch = 0;else if (m == 0 && n == 0 && i == 1 && j == 1)//从(1,1)走到(0,0) ch = 1;else if (m == 1 && n == 1 && i == 0 && j == 0)//从(0,0)走到(1,1) ch = 1;else if (m == 1 && n == 1 && i == 2 && j == 2)//从(2,2)走到(1,1) ch = 1;else if (m == 2 && j == 2 && i == 1 && j == 1)//从(1,1)走到(2,2) ch = 1;else if (m == 0 && n == 2 && i == 1 && j == 1)//从(1,1)到(0,2)ch = 1;else if (i == 0 && j == 2 && m == 1 && n == 1)//从(0,2)走到(1,1)ch = 1;else if (m == 2 && n == 0 && i == 1 && j == 1)//从(1,1)到(2,0)ch = 1;else if (i == 2 && j == 0 && m == 1 && n == 1)//从(2,0)走到(1,1)ch = 1;else if (i == m && (((j - n) == 1) || ((n - j) == 1)))ch = 1;else if (j == n && (((i - m) == 1) || ((m - i) == 1)))ch = 1;elsech = 0;}}} while (che[i][j] != 1);che[i][j] = 0;che[m][n] = 1;
}
void Play()//开始游戏
{   int num = 0;while (1){Print_Chess();if (num % 2 == 0){change();num++;if (check(2) == 0){ Print_Chess();printf("\n\t\t\t\tThe winner is Black!\n\n\n");break;}}else{    Robort_change();num++;if (check(1) == 0){   Print_Chess();printf("\n\t\t\t\tThe winner is White!\n\n\n");break;}}Sleep(1000);Print_Chess();printf("\a");}
}
int main()
{Print_Chess();Play();system("pause");return 0;
}

六、游戏界面

【C】少年时代的经典游戏:三子棋相关推荐

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

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

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

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

  3. 利用C语言巧妙实现棋类游戏——三子棋

    小游戏:三子棋用C语言实现 你是否学完了C语言的函数.数组.选择结构.循环结构苦于没有实战小项目巩固自己所学的知识呢,今天小程序猿就给大家带来了一个游戏的小游戏--三子棋,利用C语言实现的,希望对大家 ...

  4. C语言小游戏——三子棋

    C语言 -- 三子棋 本篇主要是用二维数组和多个函数来实现三子棋游戏. 让我们先来看看这个编写这个游戏的思路:首先要打印三子棋的棋盘,然后是玩家下棋,电脑下棋,最后判断谁赢了,或者看看是否平局. 我们 ...

  5. 小游戏--三子棋——N子棋(实现)

    三子棋大家应该都不陌生吧 三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉棋.一条龙.井字棋等. 我们今天来一个c语言三子棋的进阶,n子棋的实现过程 1.我们首先可以创建一个三子棋.c源文件,从main ...

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

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

  7. 第一个小游戏“三子棋”超详细

    三子棋 我们先想一下游戏是怎么玩的??? 打开游戏,进去先看到一个菜单,然后选择是玩游戏还是退出,如果选择玩游戏,那进去是我和电脑玩游戏,我下一步棋,电脑下一步棋,如果我赢了那游戏就结束了,如果电脑赢 ...

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

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

  9. C语言实现简单游戏 三子棋

    对基本C语言的知识有了一定的了解和认识,能够通过C语言编程解决一些简单的问题.使用C语言编程完成一个简单的游戏<三子棋>. 游戏简介:常见的3x3棋盘,有两名游戏玩家,在本版本中实现的效果 ...

最新文章

  1. 5个无聊透顶的 Python 程序
  2. 攀枝花市大数据中心落户东区
  3. hive左关联剔除和where 剔除不一致
  4. 通过ByteBuffer来操作byte
  5. 20135127陶俊杰 实验一
  6. 《PHP对象、模式与实践》之对象
  7. Linux命令行下载文件百度云盘
  8. Spring boot initialization failed for https://start.spring.io
  9. 我的USB入门第一课之读《圈圈教你玩USB》
  10. 如何在谷歌浏览器官网下载谷歌浏览器32位、64位或其他版本最新的离线安装包?
  11. PDF破解FileOpenPlugin加密的方法
  12. 产业分析:2021抖音数据报告
  13. Carsim 学习心得-粗略翻译1
  14. css打印适应纸张_CSS print 样式 css控制打印样式 分页 页面大小
  15. Gerrit添加Verified
  16. Unity中使用Post Processing 开自发光效果
  17. 银行软开入职一周年分享
  18. bat文件打开cmd指向某个目录,并执行命令
  19. Python tuple()函数
  20. CBAP.BABOK.商业分析.业务分析.概述

热门文章

  1. 小饭馆促销活动流程,小饭馆网络营销方案
  2. 抖音如何推广运营?抖音如何快速涨粉?
  3. 读书笔记:《群论彩图版》
  4. 全国DNS服务器地址备忘录
  5. React报错:Too many re-renders
  6. 跟李沐学AI:实用机器学习 | 第五章
  7. 科研绘图(编程绘图、网站绘图、配色、素材、提取数...)
  8. 将多个class文件打包为jar包
  9. 如何打开python的终端窗口,python程序窗口怎么打开
  10. Windows远程桌面 无法进行复制粘贴的问题解决方法