C语言 小游戏 电脑大概率获胜,用C语言实现简单的三子棋小游戏
三子棋问题即在3 * 3的二维数组上下棋,只要有棋子在行、列或对角线连成一线即取得胜利。
可实现玩家与电脑对弈。
说明 :
(1)本游戏玩家输入的是棋盘的坐标。
(2)“X”代表玩家,“0”代表电脑。
(3)电脑下棋采用的是随机数给出,大大增加了游戏的随机性。
#include
#include
#include
char arr[3][3] = { 0 }; //直接定义外部变量所有的函数可以直接使用
int size = 9; //棋盘大小固定 每下一个子都会使可以下子的容量-1
void chessboard() //打印棋盘
{
int i = 0,j = 0;
printf(" | | \n");
for (i = 0; i
{
printf("_%c_|_%c_|_%c_\n", arr[i][0], arr[i][1], arr[i][2]);//棋盘对应位置下棋
if (i
printf(" | | \n");
}
}
void player() //玩家下棋
{
int m = 0, n = 0;
printf("player(X):"); //输入的是对应的坐标
scanf("%d%d", &m,&n); //玩家输入的坐标必须在范围内并且不能是被下过的地方
if (m<1 || m>3 || n<1 || n>3 || arr[m - 1][n - 1] != ' ')
{
printf("this place can not play!\n"); //如果不符合要求则继续调用这个函数
player();
}
else
{
arr[m - 1][n - 1] = 'X'; //将棋子放入相应的内容 棋盘容量-1
size--;
}
}
void computer() //电脑下棋
{
printf("computer(0):\n");
int m = 0, n = 0;
srand(time(NULL)); //电脑的坐标是随机产生的 以时间为种子
m = rand() % 3; //对3取余产生0-2的随机数赋给数组下标
n = rand() % 3;
while (arr[m][n] != ' ') //如果产生的坐标不符合要求则循环产生 (效率比较低)
{
m = rand() % 3;
n = rand() % 3;
}
arr[m][n] = '0'; //操作后容量-1
size--;
}
int winner() //判断获胜者
{
if ((arr[0][0] == arr[0][1] && arr[0][1] == arr[0][2] && arr[0][2] == 'X') ||
(arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2] && arr[1][2] == 'X') ||
(arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2] && arr[2][2] == 'X') ||
(arr[0][0] == arr[1][0] && arr[1][0] == arr[2][0] && arr[2][0] == 'X') ||
(arr[0][1] == arr[1][1] && arr[1][1] == arr[2][1] && arr[2][1] == 'X') ||
(arr[0][2] == arr[1][2] && arr[1][2] == arr[2][2] && arr[2][2] == 'X') ||
(arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[2][2] == 'X') ||
(arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[2][0] == 'X'))
return 1; //玩家获胜
else if((arr[0][0] == arr[0][1] && arr[0][1] == arr[0][2] && arr[0][2] == '0') ||
(arr[1][0] == arr[1][1] && arr[1][1] == arr[1][2] && arr[1][2] == '0') ||
(arr[2][0] == arr[2][1] && arr[2][1] == arr[2][2] && arr[2][2] == '0') ||
(arr[0][0] == arr[1][0] && arr[1][0] == arr[2][0] && arr[2][0] == '0') ||
(arr[0][1] == arr[1][1] && arr[1][1] == arr[2][1] && arr[2][1] == '0') ||
(arr[0][2] == arr[1][2] && arr[1][2] == arr[2][2] && arr[2][2] == '0') ||
(arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[2][2] == '0') ||
(arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[2][0] == '0'))
return 0; //电脑获胜
else if (size == 0)
return -1; //平局
}
int main()
{
int i = 0, j = 0; //将数组初始化为空格
for (i = 0; i
{
for (j = 0; j
{
arr[i][j] = ' ';
}
}
while (1) //循环对弈直到一方获胜或者平局
{
chessboard(); //循环每次开始都打印棋盘
if (winner() == -1 || winner() == 0 || winner() == 1)
{
break;
}
player();
computer();
}
if (winner() == 1)
{
printf("player win!\n");
}
else if (winner() == 0)
{
printf("computer win!\n");
}
else
{
printf("no one win!\n");
}
system("pause");
return 0;
}
本游戏还有好多不足的地方,希望大家多提意见,我也会继续改进的,希望会提高它的效率。
C语言 小游戏 电脑大概率获胜,用C语言实现简单的三子棋小游戏相关推荐
- c语言小游戏 三子棋,C语言实现简单的三子棋小游戏
学习完数组就能用C语言写出的简单小游戏: 编译器使用的为VS2013 代码分为三个部分 1.头文件 game.h 2.源文件 game.c 用来存放游戏中所有的函数 3.源文件 test.c 用来存放 ...
- C语言简单实现三子棋小游戏
游戏规则: 三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙等.游戏是在一个3*3的棋盘里面下棋的.只要有三个一样的连成一条线,就表示有一方胜出:如果下完了9个格子还没有玩家胜出,游戏为平局. ...
- 如何实现简单的三子棋小游戏(改两个数就可以变为五子棋)
首先我们创建一个新项目,新项目中添加两个源文件,一个用来放置该游戏所需的所有函数(game.c),另一个放置主函数来测试(test.c),所有的函数可以包含在新创建的头文件里(game.h),这样在主 ...
- C语言实现简单的三子棋小游戏(童年游戏)
⭐️前面的话⭐️
- C语言实现三子棋小游戏(编程思路以及代码详解)
目录 前言 一.三子棋游戏的实现逻辑 二.创建菜单并控制游戏开始或游戏结束 三.创建棋盘并且初始化棋盘 四.打印棋盘并验证打印棋盘和初始化棋盘模块的实现 五.玩家下棋 六.电脑下棋 六.输赢判断 七. ...
- 呆头呆脑的电脑----三子棋小游戏(C语言版)
目录 1.需求分析 2.程序架构 3.代码实现(分函数呈现) (1)主函数代码实现 分析: 异常处理: (2)菜单函数的实现 分析: (3)游戏函数的实现 分析: (4)棋盘的初始化 分析: (5)棋 ...
- 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)
作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...
- C语言小项目--三子棋小游戏
学了这么长时间的C语言,你是否觉得没有一个没写过稍微长点的代码显得很没有成就感!不怕,今天带你做一个小游戏,领略一下写C和小游戏的快乐.写完记得给自己一个鼓励哦! 一.三子棋小游戏 想必大家都玩过三子 ...
- 【C语言】简单实现三子棋(井字棋)小游戏
背景 C语言学习过程中会有很多有趣的实践小程序需要大家编写,这里带给大家一个常见的三子棋小游戏的代码.如果有不足之处,还望指出,感谢浏览. 框架 这里给刚开始学习或接触C语言的小伙伴分享一点我个人的经 ...
最新文章
- 我这样写代码,比直接使用 MyBatis 效率提高了100倍!
- a+b 第一个JAVA
- java windows系统监控_Windows资源监控工具大全
- 报错apachectl -t
- React的生命周期
- linux unshare 命令,详解Linux Namespace之User
- linux无缝升级的版本,最近一周发布新版本的Linux发行版 - 2020-01-03
- ubuntu 上NVIDIA驱动和CUDA9.0 的坑之一二
- JavaScriptCore全面解析
- 51 nod 1405 树的距离之和
- weblogic部署模式
- Google地图开发API
- 软件企业税收优惠政策
- vb/vb.net开发精粹(19)
- HDU-1014 线性同余法
- 浅谈5G通信面临的电磁兼容挑战及解决方法
- python 颜色与字体
- word模板文件损坏批处理
- 数据库作业17:第六章总结
- Jetson nano开机自启动程序