头程序块

#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;
}

经过三天,不断重复的观看视频不知道多少遍,终于把这个小游戏写完了,看来我的天赋是真的不够啊,先天不足就要后天努力追啦,加油吧,比我聪明的青年们

编写一个三子棋游戏,和弱智电脑下棋相关推荐

  1. C语言实现三子棋游戏 代码+思路+电脑下棋算法

    C语言实现三子棋游戏 代码+思路+电脑下棋算法 重点: 当检测到电脑已经两子连续时,将会尝试获得胜利. 在检测到玩家即将胜利(连城两子)时,进行拦截 尝试胜利的优先级高于拦截,意味着如果玩家不能再下一 ...

  2. 【C语言/C++】三子棋游戏(数组知识扩充)

    文章目录 1.引言 2.代码规划 3.构思代码 4.代码模块实现 1.游戏界面功能 2.初始化棋盘 3.打印棋盘 4.玩家下棋逻辑 5.简易电脑下棋逻辑 6.判断胜负 7.判断游戏是否平局 1.引言 ...

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

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

  4. 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)

    作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...

  5. 【C语言】三子棋游戏的实现(玩家VS玩家 or 玩家VS电脑)

    目    录 一.三子棋游戏介绍 二.游戏功能函数分析 1 菜单显示函数 2 菜单选择函数 3 选择确认函数 4 显示当前棋盘状态函数 5 棋盘初始化函数 6 玩家下棋函数 7 电脑下棋函数 8 棋局 ...

  6. vs2010c语言小游戏,用C语言写一个三子棋小游戏(用VS2010实现,加强版)

    前几天写了一个三子棋小游戏,但是比较简单,因为以前写的游戏棋盘只能是3x3那么大.今天对那个程序做了两点改进: 1.现在可以实现在任意大小的棋盘上下棋了. 2.因为棋盘可能变大,为了玩家方便确定坐标, ...

  7. 关于三子棋游戏的简易实现与N子棋胜利判断方法

    关于三子棋游戏的简易实现与N子棋胜利判断方法 要实现三子棋游戏,主要需要实现以下几个要求:> 需要一个棋盘,既然需要一个棋盘,棋盘是在一个平面上的,所以我们需要创建一个二维数组 棋盘的打印 玩家 ...

  8. C语言第十课:编写井字棋游戏(综合练习1)

    目录 前言: 一.文件建立: 1.头文件game.h: 2.函数定义文件game.c: 3.工程测试文件test.c: 二.编写井字棋游戏: 1.程序整体执行思路: 2.menu菜单函数实现: 3.g ...

  9. C语言,制作三子棋游戏

    三子棋游戏是一个很好地数组应用实例,在这篇博客中我将分享我在初学C语言时编写三子棋游戏的思路和过程. 1.模块设置 设置一个测试模块test.c和一个函数模块game.c,测试模块放置主函数,函数模块 ...

最新文章

  1. Java序列化的机制和原理
  2. 皮一皮:死要面子啊...
  3. 谷歌x实验室汇聚顶尖人才,研发出了一种超前设备,直接打脸专家
  4. JS提交表单页面不跳转、JS下载、动态创建from
  5. Boost使用几条简单笔记
  6. 纯html网页,如何快速把所有字体的颜色都改成黑色的,原来模板默认的字体是灰色
  7. bzoj 1610: [Usaco2008 Feb]Line连线游戏
  8. Java定时任务工具详解之Timer篇
  9. 向日葵远程控制软件。
  10. Android ROS开发环境搭建
  11. Linux下安装各种常用软件
  12. Android Studio之仿微信APP界面设计
  13. 九阴真经Ambari——3.安装并配置MariaDB
  14. 德语语法笔记——动词的变位
  15. APP为什么打开率低?三大原因和应对之策!
  16. 游记:分享阳光!(初次测试)
  17. 加盟代理的骗局[转载]
  18. 杭州python培训兄弟连
  19. ZoomIt v6.12 用于在屏幕上缩放和绘图的演示文稿实用工具。
  20. 从零开始搭建微服务:认证服务器

热门文章

  1. icon-font图标介绍
  2. 塔式服务器有什么型号,塔式服务器是什么
  3. 红旗Linux桌面操作系统V11社区预览版虚拟机安装
  4. Python中import语句用法详解
  5. 微信自带浏览器环境内左上角返回、关闭按钮事件监控
  6. 利用python绘制五角星
  7. 新的开始——写给自己的话
  8. MySQL的分页你还在使劲的limit?
  9. UIScrollView解决touchesBegan等方法不能触发的解方案
  10. 为何你的宠物短视频做不下去?可能是因为踩了三大雷点