使用C语言编写三子棋小游戏:

首先进行分析:

1.需要将游戏实现分为三个部分:头文件,函数功能实现,游戏组合测试。

2.游戏可以循环进行,不必多次打开,可采用 do...while循环结构。

3.游戏为电脑和玩家对弈

4.游戏棋盘为3*3格式,需使用二维数组,并初始化棋盘,显示棋盘内容。

具体实现步骤:

头文件:

将需要多次使用的变量在头文件里定义,从而达到两个文件可以共同使用。

将功能实现函数在头文件里声明,让主文件可以调用这些函数。

//头文件引用----避免两个文件多次引用相同头文件
#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 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);               //判断输赢int IsFull(char board[ROW][COL], int row, int col);           //判断平局

游戏功能函数:

根据需求进行函数定义,完成游戏所需功能

#define _CRT_SECURE_NO_WARNINGS#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("请输入坐标:");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;}elseprintf("该坐标已被落子,请重新输入\n");}elseprintf("坐标无效,请重新输入\n");}}//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col) {printf("电脑下棋->\n");while (1) {int x = rand() % row;                                //获取随机值int y = rand() % 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 - 1][j - 1] == ' ')                 //棋盘没满返回‘0’return 0;}}return 1;
}//判断游戏输赢
char IsWin(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][1] != ' ')return board[i][1];}for (j = 0; j < col; j++) {                             //判断每列if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][j] != ' ')return board[1][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];}int n = IsFull(board, ROW, COL);                                //判断是否平局,由 n 接收返回值if (n == 1)return 'Q';return 'C';
}

游戏主体运行:

将游戏功能进行整合,从而达到游戏实现。

1.首页:采用打印简单首页和提示选项

void menu() {printf("* * * *    三 子 棋   * * * *\n");       //首页实现printf("* * * * 按 1 进入游戏 * * * *\n");printf("* * * * 按 0 退出游戏 * * * *\n");printf("* * * * * * * * * * * * * * *\n");
}

2.主函数内容:

int main() {int input = 0;srand((unsigned int) time (NULL));        //获取时间戳do {menu();printf("请选择是否进入游戏:");scanf("%d",&input);                           //选择是否进入游戏switch (input) {case 1 :printf("即将进入游戏\n");game();                            //调用游戏实现函数进入游戏break;case 0 :printf("退出游戏\n");break;default :printf("没有该选项,请重新选择\n");break;}} while (input);                                //根据input的值判断是否循环------根据玩家选项是否结束return 0;
}

3.游戏实现函数的调用:

void game() {char ret = 0;                                  // 存储 IsWin() 返回值char board[ROW][COL];                  //存储数据----二维数组InitBoard(board, ROW, COL);                   //初始化棋盘----初始化为空格DisplayBoard(board, ROW, COL);         //打印棋盘while (1) {PlayerMove(board, ROW, COL);           //玩家下棋DisplayBoard(board, ROW, COL);            ret = IsWin(board, ROW, COL);if (ret != 'C')break;ComputerMove(board, ROW, COL);            //电脑下棋DisplayBoard(board, ROW, COL);ret = IsWin(board, ROW, COL);if (ret != 'C')break;}if (ret == '*') {                            //判断输赢printf("恭喜玩家赢得游戏\n");DisplayBoard(board, ROW, COL);}else if (ret == '#') {printf(" 很遗憾,电脑赢了\n");DisplayBoard(board, ROW, COL);}elseprintf("平局!\n");
}

最终效果:

