目录

一扫雷设计思路

二设计步骤

1创建游戏菜单

2棋盘的展现和初始化

3布置雷

4排查雷

三游戏运行展示

四 代码

1text.c

2game.h

3game.c


一扫雷设计思路

在设计过程中,我们首先进行游戏菜单和棋盘的建立,然后初始化棋盘,并且在棋盘上布置雷,之后在排查雷,判断雷直到游戏结束。


二设计步骤

1创建游戏菜单

写一个菜单,根据个人喜好可以设计不同的菜单,用do...while实现输入1进入游戏,输入0退出游戏,输入其他数字就显示错误,重新选择。

*****************************
*****  1. play  0. exit *****
*****************************
请选择:>

代码展示:

void menu()
{printf("****************************\n");printf("*******  0·exit  ********** \n");printf("*******  1·play  ********** \n");printf("****************************\n");}
int main()
{int input = 0;do{menu();printf("请输入:>");scanf("%d", &input);switch (input){case 0:printf("退出游戏\n");break;case 1:printf("三子棋\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}

2棋盘的建立和初始化

扫雷棋盘的建立和三子棋类似需要依靠二维数组,但扫雷我们需要建立两个二位数组,一个是mine数组用以放置布置雷的位置信息,show数组用于放置排查雷的位置信息,这样做可以方便的显示排查地址周围雷的数量,同时在代码最前面使用define定义行列数,后期想改变棋盘大小更方便。但是,为了防止当坐标在边角时,计算周围雷的个数时发生数组越界的现象,两个数组都应该在扫雷棋盘的基础上各增加两行(列)

常量定义如下:

#define ROW 9//可自由设置扫雷棋盘的行数
#define COL 9//可自由设置扫雷棋盘的列数
#define ROWS ROW+2//数组的行数
#define COLS COL+2//数组的列数
#define MINE 10//亦可自由设置地雷个数

初始化棋盘代码如下

void init_board(char board[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++){board[i][j] = set;}}
}

打印棋盘代码如下:

void display_board(char board[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 ", board[i][j]);}printf("\n");}
}

mine数组中的各元素均初始化为‘0’,将show数组中的各元素均初始化为‘*’。


3布置雷

雷的生成可以用srand函数和rand函数来随机生成。同时rand() % row得到0~8的数,要加上1来让雷生成在[1][1]到[9][9]的区域。

void set_mine(char mine[ROWS][COLS], int row, int col)
{//布置10个雷int count = EASY_COUNT;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}

4排查雷

输入行列坐标判断坐标内的是否是雷,或者点击方格翻开无雷区域 ,直到区域内没有雷来结束游戏或踩到雷游戏结束,并且用get_mine_count函数显示周围雷的个数。

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 - EASY_COUNT){printf("请输入要排查雷的坐标:>");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_board(mine, ROW, COL);break;}else{int count = get_mine_count(mine, x, y);show[x][y] = count + '0';display_board(show, ROW, COL);win++;}}else{printf("该坐标已经被排查过了\n");}}else{printf("坐标非法,请重新输入\n");}}if (win == row * col - EASY_COUNT){printf("恭喜你,排雷成功\n");display_board(mine, ROW, COL);}
}

get_mine_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');
}

