三子棋游戏实现(c语言)
我们想要完成一个真正的项目,我们需要先创建一个(test.c)文件存放主函数部分;再创建一个(game.c)文件去完成游戏的基本逻辑;最后,用(game.h)文件来包含我们使用的头文件。
一、三子棋游戏实现的思路
1.创建一个菜单让玩家选择,进入或退出
2.创建一个棋盘并初始化
3.打印棋盘
4.玩家落子
5.电脑落子
6.判断输赢的条件
1.菜单界面
菜单,我们直接使用printf函数来实现。
void menu()
{printf("**********************\n");printf("****** 1.play ******\n");printf("****** 0.exit ******\n");printf("**********************\n");
}
2.主函数的构建
当我们在游戏结束之后,依然是想玩,我们这里就要用到循环结构。
代码实现
int main()
{int input = 0;do{menu();printf("请选择\n");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误,请重新输入\n");break;}} while (input);return 0;
}
3.创建棋盘
因为我们是三子棋,所以只需要一个3行3列的棋盘
void game()
{ //使用一个二维数组来存放数据char board[ROW][COL]={0};
}
此处我们使用了宏定义来初始化棋盘的大小
在“game.h"头文件中声明这个初始化函数
#define ROW 3
#define COL 3//初始化棋盘
void init_borad(char board[ROW][COL], int row, int col);
在game.c中初始化棋盘
void init_borad(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] = ' ';}}
}
4.打印棋盘
void display_borad(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;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");}
}
5.玩家落子
二维数组中,直接输入在坐标
这里需要判断,棋盘坐标之前已经是否落过位并且判断输入坐标是否违规
void player_move(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;while (1){printf("玩家下棋:>\n");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");}}
}
6.电脑落子
我们使用用时间戳来生成一个随机数,并把数控制在0-2之间
因为随机数时间戳只需要产生一次,所以我们放在main函数中
srand((unsigned int)time(NULL));//产生随机数
void computer_move(char board[ROW][COL], int row, int col)
{printf("电脑下棋:>\n");int x = 0;int y = 0;while (1){x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}}
}
电脑不需要判断,电脑只要在那个位置下不了,那么电脑就会重新产生新的坐标
7.判断输赢
1.玩家赢----->返回 ‘*’
2.电脑赢----->返回’#‘
3.平局-------->返回Q
4.继续--------->返回C
har is_win(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){//判断行if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' '){return board[i][0];}}for (j = 0; j < col; j++){//判断列if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' '){return board[0][j];}}if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' '){//判断主对角线return board[1][1];}if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' '){//判断副对角线return board[1][1];}//判断平局if (is_fun(board, row, col) == 1){return 'Q';}return 'C';
}
二、总代码
1.game.h
#pragma once#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 3
#define COL 3//初始化棋盘
void init_borad(char board[ROW][COL], int row, int col);//打印棋盘
void display_borad(char board[ROW][COL], int row,int col);//玩家界面
void player_move(char board[ROW][COL], int row, int col);//电脑界面
void computer_move(char board[ROW][COL], int row, int col);//判断赢的条件
char is_win(char board[ROW][COL], int row, int col);
2.game.c
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void init_borad(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 display_borad(char board[ROW][COL], int row, int col)
{int i = 0;for (i = 0; i < row; i++){int j = 0;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 player_move(char board[ROW][COL], int row, int col)
{int x = 0;int y = 0;while (1){printf("玩家下棋:>\n");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 computer_move(char board[ROW][COL], int row, int col)
{printf("电脑下棋:>\n");int x = 0;int y = 0;while (1){x = rand() % row;y = rand() % col;if (board[x][y] == ' '){board[x][y] = '#';break;}}
}static int is_fun(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;}}}return 1;
}char is_win(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' '){return board[i][0];}}for (j = 0; j < col; j++){if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' '){return board[0][j];}}if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' '){return board[1][1];}if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' '){return board[1][1];}//判断平局if (is_fun(board, row, col) == 1){return 'Q';}return 'C';
}
3.test.c
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu()
{printf("**********************\n");printf("****** 1.play ******\n");printf("****** 0.exit ******\n");printf("**********************\n");
}
void game()
{char ret = 0;char board[ROW][COL] = { 0 };init_borad(board, ROW, COL);display_borad(board, ROW, COL);while (1){player_move(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'C'){break;}display_borad(board, ROW, COL);computer_move(board, ROW, COL);if(ret != 'C'){break;}display_borad(board, ROW, COL);}if (ret == '*'){printf("玩家赢\n");}if (ret == '#'){printf("电脑赢\n");}if (ret == 'Q'){printf("平局\n");}display_borad(board, ROW, COL);
}
int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择\n");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("输入错误,请重新输入\n");break;}} while (input);return 0;
}
总结
@_@看一遍一定不会吧!!!@ _@
快!快!快!
自己快敲一遍
三子棋游戏实现(c语言)相关推荐
- 三子棋游戏【C语言实现】保姆级教程,小白也能看懂,冲就对了❗❗❗
前言 ❤️ 铁汁们大家好,欢迎大家来到出小月的博客里,
- 用C语言实现三子棋游戏(附上思路+项目展示+源代码)
文章目录 前言 一.三子棋游戏整体实现思路 二.实现步骤 分模板实现 (以及具体应用实列) 1.test.c 源文件讲解: 2. game.c 源文件讲解: 3.game.h 源文件讲解 三 game ...
- c语言程序设计中三子棋游戏,C语言实现简易版三子棋游戏
本文实例为大家共享了C语言实现三子棋游戏的详细代码,供大家参考,详细内容如下 什么是多文件? 多数大型的工程的头文件和源文件非常多,我们也不可能把所有的代码都写在同一个文件里,这样也不方便代码的阅读与 ...
- c语言程序下三子棋,C语言实现三子棋游戏(初级版)
本文实例为大家分享了C语言实现三子棋游戏的具体代码,供大家参考,具体内容如下 game.h #include #include #include #define ROW 3 #define COL 3 ...
- 使用c语言实现三子棋游戏
下面简介如何使用c语言的基础语法实现三子游戏的底层逻辑: 首先是菜单模块 使用switch语句进入游戏模块 前置交互完成,开始进入游戏函数. 第一部分棋盘创建,使用二维数组实现. a.初始化棋盘 为什 ...
- C语言实现三子棋游戏(规范化)
`在复习了数组之后,对有些经典的数组题进行了,其中一道就是三子棋游戏这一功能的实现.下面附上我的个人理解和代码,希望各位大佬不吝指教. 首先有一个万能游戏模板,在c语言中有好多实现游戏的代码,我总结了 ...
- 如何用C语言来实现【三子棋游戏】
目录 一.前言 二.思维导图 三.思路分析 四.运行结果 五.算法细节 1.游戏相关的测试 2.游戏函数的声明 3.游戏函数的实现 (1)初始化棋盘的函数 (2)打印棋盘的函数 (3)玩家下棋的函数 ...
- C语言三子棋游戏进阶版详解(包括多子棋)
目录 一,总体思路介绍 二,具体思路的实现 1.初始化游戏界面 2.初始化棋盘 3.打印棋盘 4.玩家移动 5.电脑移动 6.判断输赢 三,源码展示 game.h game.c test.c 一,总体 ...
- C语言实现三子棋游戏 代码+思路+电脑下棋算法
C语言实现三子棋游戏 代码+思路+电脑下棋算法 重点: 当检测到电脑已经两子连续时,将会尝试获得胜利. 在检测到玩家即将胜利(连城两子)时,进行拦截 尝试胜利的优先级高于拦截,意味着如果玩家不能再下一 ...
最新文章
- zigbee 串口不稳定_Zigbee
- 架构实例之Demo_JSP
- 关于Remoting信道的通信的问题
- python3安装requests_小小-Centos7安装Python3并安装Requests的方法
- 百度地图检索以及路径规划
- 基于8086CPU微处理器的汇编学习之内存空间的编辑
- 云计算介绍-1.1,IaaS\PaaS\SaaS辨析
- android双usb麦克风,USB麦克风24bit192K单麦芯片方案-SSS1630
- 前段之路心得——(1)
- 大型电商网站设计——商品详情页面静态化
- 微信小程序的学习资料销售平台
- 最优化方法:三、线性规划
- box2d弹球 cocos2d-x重力感应(cocos2d-x2.1)
- Vistual Studio Code中Markdown使用数学公式
- 考验直播平台搭建水平的十个性能指标
- 狼人杀要做社交,绕不开语音视频连麦 | 深度
- Android studio 关于页面跳转问题
- transform: scale() 图片文字模糊的原因
- Python 切割mp3片段为每30秒一个并降低文件码率
- 【华为机考】ACM输入输出(中等+)
热门文章
- 【BZOJ4424】Cf19E Fairy DFS树
- 重建大师6.0多源通吃!卫星建模、下视影像三维建模、点云融合建模...
- python怎样把两个图画到一起_如何使用python或matlab将多个图像堆叠在一起?
- ad_with_lanelet2 编译问题解决
- 对于tomcat升级导致游览器访问页面出现的中文乱码问题解决方案
- 口袋取球的取法问题(C++实现)
- iTerm2 + OhMyZsh + powerlevel9k实现酷炫终端
- 以太坊社区激励金计划:支持开发者利用去中心化技术改变世界
- python 使用 openpyxl 批量调整字体和样式
- 博图中SCL程序的创建方式