目录

打印界面

初始化数组的值

玩家下棋

判断是否胜利

电脑下棋


今天为大家带来的是一款非常简单的小游戏“三子棋”

首先规则很简单,一行或者一列或者正负对角线都为同子就赢了,管你听没听懂,看就完了~

我们先来分析思路 然后整体来拼接思路 先将需要的模块都搞出来

打印界面

首先我们需要先来搞一个界面

那么也是灰常的简单 直接上代码 这个乜有任何难度 我们把它封装到一个函数中

void  menu() {printf("开始游戏\n");printf("***********************************\n");printf("**********     1.play    **********\n");printf("**********     0.txit    **********\n");printf("***********************************\n");printf("请选择>>\n");
}

初始化数组的值

首先我们是要打印出一个界面

而我们用到这种矩形的都是首先考虑使用二维数组,所以我们要先来定义一个二位数组并将二维数组初始化 ,而这个网格我们可以分为几部分来查看

首先我们将红色区域块分开考虑

void display_board(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");for (j = 0; j < col; j++) {printf("---");if (j < col - 1) {printf("|");}}printf("\n");}
}

可以得到我们的效果 但是数组没有进行初始化是比较丑的

所以我们要将数组中全部初始化为空格

void init_board(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] = ' ';}}
}

那么再打印的话就可以得到我们的方格啦

玩家下棋

然后我们来制作模拟玩家下棋 首先我们可以考虑到 玩家对应输入的下标应为1-3区间 ,所以我们第一步是要判断一下玩家输入的值是否合法 并且也要考虑到 玩家下棋的地方 是否已经存在棋子

而且我们使用数组中下标对应是从0开始的 所以我们要将其做一下处理

void player_move(char board[ROW][COL], int row, int col) {int x = 0;int y = 0;while (1) {scanf("%d %d", &x, &y);getchar();if ((x >= 1 && x <= 3 && y >= 1 && y <= 3)&& board[x - 1][y - 1]==' ') {board[x - 1][y - 1] = '*';break;}else {printf("输入错误 请重新输入\n");continue;}}
}

判断是否胜利

然后我们需要考虑到 每一次下棋之后是需要判断是否已经胜利 所以我们来构造一个判断胜利的函数

char is_win(char board[ROW][COL], int row, int col) {int i = 0;int t = 1;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];}if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') {return board[0][i];}}if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ') {return board[i][0];}if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ') {return board[i][2];}for (i = 0; i < row; i++) {int j = 0;for (j = 0; j < col; j++) {if (board[i][j] == ' ') {t = 0;}}}if (t) {return 'p';}return 'c';}

电脑下棋

然后我们来考虑一下电脑下棋,首先我们需要先构造一个笨笨的电脑,然后再给他注入一些智商 ,首先我们来构造一下随机数

srand((unsigned int)time(NULL));
void computer_move(char board[ROW][COL], int row, int col) {printf("电脑下棋\n");while (!(computer_ai(board, row, col))) {int x = rand() % row;int y = rand() % col;if (board[x][y] == ' ') {board[x][y] = '#';break;}}
}

有细心的同学已经发现其中调用了computer_ai函数啦,那么这个就是机器人的智商啦

我们来构造一下

char computer_ai(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;int k = 0;while (0 == k){for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == '*' && board[i][2] == ' '){board[i][2] = '#';k = 1;break;}if (board[i][0] == board[i][2] && board[i][0] == '*' && board[i][1] == ' '){board[i][1] = '#';k = 1;break;}if (board[i][1] == board[i][2] && board[i][1] == '*' && board[i][0] == ' '){board[i][0] = '#';k = 1;break;}}if (k != 0)break;for (j = 0; j < col; j++){if (board[0][j] == board[1][j] && board[1][j] == '*' && board[2][j] == ' '){board[2][j] = '#';k = 1;break;}if (board[0][j] == board[2][j] && board[2][j] == '*' && board[1][j] == ' '){board[1][j] = '#';k = 1;break;}if (board[1][j] == board[2][j] && board[2][j] == '*' && board[0][j] == ' '){board[0][j] = '#';k = 1;break;}}break;}if (board[0][0] == board[1][1] && board[1][1] == '*' && board[2][2] == ' '){board[2][2] = '#';return 1;}if (board[0][0] == board[2][2] && board[2][2] == '*' && board[1][1] == ' '){board[1][1] = '#';return 1;}if (board[1][1] == board[2][2] && board[1][1] == '*' && board[0][0] == ' '){board[0][0] = '#';return 1;}if (board[0][2] == board[1][1] && board[0][2] == '*' && board[2][0] == ' '){board[2][0] = '#';return 1;}if (board[0][2] == board[2][0] && board[2][0] == '*' && board[1][1] == ' '){board[1][1] = '#';return 1;}if (board[1][1] == board[2][0] && board[2][0] == '*' && board[0][2] == ' '){board[0][2] = '#';return 1;}return k;
}

