C++实现和电脑对战三子棋实例
目录
前言
一.准备需要的函数
1.棋盘
2.各自下棋
3.输赢判断
二.游戏实现
1.菜单的实现
2.游戏本体的构建
总结
前言
前两天在牛客网写了一道题,关于KiKi和BoBo玩 “井”字棋,请根据棋盘状态,判断当前输赢。也就是说系统给你一个已经下好的棋,让你来判断谁输谁赢还是平局。写完这道题也不禁让我有点想法,能不能写一个代码来实现我和电脑对峙三子棋,边下棋系统边判断是否输赢或者平局,否则继续下棋。经过一天查阅资料,观看视频,自己实践,终于实现了我当初的想法,现在来分享给大家我自己的思路。
一.准备需要的函数
1.棋盘
①构建
三子棋的棋盘肯定是必不可少,我们可以利用void函数来实现一个空的棋盘,让他为九宫格然后每一个格子都是空
void intiboard(char arr[ROW][COL], int row, int col)//初始化棋盘
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
arr[i][j] = ‘ ‘;
}
}
}
②美化棋盘
棋盘肯定得有棋盘的样子,我们得美化一下键盘,我的思路是在横列上先打印’|’然后打印字符,在竖列上直接打印|—-,然后循环。
void displayboard(char arr[ROW][COL], int row, int col)//打印棋盘
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf(“|”);
printf(“ %c “, arr[i][j]);
}
printf(“\n”);
{
for (int k = 0; k < col; k++)
{
printf(“|—-“);
}
printf(“\n”);
}
}
}
最后实现是这样的。
2.各自下棋
①玩家下棋
玩家这部分我们需要自己输入横竖坐标,但是实际上数组的是从0开始的,因此我们输入的时候应该给玩家输入的实际坐标减一,假如玩家输出超出范围或者输入的值被电脑抢先输入程序会反馈重新输入,这边使用while循环也成功实现了这一点,直到找到break才可以跳出这个循环。
void playermove(char arr[][COL], int row, int col)//玩家回合
{
int x = 0;
int y = 0;
printf(“玩家回合\n”);
while (1)//一直循环直到break
{
printf(“请输入你想要下的坐标\n”);
scanf_s(“%d %d”, &x, &y);
if (x >= 1 && x <= row && y >= 1 && y <= col)//输入合法
{
if (arr[x-1][y-1] == ‘ ‘)
{
arr[x-1][y-1] = ‘X’;
break;
}
else printf(“棋盘重复,重新输入\n”);
}
else printf(“超出范围,请重新输入!\n”);
}
}
②电脑下棋
电脑这边有一个难点就在于如何让电脑随机输入数值,我是利用rand()来实现关于随机的范围我选择了除余来解决,让电脑输入有了随机性,同时也利用了while函数,只有输入了正确的位置才会跳出循环
void AImove(char arr[][COL], int row, int col)//电脑回合
{
printf(“AI回合\n”);
while (1)
{
int x = rand() % row;
int y = rand() % col;
if (arr[x][y] == ‘ ‘)
{
arr[x][y] = ‘O’;
break;
}
}
}
3.输赢判断
关于输赢我选择利用带有返回值的函数,方便日后判断。关于井字棋我们只要行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。因此我们可以用if语句来判断是否满足以上任一条件如果满足则返回对于数值的字符,关于平局时在没有决出胜负的情况下棋盘下满,因此我们需要构建函数来判断棋盘是否满,不是则继续,是则暂停返回值。
int Full(char arr[][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (arr[i][j] == ‘ ‘)
return 0;//返回0说明棋盘没有满
}
}
return 1;//棋盘满了,平局
}
char Winner(char arr[][COL], int row, int col)//判断输赢
{
for (int i = 0; i < row; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ‘ ‘)
{
return arr[i][0];
}
else if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != ‘ ‘)
{
return arr[0][i];
}
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != ‘ ‘)
{
return arr[0][0];
}
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ‘ ‘)
{
return arr[1][1];
}
}
int x = Full;
if (x == 0)
{
return ‘Q’;
}
else return ‘C’;
}
因此我们准备的函数就准备完毕了。
二.游戏实现
1.菜单的实现
对于菜单没有什么说的直接就简单粗暴的打印就好
void menu()
{
printf(“———————————————————-\n”);
printf(“============1.开始 2.结束=============\n”);
printf(“+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=\n”);
printf(“————————————————————\n”);
}//游戏的主页面;
然后菜单选项的实现我利用了do while函数来实现,用while来判断输入值的真假,假如是真的判断是否是一,要是一就开始游戏,否则提示输入超纲,重新循环,如果输入是零的话,while语句为假跳出循环,也就是结束游戏。
void test()//前端游戏页面和选择
{
int input = 0;
srand((unsigned int)time(NULL));//后面rand的使用
do {
menu();//调用菜单的打印
printf(“请输入你的选择(1/0):\n”);
scanf_s(“%d”, &input);
if (input == 1)
{
printf(“三子棋游戏开始!\n”);
play();
}
else if (input == 0)
{
printf(“结束游戏,感谢游玩\n”);
}
else printf(“请你重新选择qaq\n”);
} while (input);//假如input=0也就是input为假的时候结束循环:
}
2.游戏本体的构建
关于游戏的逻辑,首先我们得构建一个数组来实现因此构建一个数组是必不可少的,然后利用函数对数组重置并且美化,然后实现玩家互相下棋然后显示棋盘,判断是否输赢或者平局,这里我们继续用了while循环来实现只有有了结果我们才会跳出循环
void play()
{
char board[ROW][COL];
char ret = 0;
intiboard(board, ROW, COL);
displayboard(board, ROW, COL);
while (1)
{
playermove(board, ROW, COL);
displayboard(board, ROW, COL);
ret=Winner(board, ROW, COL);
if (ret != ‘C’)//棋盘满了,或者决出胜负了!
{
break;
}
AImove(board, ROW, COL);
displayboard(board, ROW, COL);
ret = Winner(board, ROW, COL);
if (ret != ‘C’)//棋盘满了,或者决出胜负了!
{
break;
}
}
if (ret == ‘X’)
{
printf(“玩家获胜!\n”);
}
else if (ret == ‘O’)
{
printf(“电脑获胜!\n”);
}
else if(ret==’Q’)
printf(“平局.\n”);
}
就这样一个游戏就成功完成!
总结
这个游戏其实过于简单,因为三子棋判断输赢比较简单,也不麻烦,重点在于需要判断每一步是否输赢或者平局和对于while的理解,何时跳出循环,何时继续循环,而且要细心,就比如我在写的时候好多次把自己定义函数名字打错导致编译器错误找了好久才发现,还是得细心才行。
关于这个代码源码头文件什么的我都上传到gitee上去了如果感兴趣可以去看看
CSDN writings/三子棋 · banbanni/banni - 码云 - 开源中国 (gitee.com)
到此这篇关于C++实现和电脑对战三子棋实例的文章就介绍到这了,更多相关C++三子棋内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
时间: 2022-01-11
C语言实现的一个三子棋游戏详解流程
目录 前言 一.三子棋完成程序运行结果 二.三子棋代码实现 1.创建源文件与头文件 2.整体页面的制作 3.制作并打印棋盘 1.在test.c文件中,定义函数game(); 2.在game.h 头文件中 3.在game.c源文件中 4.人机互动下棋 1.在test.c源文件中 2.在game.h头文件中 3.在game.c源文件中 4.此时打印效果 5.判断输赢 1.在test.c源文件中 2.在game.h头文件中 3.在game.c源文件中 4.最终实现结果 最后 前言 三子棋是我们先前所学
C语言实现简单版三子棋
本文实例为大家分享了C语言实现简单版三子棋的具体代码,供大家参考,具体内容如下 游戏的主函数设计: 1.打印出可以让玩家选择游戏开始和退出的菜单. 2.如果玩家选择1,则游戏开始,并开始执行game()函数. 3.如果玩家选择0,则游戏退出. 4.如果玩家选择了其他数,提醒玩家选择正确的功能. 主函数的实现: int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf(“请输入—>&qu
C语言三子棋游戏的简单设计
本文实例为大家分享了C语言三子棋游戏简单设计的具体代码,供大家参考,具体内容如下 题目思想: 用 3×3 的二维数组表示棋盘 每一个棋子的格子,也就是每个元素表示三种状态:分别是 1.未落子 ‘ ‘ 2.玩家落子 ‘X’ 3.电脑落子 ‘O’ 玩家通过输入数字作为落子位置的坐标(输入的行数与输入的列数) 直接上代码解析 1.创建出棋盘 #define _CRT_SECURE_NO_WARNINGS //利用宏定义行和列 #define MAX_ROW 3 #define MAX_COL 3 #i
基于C语言实现三子棋游戏
说到三子棋,我想大家一定不陌生吧,它也是我童年中的一部分,今天我们用C语言来实现一下简易版的三子棋. 首先,介绍一下游戏规则: 1.在一个九宫格上进行下棋: 2.玩家两名,双方先后落子: 3.若在一条直线上有三颗同一玩家的棋子,则该玩家赢,若棋盘下满也没有出现三颗棋子在一条直线上,则为平局. 设计思路如下: 1.用do-while循环可以保证玩完一把还能接着玩,玩家可以自行选择继续玩还是退出. 2.用一个3x3的二维数组来存放玩家和电脑下的棋子,再进行判断输赢. 3.进行游戏的棋盘如下: 代码如
适合初学者练习的C语言实现三子棋小游戏
目录 一.写代码前明确下棋时的步骤与顺序 二 根据初步的主函数完成想要的代码 1.写一个函数来初始化棋盘 2.打印棋盘 3.玩家落子 4.电脑落子 5.判断胜负 三.三子棋实现代码 用简单的C语言来实现小时候玩的三子棋游戏,下面是人机对战,当然这个代码的电脑对手是人工智障而不是人工智能 一.写代码前明确下棋时的步骤与顺序 1.创建一个3*3的棋盘. 2.将上面创建的棋盘中每个格初始化成’ ‘状态. 3.打印出初始化完成的棋盘 4.玩家落子 5.电脑落子 6.判断胜负 写代码之前梳理好大概的思路,
C语言实现三子棋简单小游戏
三子棋 ,也叫井字棋,是一款大家都玩过的经典小游戏,也是一个适合初学c语言的小伙伴练练手的小项目. 1.整个棋盘采用二维数组存储,下棋时只要获取到x,y两个方向的坐标访问二维数组中的元素改变存储的字符串样式. 2.判断输赢或平局,直接穷举就行了,判断每行.每列.和对角线是否有三个棋子相连.可设置一个带返回值的检查函数,根据不一样的返回值进行不同操作. 3.其余的页面菜单,和棋盘打印.只需要合理利用循环和判断来打印相关内容,很容易就能实现了. 效果展示 附上全部源码,大家可以在自己的编译器上跑一下
C语言实现三子棋小游戏
在这里我们要写出一个三子棋的小游戏,能够实现所需要的三字连珠的功能,并且可以使得游戏让玩家进行选择是否继续的功能. 代码: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROW 3 #define COL 3 void init_board(char arr[ROW][COL]) { int i=0; int j=0; for
C语言实现三子棋游戏
本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> void chess_board(char arr[3][3]) //打印棋盘 { int i = 0; int j = 0; for (i = 0; i < 3; i++) { printf( “ %c | %c | %c \n”, arr [i][0], a
C语言实现三子棋游戏(初级版)
本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 game.h #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROW 3 #define COL 3 //声明函数 void InitBoard(char board[ROW][COL], int row, int col); //打印棋盘 void PrintBoard(char board[ROW][COL], i
C语言实现三子棋程序
本文实例为大家分享了C语言实现三子棋的具体代码,供大家参考,具体内容如下 先直接上代码: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //2.实现三子棋游戏. #include<Windows.h> //Sleep() RAND_MAX 的头文件 void menu() //打印菜单 { printf(“**\n”); printf(“*
C语言实现三子棋
本文实例为大家分享了C语言实现三子棋的具体代码,供大家参考,具体内容如下 题目:C语言实现三子棋 问题分析:首先用到数组,存储信息.棋盘的信息和棋子的信息 打印棋盘 读取棋子的位置 判断是否连子 打印棋盘 然后重复 代码如下: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //数组沙盘 char Global_Gobang[10][10]; int Global_line, Global_p
C语言编一个数字益智小游戏
程序功能及运行情况 设计的程序是一个数字益智游戏,旨在培养小朋友玩家的数学思维,提高玩家的数学能力.游戏共设有四个不同的小游戏,分别是一位数四则运算.两位数四则运算.找最值游戏.排序游戏.程序能实现产生随机题目,并能检验玩家的作答是否正确.为了小朋友能感受到游戏的乐趣,特意设置了得分系统,答对不同题目有不同的加分,并会根据总得分划分不同「段位」,呈现给玩家.另外,程序还运用了更加充满活力的设计,让玩家爱上该游戏. 程序运行截图主菜单 运算游戏 找最值游戏 排序游戏 得分统计 代码部分头文件区域
C语言键盘控制走迷宫小游戏
本文实例为大家分享了C语言键盘控制走迷宫小游戏的具体代码,供大家参考,具体内容如下 在看了<啊哈C语言>之后想写一个游戏demo 游戏的截图 首先是启动界面 然后是初始化 接下来是键盘操控 地图的复杂度也很容易修改. 也支持退出.按s键选择退出游戏这个选项即可. 下面是源代码 #include <stdio.h> #include <stdlib.h> void startUp(); void gameInstructions(); void menu(char c);
C语言简易版flappy bird小游戏
假期在家无聊,想随便码点东西,故有此简陋的小游戏诞生.觉着可能对初学C语言的小伙伴练习有点帮助,故写此博客.游戏界面如下: 首先,先画出整个小游戏实现的流程图,如下: 思路很简单,整个游戏界面是由一个大的char类型数组构成,更新数组的值然后不停的打印出来就形成了动态效果. 由上图看,大循环是保证游戏一直不断的进行下去,小循环是让小鸟的速度大于游戏界面里背景(由#构成的柱子)的速度(小鸟动四下柱子才动一下). 下面是具体代码(水平有限大家多多见谅,但是效果还是有的!) Bird.c文件 #inc
C语言实现简易版扫雷小游戏
本文实例为大家分享了C语言实现简易版扫雷的具体代码,供大家参考,具体内容如下 声明 本次扫雷小游戏用多文件来编写.首先,要自定义的一个头文件 mine.h,里面有扫雷程序里面所需要的头文件.常量和所有函数的声明.其次,创建主函数 test.c,用自己喜欢的方式构建一个游戏的框架,最后,创建自定义函数 mine.c,编写各项功能. 设计思路 1.先写主函数,理清整个游戏流程. int main() { int quit = 0; do{ int select = 0; Menu(); scanf(
C语言开发实现贪吃蛇小游戏
小时候相信大家都玩过贪吃蛇,但是自从学了编程以后我都想自己实现一下,苦于没有契机. 首先看一下游戏效果把: 接下来我们先分析一下贪吃蛇的需求有哪些: 用合适的数据结构表示蛇.食物 地图的初始化 蛇的移动.食物的随机生成 蛇的显示.食物的显示 贪吃蛇的规则确定(碰到食物边长.碰到边界和自己死亡等—) 主要功能需求就是上面这些,接下来我直接上C语言代码,这个游戏相信没做过的人看完之后会觉得非常简单,因为其中没什么技术点可言,最重要的就是下面这几句代码,用于控制光标的位置. #include<Win