text.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu()
{printf("            1. play          \n");printf("            0. exit          \n");
}void game()
{//设计2个数组存放信息char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };//初始化棋盘//mine初始化为全‘0’//show初始化为全‘*’init_board(mine, ROWS, COLS, '0');init_board(show, ROWS, COLS, '*');//打印棋盘//display_board(mine, ROW, COL);//display_board(show, ROW, COL);//布置雷set_mine(mine, ROW, COL);//排雷//display_board(mine, ROW, COL);display_board(show, ROW, COL);find_mine(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;
}//前端
//后端

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 EASY_COUNT 10//初始化棋盘
void init_board(char board[ROWS][COLS], int rows, int cols, char set);//打印棋盘
void display_board(char board[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)

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"void init_board(char board[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++){board[i][j] = set;}}
}void display_board(char board[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 ", board[i][j]);}printf("\n");}
}void set_mine(char mine[ROWS][COLS], int row, int col)
{//布置10个雷int count = EASY_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 - EASY_COUNT){printf("请输入要排查雷的坐标:>");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_board(mine, ROW, COL);break;}else{int count = get_mine_count(mine, x, y);show[x][y] = count + '0';display_board(show, ROW, COL);win++;}}else{printf("该坐标已经被排查过了\n");}}else{printf("坐标非法,请重新输入\n");}}if (win == row * col - EASY_COUNT){printf("恭喜你,排雷成功\n");display_board(mine, ROW, COL);}
}

扫雷游戏的设计和代码相关推荐

  1. 简单版扫雷游戏的设计与代码

    文件和三子棋一样 思想 1.要用两个棋盘,一个用来布置雷,一个用来存储排查雷的信息 2.考虑到一开始的排查雷的棋盘界面要用字符'*'显示,所以统一用字符数组来储存数据 3.布置雷的棋盘用字符'1'来表 ...

  2. 基于html扫雷游戏毕业论文,扫雷游戏的设计与开发毕业设计毕业论文正稿

    扫雷游戏的设计与开发毕业设计毕业论文正稿 (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 word格式扫雷游戏的设计与开发论文作者 ...

  3. 基于java的扫雷论文_毕业论文基于java的扫雷游戏的设计与实现.doc

    毕业论文基于java的扫雷游戏的设计与实现 JAVA程序设计A课程设计 题 目 基于JAVA的扫雷游戏的设计与实现 院 (系) 信息工程学院 专 业 班 级 计算机科学与技术(2)班 学 生 姓 名 ...

  4. 扫雷java程序算法设计_基于Java的Windows扫雷游戏的设计与实现毕业论文+任务书+翻译及原文+源码+辅导视频...

    基于Java的Windows扫雷游戏的设计与实现 摘 要 扫雷这款游戏有着很长的历史,从扫雷被开发出来到现在进行了无数次的优化,这款游戏变得越来越让人爱不释手了,简单的玩法在加上一个好看的游戏界面,每 ...

  5. 基于java的扫雷游戏的设计

    扫雷游戏的基本功能:点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷.如果没雷,则显示周围雷数,如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止并显示,玩家需要尽快找出雷区中的 ...

  6. 扫雷游戏的设计与实现

    扫雷游戏的设计与实现 扫雷游戏的介绍与规则 扫雷游戏的具体实现 1.打印游戏菜单 2.创建置雷图与展示图 3.初始化两张地图 4.布置地雷 5.打印展示图(置雷图) 6.排查雷 7.统计周围雷数 8. ...

  7. 【保姆级】扫雷游戏的设计与实现【C语言】

    目录 1.游戏介绍 2.框架设计 3,game.h的代码详解 4.text.c的代码详解 5.game.c的代码详解 6.最后 1.游戏介绍 点击一个方格,方格即被打开并显示出方格中的数字,方格中数字 ...

  8. python扫雷游戏课程设计小组任务计划与分配表_python实现扫雷游戏

    本文为大家分享了python实现扫雷游戏的具体代码,供大家参考,具体内容如下 本文实例借鉴mvc模式,核心数据为model,维护1个矩阵,0表无雷,1表雷,-1表已经检测过. 本例使用python的t ...

  9. 基于Java的Windows扫雷游戏的设计与实现

    目 录 摘 要 i Abstract ii 1 绪论 1 1.1 课题背景及意义 1 1.2 开发工具的选用及介绍 1 1.3 选题目的和意义 2 1.4 本文主要研究的内容 2 2 需求分析 3 2 ...

最新文章

  1. vba保存文件为xlsx格式_Vba把Excel某个范围保存为XLS工作薄文件
  2. Html5必看:教你如何选择移动APP开发框架
  3. 手机QQ浏览器如何同时下载多个文件
  4. 进程vs线程 java 1615387415
  5. ThreadLocal 初探
  6. 菜鸟学习C++练笔之整理搜狗2008版语料库--获取分类语料库
  7. 7天学完Java基础之4/7
  8. 基于fdw的跨Greenplum集群数据库查询实现
  9. windows开启远程Wmi服务支持
  10. 电脑桌面图片变成白色的解决方案
  11. markdown如何调整行距_Markdown基础语法
  12. SAP 采购定价日期控制
  13. 我的RHCE认证考试经历
  14. 半透明旋转魔方特效的实现
  15. G003-186-18
  16. MATLAB在图像上标记特定点
  17. 华为云FusionInsight智能数据湖版本新能力解读
  18. More effective C++学习总结
  19. 如何才能提高文档编写能力呢[转]
  20. windows系统打印机无法共享报错0x000006cc......

热门文章

  1. 超声波的四个特性_超声波的四个特性及应用特性
  2. Vmware下Ubuntu18.04虚拟机右上角的网络图标消失连不上网络,找回方法。
  3. 为什么无线电子产品要做振动试验?有什么用?
  4. PADS 中如何删除自己打的地孔阵列
  5. 电子科技大学计算机专业就业怎么样,电子科技大学录取分最高的5大专业,个个是热门,好就业薪资高!...
  6. css中的setProperty()方法的理解
  7. springboot启动报错Error:Kotlin: Module was compiled with an incompatible version of Kotlin
  8. NOI 2020 游记
  9. 【二战考研喘息】总算过了六级(虽然分很低)以及发现360清理磁盘空间的能力还行
  10. Announcing Spring Native Beta!