那么以上就是我们所需要的所有函数  我们直接附上完整代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define ROW 3
#define COL 3//打印界面
void  menu();//初始化数组的值
void init_board(char board[ROW][COL],int row,int col);//打印数组的值
void display_board(char board[ROW][COL], int row, int col);//玩家下棋
void player_move(char board[ROW][COL], int row, int col);//判断是否胜利 如果玩家胜利返回* 如果电脑胜利返回#  如果继续返回c 如果平局返回p
char is_win(char board[ROW][COL], int row, int col);//电脑下棋
void computer_move(char board[ROW][COL], int row, int col);//电脑ai优化
char computer_ai(char board[ROW][COL], int row, int col);
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void  menu() {printf("开始游戏\n");printf("***********************************\n");printf("**********     1.play    **********\n");printf("**********     0.txit    **********\n");printf("***********************************\n");printf("请选择>>\n");
}void init_board(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_board(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");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) {scanf("%d %d", &x, &y);getchar();if ((x >= 1 && x <= 3 && y >= 1 && y <= 3)&& board[x - 1][y - 1]==' ') {board[x - 1][y - 1] = '*';break;}else {printf("输入错误 请重新输入\n");continue;}}
}void computer_move(char board[ROW][COL], int row, int col) {printf("电脑下棋\n");while (!(computer_ai(board, row, col))) {int x = rand() % row;int y = rand() % col;if (board[x][y] == ' ') {board[x][y] = '#';break;}}
}char is_win(char board[ROW][COL], int row, int col) {int i = 0;int t = 1;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];}if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') {return board[0][i];}}if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ') {return board[i][0];}if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ') {return board[i][2];}for (i = 0; i < row; i++) {int j = 0;for (j = 0; j < col; j++) {if (board[i][j] == ' ') {t = 0;}}}if (t) {return 'p';}return 'c';}char computer_ai(char board[ROW][COL], int row, int col)
{int i = 0;int j = 0;int k = 0;while (0 == k){for (i = 0; i < row; i++){if (board[i][0] == board[i][1] && board[i][1] == '*' && board[i][2] == ' '){board[i][2] = '#';k = 1;break;}if (board[i][0] == board[i][2] && board[i][0] == '*' && board[i][1] == ' '){board[i][1] = '#';k = 1;break;}if (board[i][1] == board[i][2] && board[i][1] == '*' && board[i][0] == ' '){board[i][0] = '#';k = 1;break;}}if (k != 0)break;for (j = 0; j < col; j++){if (board[0][j] == board[1][j] && board[1][j] == '*' && board[2][j] == ' '){board[2][j] = '#';k = 1;break;}if (board[0][j] == board[2][j] && board[2][j] == '*' && board[1][j] == ' '){board[1][j] = '#';k = 1;break;}if (board[1][j] == board[2][j] && board[2][j] == '*' && board[0][j] == ' '){board[0][j] = '#';k = 1;break;}}break;}if (board[0][0] == board[1][1] && board[1][1] == '*' && board[2][2] == ' '){board[2][2] = '#';return 1;}if (board[0][0] == board[2][2] && board[2][2] == '*' && board[1][1] == ' '){board[1][1] = '#';return 1;}if (board[1][1] == board[2][2] && board[1][1] == '*' && board[0][0] == ' '){board[0][0] = '#';return 1;}if (board[0][2] == board[1][1] && board[0][2] == '*' && board[2][0] == ' '){board[2][0] = '#';return 1;}if (board[0][2] == board[2][0] && board[2][0] == '*' && board[1][1] == ' '){board[1][1] = '#';return 1;}if (board[1][1] == board[2][0] && board[2][0] == '*' && board[0][2] == ' '){board[0][2] = '#';return 1;}return k;
}
#define _CRT_SECURE_NO_WARNINGS 1
//三子棋游戏
#include<stdio.h>
#include"game.h"
void game() {char ret = 'c';char board[ROW][COL] = { 0 };init_board(board,ROW,COL);//初始化数组display_board(board, ROW, COL);//打印数组//玩家下棋while (1) {printf("请输入你要下棋的坐标 示例:1 1(中间间隔空格)\n");player_move(board, ROW, COL);display_board(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'c') {break;}computer_move(board, ROW, COL);display_board(board, ROW, COL);ret = is_win(board, ROW, COL);if (ret != 'c') {break;}}switch (ret) {case '*':printf("恭喜玩家获得胜利,奖励一个摸摸哒\n"); break;case '#':printf("很遗憾 电脑获得胜利\n"); break;case 'p':printf("本次游戏平局\n"); break;}
}
int main()
{srand((unsigned int)time(NULL));int input = 0;do {menu();scanf("%d", &input);getchar();switch (input) {case 0:printf("退出游戏\n");//如果为0 则退出游戏break;case 1:game();//如果为1 则开始游戏break;default:printf("输入错误,请重新输入\n");break;}} while ((int)input);return 0;
}

那么我们就可以完成一个简单的三子棋啦 下面我们看下效果图把

赢不了呢当然不是我菜(我可不会承认) 因为我们给机器人加入了智商,所以最高就是可以玩到平局啦 看看有没有小伙伴能赢了我这个机器人的

《c语言小游戏》入门级三子棋游戏(机器人加强版)相关推荐

  1. 如何用C语言来实现【三子棋游戏】

    目录 一.前言 二.思维导图 三.思路分析 四.运行结果 五.算法细节 1.游戏相关的测试 2.游戏函数的声明 3.游戏函数的实现 (1)初始化棋盘的函数 (2)打印棋盘的函数 (3)玩家下棋的函数 ...

  2. c语言程序设计中三子棋游戏,C语言实现简易版三子棋游戏

    本文实例为大家共享了C语言实现三子棋游戏的详细代码,供大家参考,详细内容如下 什么是多文件? 多数大型的工程的头文件和源文件非常多,我们也不可能把所有的代码都写在同一个文件里,这样也不方便代码的阅读与 ...

  3. c语言编程实现简单三子棋游戏

    分别创建test.c   game.c 两个源文件,以及game.h头文件   这里的三子棋游戏是指棋盘为3*3,玩家与电脑之间的对决,先将各自的棋下为一排(横/竖/斜)者获胜,电脑所    下位置是 ...

  4. C语言小游戏,三子棋游戏(适合初学者练习)

    三子棋代码 耗时三天,本人很菜,疯狂debug 不细心写代码真的很累 **本代码使用vs2019编译 所以使用了scanf_s(懂得都懂) 如果使用别的编译器请注意将起改为scanf #include ...

  5. C语言实现人机模式三子棋游戏

    三子棋规则:在九宫格棋盘上,只要将自己的三个棋子走成一条线(横排.竖排.对角线),就算对方输了. 接下来,我们就开始用C语言实现这款操作简单容易上手的小游戏.我们采用多文件方式实现: game.h// ...

  6. C语言小项目——井字棋游戏(升级版)

  7. 【c苑杂坛之小游戏系列】 三子棋游戏

    [c苑杂坛之边学边玩] 三子棋游戏带你初识C语言 1.游戏说明 2.效果展示 3.游戏代码 1.游戏说明 三子棋游戏相信大家都知道,在这里不去讲述游戏背景,对本代码实现的三子棋游戏进行一定的说明. 博 ...

  8. 三子棋游戏(呆呆详解版)

    文章目录 一.问题 二.游戏基本流程 三.代码具体实现步骤 1.菜单界面 2.创建棋盘 3.初始化棋盘 4.打印棋盘 5.玩家下棋 6.电脑下棋 7.判断哪一方获胜 四.完整代码 五.代码运行演示 六 ...

  9. 实现三子棋游戏详细教学

    三子棋游戏目录 三子棋游戏 游戏选择 初始化棋盘 棋盘打印 玩家下棋 电脑下棋 判定输赢 完整代码呈现 结尾 三子棋游戏 整个游戏分为游戏选择.初始化棋盘.棋盘打印.玩家下棋.电脑下棋.判定输赢共六个 ...

最新文章

  1. 柳传志:我的忧虑来自人工智能的影响
  2. 从源码角度深入分析ant
  3. 【轻端重云和边缘架构新模式】
  4. MS SQLSERVER 各种乱七八糟
  5. 数据库查询经常卡死?面对亿级大数据量,我是这么展示分析的
  6. python要背的单词_Python-默背单词
  7. 【云图】如何制作中国贪官落马图?
  8. sketch插件 android,用这个免费的Sketch插件,帮你完美还原安卓界面!
  9. sap系统和服务器的关系,erp系统和sap系统的区别
  10. 教你炒股票25:吻,MACD、背弛、中枢
  11. HTB打靶(Active Directory 101 Forest)
  12. Docker源码分析(三)之Docker Daemon
  13. 2017中兴算法挑战赛(迪杰斯特拉)
  14. oracle之concat()函数
  15. SCU - 4572 醉后不知天在水,满船清梦压星河【思维】
  16. 网络爬虫信息之实战淘宝书包信息爬取14
  17. css是button和输入框保持在同一行
  18. Unity创作赛车游戏的四款插件
  19. 社会保障类毕业论文文献有哪些?
  20. 活动报名发布小程序源码 聚会活动报名小程序完整版前端+后台管理Think

热门文章

  1. Axure中继器怎么设置值
  2. TakePhoto和蒲公英(pgyer)的android.support.v4.content.FileProvider冲突
  3. 华为HCNA实验15-配置缺省静态路由
  4. python学习(三):web网页框架Django,成就python全栈开发
  5. c语言计时纳秒_C语言中常用计时方法总结
  6. 电销外呼系统,智能电销系统哪家好?
  7. sudo -S可以不用手动输入密码,且只要第一次密码正确,后面在有效期内,密码错误也可以
  8. springboot项目拦截器中获取接口返回数据_Spring Boot自定义Annotation实现接口自动幂...
  9. 通过access口加vlan标签吗_一文看懂VLAN的作用
  10. 菜鸟学习creo(从入门到入门-1)