排雷小游戏(C语言)
文章目录
- 游戏前言准备
- 一、建立游戏菜单
- 二、建立棋盘
- 三、初始化棋盘
- 四、布置雷
- 五、排查雷并判断是否踩雷
- 六、源码
- 1.test.c
- 2.game.c
- 3.game.h
游戏前言准备
1.使用二维数组初始化扫雷的游戏布局,通过改变数组的行列来改变,用ROW来规定数组行数,COL来规定数组列数,扫雷需要用到两个二维数组,一个数组用来存放雷的信息,一个数组用来存放显示界面信息,因为害怕边界越界所以使用ROW+2和COL+2的数组避免越界;
2.使用二维数组显示扫雷游戏界面,除了显示数组信息外,还需要在第一行和第一列显示坐标便于玩家确定排雷时的坐标;
3.设置雷区,根据游戏难度来随机放置固定个数的雷,使用#define定义好随时改变值以达到不同的雷的个数;
4.排雷,每当玩家选择的这个坐标没雷时,则计算这个坐标周围一圈八个格子的雷的个数。
5.判断输赢,如果玩家踩到雷,则直接游戏结束,若未排的区域个数等于雷的个数且玩家没被炸死,则玩家赢。
一、建立游戏菜单
void menu()
{printf("********************************\n");printf("********* 扫雷游戏 ********\n");printf("********************************\n");printf("********* 1.play ********\n");printf("********* 0.exit ********\n");printf("********************************\n");printf("********************************\n");
}
nt 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;
}
二、建立棋盘
void init_broad(char broad[ROWS][COLS], int rows, int cols,char set)
{int i = 0;int j = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){broad[i][j] = set;}}
}
三、初始化棋盘
void display_broad(char broad[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;//列号for (j = 0; j <= col; j++){printf("%d ", j);}printf("\n");for (i = 1; i <= row; i++){//行号printf("%d ", i);for (j = 1; j <= col; j++){printf("%c ", broad[i][j]);}printf("\n");}}
四、布置雷
void set_mine(char mine[ROWS][COLS], int row, int col)
{int count = DEFAULT_COUNT;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}
五、排查雷并判断是否踩雷
int get_mine_count(char mine[ROWS][COLS], int x, int y)
{return (mine[x - 1][y] + mine[x - 1][y - 1] +mine[x][y - 1] + mine[x + 1][y - 1] +mine[x + 1][y] + mine[x + 1][y + 1] +mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0');
}
void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;while (win < row * col - DEFAULT_COUNT){printf("请输入要排查雷的坐标:>\n");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (show[x][y] == '*'){if (mine[x][y] == '1'){printf("你被炸死了\n");display_broad(mine, ROW, COL);break;}else{int count = get_mine_count(mine, row, col);show[x][y] = count + '0';display_broad(show, ROW, COL);win++;}}else{printf("该坐标已经被排查\n");}}else{printf("坐标非法,请重新输入\n");}}if (win == row * col - DEFAULT_COUNT){printf("恭喜你,排雷成功\n");display_broad(mine, ROW, COL);}
}
六、源码
1.test.c
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void menu()
{printf("********************************\n");printf("********* 扫雷游戏 ********\n");printf("********************************\n");printf("********* 1.play ********\n");printf("********* 0.exit ********\n");printf("********************************\n");printf("********************************\n");
}
void game()
{char mine[ROWS][COLS] = { 0 };//设计数组存放信息char show[ROWS][COLS] = { 0 };//初始化棋盘init_broad(mine, ROWS, COLS, '0');init_broad(show, ROWS, COLS, '*');//打印棋盘display_broad(show, ROW, COL);//布置雷set_mine(mine, ROW, COL);//排雷find_mine(mine, show, 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;
}
2.game.c
#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void init_broad(char broad[ROWS][COLS], int rows, int cols,char set)
{int i = 0;int j = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){broad[i][j] = set;}}
}void display_broad(char broad[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;//列号for (j = 0; j <= col; j++){printf("%d ", j);}printf("\n");for (i = 1; i <= row; i++){//行号printf("%d ", i);for (j = 1; j <= col; j++){printf("%c ", broad[i][j]);}printf("\n");}}void set_mine(char mine[ROWS][COLS], int row, int col)
{int count = DEFAULT_COUNT;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}
int get_mine_count(char mine[ROWS][COLS], int x, int y)
{return (mine[x - 1][y] + mine[x - 1][y - 1] +mine[x][y - 1] + mine[x + 1][y - 1] +mine[x + 1][y] + mine[x + 1][y + 1] +mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0');
}
void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;while (win < row * col - DEFAULT_COUNT){printf("请输入要排查雷的坐标:>\n");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (show[x][y] == '*'){if (mine[x][y] == '1'){printf("你被炸死了\n");display_broad(mine, ROW, COL);break;}else{int count = get_mine_count(mine, row, col);show[x][y] = count + '0';display_broad(show, ROW, COL);win++;}}else{printf("该坐标已经被排查\n");}}else{printf("坐标非法,请重新输入\n");}}if (win == row * col - DEFAULT_COUNT){printf("恭喜你,排雷成功\n");display_broad(mine, ROW, COL);}
}
3.game.h
#pragma once#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2#define DEFAULT_COUNT 10//初始化棋盘
void init_broad(char broad[ROWS][COLS],int rows,int cols,char set);
//打印棋盘
void display_broad(char broad[ROWS][COLS], int row, int col);
//布置雷
void set_mine(char mine[ROWS][COLS], int row, int col);
//排雷
void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
排雷小游戏(C语言)相关推荐
- 简易的排雷小游戏(c语言制作)
目录 前言 一.总体规划 二.使用步骤 1.特别的 2.游戏的开关 3.游戏的实现 (1).初始化棋盘 (2).打印棋盘 (3).布置雷 (4).排查雷 总结 前言 排雷,非常经典的一个小游戏,最近有 ...
- C语言实现排雷小游戏
排雷小游戏 用C语言实现一个简单的排雷小游戏 如果不清楚扫雷游戏的规则,可以上网搜一下去玩一下,这里我就不做过多介绍了,只介绍程序的思想和实现. 整个程序分为三个文件 test.c game.h ga ...
- C语言可以敲哪些小游戏,C语言可以写哪些小游戏?
C语言可以写哪些小游戏? C语言可以编手机游戏.你叫他去死不过我这有贪吃蛇的代码,你倒可以看看(用TC编译一定过( #包括 #包括 #包括 #包括 #包括 #定义输入7181 #定义ESC 283 # ...
- 控制台推箱子小游戏C语言
自己开发的C语言控制台推箱子小游戏,基于二维数组实现,功能不多但是游戏整体较为完整,因为技术有限,所以代码暂未优化且整体显得较为臃肿,整体架构简单,代码全自主设计编写,仅作交流学习,还望大佬多多指点. ...
- windows经典地雷小游戏(C语言实现)
地雷小游戏 实现游戏的流程 1.如何使用C语言表示双重身份的地雷图 2.打印一下showMap 3.让玩家输入坐标(row,col) 4.判断玩家是否踩雷 5.更新地图 6.如何判断玩家获胜 代码区域 ...
- 呆头呆脑的电脑----三子棋小游戏(C语言版)
目录 1.需求分析 2.程序架构 3.代码实现(分函数呈现) (1)主函数代码实现 分析: 异常处理: (2)菜单函数的实现 分析: (3)游戏函数的实现 分析: (4)棋盘的初始化 分析: (5)棋 ...
- 控制台版贪吃蛇小游戏 C语言
写在前面 最近我们C语言的课设快开始了,开始前刚好有时间就写了一下C语言的贪吃蛇小游戏(单链表实现),包含了经典模式和无边界模式 ,网上查了设置颜色 和 改变光标位置 还有 用方向键控制 的函数,第一 ...
- c语言小游戏(c语言小游戏代码飞机大战)
怎样用C语言编写一个小游戏? "贪吃蛇"C代码: #include #include #include #include #include #define W 78 //游戏框的 ...
- 二十四点小游戏——C语言实现
二十四点小游戏(C语言实现) 过程笨拙,有很多局限之处,比如对答案的输出有限制,代码行数过多,故仅供思路参考. #include<stdio.h> #include<windows. ...
- 小游戏C语言报告,C语言小游戏设计报告
C语言小游戏设计报告 发布时间:2020-06-19 03:34:29 来源:51CTO 阅读:1412 作者:迷蒙的天空 C语言小游戏设计报告 课程设计名称:贪吃蛇小游戏 专业班级:计科15-2 学 ...
最新文章
- java链式栈_Java栈之链式栈存储结构实现
- BeetleX.WebFamily文件图片管理集成
- linux之task_struct
- 【Excel】函数DateDif查看两个日期之间的间隔
- python逻辑回归代码_Logistic 逻辑回归及 python 实现
- 硬件基础知识---(17)如何设计一个三极管放大电路
- 电力企业信息化系统之调度信息报送系统整体解决方案
- dbeaver can't connect HBase1.2 using phoenix driver #1863
- bodymovin导出没有html5,AE脚本-导出json格式的Web动画工具 Bodymovin v5.5.3+使用教程
- 储存卡怎么格式化为fat32_64g储存卡怎么格式化成fat32格式化
- 手工焊接电路板经验总结
- 【案例20】NC系统was部署后无法登录
- 注册页面提交验证-密保问题实现
- java毕业设计在线音乐系统Mybatis+系统+数据库+调试部署
- Java实现 蓝桥杯VIP 算法训练 步与血(递推 || DFS)
- Tableau Desktop 2020 Mac支持M1芯片下载big sur 解决M1芯片安装Tableau Public教程2021
- html图片怎么做成链接,HTML的链接代码怎么做?HTML的图片链接怎么制作?
- 网络运维系列:端口占用、端口开启检测
- 计算机科学与遥感信息技术学院,2021年遥感科学与技术专业大学排名及分数线【统计表】...
- BIMServer系列——1.BIMServer安装
热门文章
- Appium+python自动化(九)- 定位元素工具(义结金兰的两位异性兄弟)(超详解)...
- 强人教你吃自助火锅(转载)
- 华为云会议,助力企业移动办公效率提升
- springboot_分页插件
- python定时器爬取豆瓣音乐Top榜歌名
- request.getRequestDispatcher(login_success.jsp).forward(request,response);的含义
- windows 7开启硬盘AHCI模式蓝屏解决方案
- 安装docker报错Hardware assisted virtualization and data execution protection must be enabled in the BIOS
- Splinter入门(十)Cookies manipulation(Cookies操作)
- js 前进 后退 刷新