目录

三子棋效果展示

三子棋的功能实现

1、初始化棋盘格

2、打印棋盘

3、玩家下棋

4、电脑下棋

5、判断输赢(玩家赢/电脑赢/平局)

完整代码展示


三子棋小游戏的代码实现分为三个文件,test.c(测试游戏功能)、game.h(头文件的包含和函数的声明)、game.c(实现函数功能)

后附三个文件完整代码

三子棋效果展示


                             

三子棋的功能实现


1、初始化棋盘格

将定义的二维数组中的数据全部初始化为空格

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

2、打印棋盘

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");}}
}

3、玩家下棋

void PlayerMove(char board[ROW][COL],int row,int col)
{int a = 0;int b = 0;printf("玩家走:\n");while(1){printf("请输入下棋的坐标:");scanf("%d %d",&a,&b);if (a>0 && a<=row && b>0 && b<=col){if (board[a-1][b-1] == ' '){board[a-1][b-1] = '*';break;}else{printf("坐标被占用,请重新输入\n");}}else{printf("坐标不合法,请重新输入\n");}}}

4、电脑下棋

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

5、判断输赢(玩家赢/电脑赢/平局)

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;//没满}}return 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 < row;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[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' '){return board[1][1];}//判断平局//满1int ret = IsFull(board,ROW,COL);if (ret == 1)return 'Q';return 'C';
}

完整代码展示

1、test.c

#include "game2.h"void menu()
{printf("***************************\n");printf("*******   1.play   ********\n");printf("*******   0.exit   ********\n");printf("***************************\n");
}void game()
{char mine[ROWS][COLS] = {0};char show[ROWS][COLS] = {0};//初始化棋盘InitBoard(mine,ROWS,COLS,'0');InitBoard(show,ROWS,COLS,'*');//打印棋盘//DisplayBoard(mine,ROW,COL);DisplayBoard(show,ROW,COL);//布置雷SetMine(mine,ROW,COL);//DisplayBoard(mine,ROW,COL);//扫描雷FindMine(mine,show,ROW,COL);
}int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:");scanf("%d",&input);switch(input){case 1:game();break;case 0:printf("已退出游戏\n");break;default:printf("输入错误,请重新选择\n");break;}}while(input);return 0;
}

2、game.h

#ifndef game2_h
#define game2_h#include <stdio.h>
#include "stdlib.h"
#include "time.h"#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define MINEC 10//函数声明
//初始化棋盘
void InitBoard(char board[ROWS][COLS],int row,int col,char set);
//打印棋盘
void DisplayBoard(char board[ROWS][COLS],int row,int col);
//布置雷
void SetMine(char board[ROWS][COLS],int row,int col);
//排查雷
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);#endif /* game2_h */

3、game.c

