编写一个三子棋游戏,和弱智电脑下棋
头程序块
#define ROW 3//设定横坐标极值
#define COL 3//设定纵坐标极值#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void InitBoard(char board[ROW][COL], int row, int col);
void DisplayBoard(char board[ROW][COL], int row, int col);
void PlayerMove(char board[ROW][COL], int row, int col);
void ComputerMove(char board[ROW][COL], int row, int col);
char IsWin(char board[ROW][COL], int row, int col);
//1.玩家赢 *
//2.电脑赢 #
//3.平局 Q
//4.游戏继续 C
函数块
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void InitBoard(char board[ROW][COL], int row, int col)//初始化棋盘,把所有的格都初始化成空格
{int i = 0;int j = 0;for (i = 0; i < ROW; i++){for (j = 0; j < COL; j++){board[i][j] = ' ';}}}
void DisplayBoard(char board[ROW][COL], int row, int col)
// | |
//---|---|---在屏幕上打印一个这样的棋盘
//---|---|---
// | |
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){printf(" %c ",board[i][j]);if (j < col - 1){printf("|");}}printf("\n");if (i < ROW - 1){for (j = 0; j < COL; j++){printf("---");if (j < col - 1){printf("|");}}printf("\n");}}}
void PlayerMove(char board[ROW][COL], int row, int col)//玩家走一步
{int x = 0;//创建接收横坐标的变量int y = 0;//创建接收纵坐标的变量printf("玩家走:\n");while (1){printf("请输入坐标:\n");scanf("%d%d", &x, &y);//接收输入坐标if (x >= 1 && x <= ROW && y >= 1 && y <= COL)//判断输入的值在合法范围内{if (board[x - 1][y - 1] == ' ')//判断棋盘上对应点是否是空格{board[x - 1][y - 1] = '*';//如果是空格,在坐标点打印*break;}else{printf("坐标被占用!\n");//如果对应点不是空格,显示坐标被占用}}else{printf("坐标非法!\n");//超出合法范围}}}
void ComputerMove(char board[ROW][COL], int row, int col)//电脑走一步
{printf("电脑走:\n");int x = 0;int y = 0;while (1) {x = rand() % row;//用srand()得到的随机横坐标值与row取余,以保证结果合法y = rand() % col;//用srand()得到的随机纵坐标值与col取余,以保证结果合法if (board[x][y] == ' ')//判断对应点是否为空格{board[x][y] = '#';//如果是,在对应点打应#break;}}
}
int IsFull(char board[ROW][COL],int row, int col)//判断棋盘是否已满
{int i = 0;int j = 0;for (i = 0; i < row; i++){for (j = 0; j < col; j++){if (board[i][j] == ' ')//用双层循环遍例判断数组中是否有空格{return 0;//如果有,返回0,继续下棋}}}return 1;//如果没有空格了,返回1,停止下棋
}
char IsWin(char board[ROW][COL], int row, int col)
//判断输赢
{int i = 0;//判断横三行for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')//判断一行中的三个值是不是相同,且不是空格{return board[i][1];//返回这个相同的值}}//判断竖三列for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')//判断一列中的三个值是不是相同,且不是空格{return board[1][i];//返回这个相同的值}}//判断对角线的三个值是不是相同,且不是空格if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' '){ return board[1][1];//返回这个相同的值}if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' '){return board[1][1];}//按照IsFull()函数的返回值来判断是否平局int ret = IsFull(board, row, col);if (ret ==1){return 'Q';//棋盘已满,返回Q,平局}return 'C';//棋盘不满,返回C,继续棋局
}
主程序块
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()//显示主界面菜单
{printf("***********************\n");printf("*****1.开始 0.退出*****\n");printf("***********************\n");
}
void game()
{char board[ROW][COL] = {0};//创建数组显示棋盘并接受输入值InitBoard(board, ROW, COL);//创建初始化棋盘函数DisplayBoard(board, ROW, COL);//创建打印棋盘函数char ret = 0;//创建ret的值,用来判断输赢与平局while (1){PlayerMove(board, ROW, COL);//玩家下棋DisplayBoard(board, ROW, COL);//打印棋盘ret = IsWin(board, ROW, COL);//按照IsWin函数判断输赢if (ret != 'C')//判断棋盘是不是下满break;ComputerMove(board, ROW, COL);//电脑下棋DisplayBoard(board, ROW, COL);ret = IsWin(board, ROW, COL);if (ret != 'C')break;}if (ret == '*')//如果ret得到*,玩家赢{printf("恭喜你,赢啦!\n");}else if (ret == '#')//如果ret得到#,电脑赢{printf("你真笨??\n");}else{printf("平局\n");//棋盘下满,且没有返回*#,则平局}//DisplayBoard(board, ROW, COL);
}
int main()//主函数入口
{int input = 0;//为输入坐标创建接收变量srand((unsigned int)time(NULL));//为电脑下棋创建随机值do{menu();//为开始菜单创建函数printf("请选择:>\n");scanf("%d", &input);//输入菜单选项switch (input)//根据输入值进入相应选项{case 1://printf("开始游戏!\n");game();//为进入常游戏创建函数break;case 0:printf("退出游戏!\n");break;default:printf("输入错误,请重新输入:\n");//为输入纠错break;}} while (input);return 0;
}
经过三天,不断重复的观看视频不知道多少遍,终于把这个小游戏写完了,看来我的天赋是真的不够啊,先天不足就要后天努力追啦,加油吧,比我聪明的青年们
编写一个三子棋游戏,和弱智电脑下棋相关推荐
- C语言实现三子棋游戏 代码+思路+电脑下棋算法
C语言实现三子棋游戏 代码+思路+电脑下棋算法 重点: 当检测到电脑已经两子连续时,将会尝试获得胜利. 在检测到玩家即将胜利(连城两子)时,进行拦截 尝试胜利的优先级高于拦截,意味着如果玩家不能再下一 ...
- 【C语言/C++】三子棋游戏(数组知识扩充)
文章目录 1.引言 2.代码规划 3.构思代码 4.代码模块实现 1.游戏界面功能 2.初始化棋盘 3.打印棋盘 4.玩家下棋逻辑 5.简易电脑下棋逻辑 6.判断胜负 7.判断游戏是否平局 1.引言 ...
- 如何用C语言来实现【三子棋游戏】
目录 一.前言 二.思维导图 三.思路分析 四.运行结果 五.算法细节 1.游戏相关的测试 2.游戏函数的声明 3.游戏函数的实现 (1)初始化棋盘的函数 (2)打印棋盘的函数 (3)玩家下棋的函数 ...
- 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)
作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...
- 【C语言】三子棋游戏的实现(玩家VS玩家 or 玩家VS电脑)
目 录 一.三子棋游戏介绍 二.游戏功能函数分析 1 菜单显示函数 2 菜单选择函数 3 选择确认函数 4 显示当前棋盘状态函数 5 棋盘初始化函数 6 玩家下棋函数 7 电脑下棋函数 8 棋局 ...
- vs2010c语言小游戏,用C语言写一个三子棋小游戏(用VS2010实现,加强版)
前几天写了一个三子棋小游戏,但是比较简单,因为以前写的游戏棋盘只能是3x3那么大.今天对那个程序做了两点改进: 1.现在可以实现在任意大小的棋盘上下棋了. 2.因为棋盘可能变大,为了玩家方便确定坐标, ...
- 关于三子棋游戏的简易实现与N子棋胜利判断方法
关于三子棋游戏的简易实现与N子棋胜利判断方法 要实现三子棋游戏,主要需要实现以下几个要求:> 需要一个棋盘,既然需要一个棋盘,棋盘是在一个平面上的,所以我们需要创建一个二维数组 棋盘的打印 玩家 ...
- C语言第十课:编写井字棋游戏(综合练习1)
目录 前言: 一.文件建立: 1.头文件game.h: 2.函数定义文件game.c: 3.工程测试文件test.c: 二.编写井字棋游戏: 1.程序整体执行思路: 2.menu菜单函数实现: 3.g ...
- C语言,制作三子棋游戏
三子棋游戏是一个很好地数组应用实例,在这篇博客中我将分享我在初学C语言时编写三子棋游戏的思路和过程. 1.模块设置 设置一个测试模块test.c和一个函数模块game.c,测试模块放置主函数,函数模块 ...
最新文章
- Java序列化的机制和原理
- 皮一皮:死要面子啊...
- 谷歌x实验室汇聚顶尖人才,研发出了一种超前设备,直接打脸专家
- JS提交表单页面不跳转、JS下载、动态创建from
- Boost使用几条简单笔记
- 纯html网页,如何快速把所有字体的颜色都改成黑色的,原来模板默认的字体是灰色
- bzoj 1610: [Usaco2008 Feb]Line连线游戏
- Java定时任务工具详解之Timer篇
- 向日葵远程控制软件。
- Android ROS开发环境搭建
- Linux下安装各种常用软件
- Android Studio之仿微信APP界面设计
- 九阴真经Ambari——3.安装并配置MariaDB
- 德语语法笔记——动词的变位
- APP为什么打开率低?三大原因和应对之策!
- 游记:分享阳光!(初次测试)
- 加盟代理的骗局[转载]
- 杭州python培训兄弟连
- ZoomIt v6.12 用于在屏幕上缩放和绘图的演示文稿实用工具。
- 从零开始搭建微服务:认证服务器