使用C语言编写三子棋小游戏相关推荐

  1. 趣讲用c语言实现三子棋小游戏

    目录 直接先看看最后运行效果吧 三子棋如何设计的,及其步骤 1,源文件已经头文件的创建 2.创建主函数 3.test函数的创建 4.game函数的创建和运行 5.五个函数的实现 a.init_boar ...

  2. C语言实现三子棋小游戏(编程思路以及代码详解)

    目录 前言 一.三子棋游戏的实现逻辑 二.创建菜单并控制游戏开始或游戏结束 三.创建棋盘并且初始化棋盘 四.打印棋盘并验证打印棋盘和初始化棋盘模块的实现 五.玩家下棋 六.电脑下棋 六.输赢判断 七. ...

  3. 用C语言实现三子棋小游戏(C语言菜单创建--设置光标,隐藏光标)

    文章目录 前言 一.菜单设置 二.三子棋游戏 1.各部分代码 2.运行结果 总结 前言 本文主要用C语言实现三子棋(简易版)小游戏,同时介绍C语言中的菜单设置. 一.菜单设置 我们在C语言中设置菜单一 ...

  4. C语言实现三子棋小游戏(源码+教程)

    我猜中了开头,却猜不到这结局.--<大话西游> 目录 1.设计框架 2.设计流程 2.1菜单 2.2初始化棋子 2.3初始化棋盘 2.4玩家输入落子的坐标 2.5电脑随机生成棋子 2.6判 ...

  5. C语言实现三子棋小游戏---超详细讲解

    实现步骤 第1步---打印一个菜单提示选择是否进入游戏 第2步---创建棋盘 第3步---初始化棋盘 第4步---打印棋盘 第5步---下棋,并判断输赢 第6步---将上述函数做成项目 完整代码 第1 ...

  6. 呆头呆脑的电脑----三子棋小游戏(C语言版)

    目录 1.需求分析 2.程序架构 3.代码实现(分函数呈现) (1)主函数代码实现 分析: 异常处理: (2)菜单函数的实现 分析: (3)游戏函数的实现 分析: (4)棋盘的初始化 分析: (5)棋 ...

  7. 三子棋小游戏带你走进编程世界(c语言版)

    目录 一.游戏实现的整体思路 二.实现游戏大体框架 二.游戏函数的实现 1.初始化键盘 2.打印棋盘 3.下棋及胜负判断 (1)玩家下棋 (2)电脑下棋 (3)判断输赢 三.结语及源码 三子棋想必大家 ...

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

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

  9. C语言小项目--三子棋小游戏

    学了这么长时间的C语言,你是否觉得没有一个没写过稍微长点的代码显得很没有成就感!不怕,今天带你做一个小游戏,领略一下写C和小游戏的快乐.写完记得给自己一个鼓励哦! 一.三子棋小游戏 想必大家都玩过三子 ...

最新文章

  1. 实战centos6安装zabbix-2.4版(终极版)
  2. java 基于虹软离线人脸识别SDK 2.0 最新版
  3. 毕业一年,疫情之下的95后工作:有的退而求次,有的忐忑前行
  4. 矩阵快速幂各类题型总结(一般,共轭,1 * n, 矩阵简化)
  5. 程序员面试金典 - 面试题 16.01. 交换数字(位运算swap)
  6. db2中null和空值的区别_MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?
  7. python分为哪几个模块_干货:入门Python重点学哪几个模块才能成为高手?
  8. 雅思作文模板.html,雅思小作文常用模板万能句大全
  9. vue rem移动端适配
  10. Linux学习笔记之(2)~linux目录树概览和说明
  11. Linux 三个强大的系统资源监控工具
  12. python 快速排名发包_百度发包快排【SEO超快速排名系统】 - 「黑酷SEO」
  13. 数据结构与算法-平衡二叉搜索树
  14. Qt 使用WPS或HTML生成word文档
  15. 3个APP海外推广方式,不走寻常路
  16. 【Android】eclipse 实现登录、注册、修改密码、数据库操作
  17. C# Behavior Tree -- 行为树
  18. 【战国策】之《齐策·张仪为秦连横说齐王曰》
  19. 大二计算机跟老师做项目,在大学里,要不要和老师一起合作做项目?过来人说出实情...
  20. 【物联网】物联网安全---编辑中

热门文章

  1. 怎么把文字转换成语音,这里有简单的方法
  2. Redis-----什么是Redis?
  3. ArduPilot — ArduPlane架构概述
  4. Word文档中插入的图片显示不全、嵌入式图片显示不全解决方法,仅设置图片为单倍行距方法
  5. python读写磁盘扇区数据有什么用_18-55.在Windows中,能够自动修复文件系统错误、扫描并尝试恢复坏扇区的操作是( )_学小易找答案...
  6. 利用VBA批量发送Excel中工资单邮件
  7. background:rgba()
  8. 数字图像处理---空间滤波基础
  9. 大数据处理的一些总结和应用(有关舆情监控)
  10. 超赞的实用前端社区精选?