#include "game2.h"void InitBoard(char board[ROWS][COLS],int row,int col,char set)
{int i = 0;int j = 0;for (i = 0; i < row;i++){for (j = 0;j < col;j++){board[i][j] = set;}}
}void DisplayBoard(char board[ROWS][COLS],int row,int col)
{int i = 0;int j = 0;printf("--------扫雷游戏--------\n");for (i = 0; i <= col; i++){printf("%d ",i);}printf("\n");for (i = 1;i <= row;i++){printf("%d ",i);for (j = 1; j <= col; j++){printf("%c ",board[i][j]);}printf("\n");}printf("--------扫雷游戏--------\n");
}void SetMine(char board[ROWS][COLS],int row,int col)
{int count = MINEC;while(count){int i = rand() % row + 1;int j = rand() % col + 1;if (board[i][j] == '0'){board[i][j] = '1';count--;}}}int get_mine_count(char mine[ROWS][COLS],int x,int y)
{return mine[x-1][y-1] + mine[x][y-1] + mine[x+1][y-1] + mine[x-1][y] + mine[x+1][y] + mine[x-1][y+1] +  mine[x][y+1] + mine[x+1][y+1] - 8*'0';
}void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{//1、输入排查的坐标//2、检查坐标处是不是雷//(1)是雷 - 很遗憾炸死//(2)不是雷 - 统计坐标周围有几个雷 - 存储排查雷的信息到show数组,游戏继续int x = 0;int y = 0;int win = 0;while(win < row*col - MINEC){printf("请输入要排查的坐标:");scanf("%d %d",&x,&y);if (x>=1 && x<= row && y>=1 && y<=col){if(mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");DisplayBoard(mine, ROW, COL);break;}else{int count = get_mine_count(mine,x,y);show[x][y] = count + '0';DisplayBoard(show, ROW, COL);win++;}}else{printf("坐标不合法,请重新输入\n");}}if (win == row*col - MINEC){printf("成功\n");DisplayBoard(mine, ROW, COL);}}

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

  1. 童年小游戏三子棋(C语言数组实现)

    目录 认识游戏 游戏框架 游戏实现 基本构思 棋子 棋盘 下棋 判断输赢 效果展示 全部代码 游戏效果 认识游戏 三子棋是黑白棋的一种.三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等 ...

  2. c语言小游戏 三子棋,C语言实现简单的三子棋小游戏

    学习完数组就能用C语言写出的简单小游戏: 编译器使用的为VS2013 代码分为三个部分 1.头文件 game.h 2.源文件 game.c 用来存放游戏中所有的函数 3.源文件 test.c 用来存放 ...

  3. 简单小游戏------三子棋

    目录 前言 一.整体的逻辑 创建菜单 创建棋盘 打印棋盘 玩家下棋 电脑下棋 判断输赢 整合代码 game.c test.c game.h 总结 前言 经典数组游戏三子棋 一.整体的逻辑 1.创建菜单 ...

  4. C语言小游戏——三子棋

    C语言 -- 三子棋 本篇主要是用二维数组和多个函数来实现三子棋游戏. 让我们先来看看这个编写这个游戏的思路:首先要打印三子棋的棋盘,然后是玩家下棋,电脑下棋,最后判断谁赢了,或者看看是否平局. 我们 ...

  5. 用c语言实现小游戏三子棋

    小游戏之三子棋 小游戏之三子棋 三子棋的基本玩法 游戏制作思路 制作步骤 1.菜单 2.初始化棋盘 3.打印棋盘 4.玩家下棋 5.电脑下棋 6.判断胜利 完整代码 ​​​​​​​小结 三子棋的基本玩 ...

  6. C语言小游戏——三子棋(井字棋)

    文章目录 前言 一.前期准备 二.游戏整体结构及思路 1.程序主体结构: 2.代码解读 3.完整源代码 总结 前言 相信大家小时候都玩过井字棋小游戏,拿石子在地上画或是用笔在纸上画······今天我们 ...

  7. C语言趣味小游戏——三子棋

    全篇无任何废话,本文的解释大多数都在代码段中,所以一定要看代码,边看边学边理解. 这只是初学者入门的一个小游戏,不难懂,没有什么复杂的内容 可以先学习一下比三子棋还简单的猜数字小游戏 C语言趣味小游戏 ...

  8. C语言简易小游戏--三子棋

    小时候,在学校和小伙伴除了互相追逐着玩闹玩游戏以外,相信很多小伙伴们也有和朋友在课堂上拿一张纸玩井字棋的美好回忆.(如下图酱紫啦~) 那今天呢,我们就用C语言制作一款简易的井字棋来练习一下对代码的感觉 ...

  9. (超详解)C语言实现小游戏三子棋

    目录 一,实现目标 二,整体思路 1.创立三个文件:text.c(实现测试的逻辑)                                                            ...

  10. 趣味益智小游戏 三子棋+五子棋 优化版(可任意选择棋盘大小)

    前言 今天牛牛给大家分享的是c语言实现三子棋和五子棋游戏,初学者可能有些不理解的地方,记得私信提问哦,牛牛会一 一回答的. 目录 前言 一.游戏介绍 二.游戏设计思路 2.1 主函数测试区(test. ...

最新文章

  1. 会刷编程竞赛题的AlphaCode来了!
  2. HDLBits 系列(25)独热码有限状态机实现的简单方式
  3. python垃圾分类源代码_Python学习:怕乱丢垃圾罚款?使用 Python 轻松完成垃圾分类...
  4. 常用方法 Excel转换为DataSet
  5. 自顶向下 与自底向上解决01 背包问题
  6. VTK:绘制bottle瓶子用法实战
  7. HTML——初识html,元素 属性 段落 文本格式化 链接 头部入门
  8. 为什么 jsp 还没有淘汰?
  9. 基于SVN的SCM简单总结
  10. NASM环境搭建+创建虚拟软盘镜像
  11. SIM800C 不停的回复Call Ready NET指示灯一直不能进入3秒闪烁的状态
  12. 美化导航html,HTML-美化
  13. c语言编程八卦方位,易经手掌八卦图,如何C语言编程画一个彩色的周易八卦图...
  14. 【附源码】小白打造「传奇游戏」 (一)
  15. 趁年轻,我们干点什么吧
  16. ubuntu16.10+cuda8.0+cudnn+caffe+opencv3.2+anaconda2
  17. Swift 语言的设计错误
  18. 华为OD机试 - 德州扑克(Java JS Python)
  19. Tor 在 linux上使用
  20. CDN还有这么多衍生品?! 云帆加速借技术创新笑傲短视频新蓝海

热门文章

  1. LCT(Link Cut Tree)总结
  2. JZOJ1286太空电梯
  3. HDU 4630 No Pain No Game (线段树+离线)
  4. 自定义scrollview右侧的滑动条
  5. HDU5479 Colmerauer 单调栈+暴力优化
  6. 软件中反跟踪技术和软件调试
  7. ajax实例详解(2)
  8. [C++ Quiz] Intermediate level
  9. spring中如何实现参数隐式传递_Java进阶架构之开源框架面试题系列:Spring+SpringMVC+MyBatis(含答案分享)...
  10. 人脸识别 face_recognition