
利用C/C++实现简易版扫雷,扫雷,一款很多人都玩不明白的游戏,其实这个游戏原理很简单,就是通过你的第一次下坐标排雷(大概率不会被炸死)来说明周围有几颗雷,就是你所下坐标的周边八个位置,1表示有一颗雷,2表示有两颗,以此类推。
看到这里可能有的同学已经知道怎么玩这个小游戏了,我这里把游戏获胜的图放出来
说了这么多总算是到今天的主角出场了:利用简单的C/C++写出这个小游戏
实现思路将雷区看作一个n行m列的二维数组,将雷埋在实际雷区中,将玩家输入的坐标与实际雷区中的坐标进行比较,坐标相同则视为踩雷,游戏结束;若不同则视为此坐标排雷成功,通过函数计算出周围雷的数量并将值其赋给镜像雷区,输出给玩家看,起到提示作用,最终通过函数与最开始的预计安全位进行比较,若相等则判定玩家胜利,游戏结束。 所以大概游戏流程为:打印菜单——选择开始——初始化雷区——布置雷——玩家输入坐标——排查雷——结束游戏
同昨天的三子棋一样,使用三个文件,即6_9.c、game2.c、game2.h
文件概述 6_9.c程序主体,包含main函数、game函数及menu函数,其中srand函数值得注意
game.c这个源文件主要是实现game函数中的各种功能函数,如初始化雷区函数Rec_board、打印雷区函数Put_board、放置雷函数Put_Boom、判断周围雷数量函数find_boom_num及排雷函数Find_Boom
game.h自定义的头文件,里面包含了各种声明、各种变量宏定义及各种函数定义
在正式开始之前还是先说明下实际雷区和镜像雷区,实际雷区就布置雷用的数组,而镜像雷区是给玩家看的数组,两个雷区各司其职,以确保程序正常运行,实际雷区与镜像雷区除内容外其他完全一致!
代码 6_9.c#define _CRT_SECURE_NO_WARNINGS 1//屏蔽“scanf 4996”问题
#include"game2.h"//stdio.h包含于此
void menu()
{
| 1 2 3 4 |
|
}//菜单
void game()
{
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
}//游戏本体
int main()
{
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
}
game2.c#define _CRT_SECURE_NO_WARNINGS 1//屏蔽4996问题
#include"game2.h"
int i = 0;
int j = 0;
void Rec_board(char board[ROWS][COLS], int rows, int cols, char set)
{
| 1 2 3 4 5 6 7 |
|
}//初始化雷区,set是雷区或镜像雷区所需要的值,有可能是'0'或*
void Put_board(char board[ROWS][COLS], int row, int col)
{
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
}//打印镜像雷区,跟三子棋差不多的逻辑
void Put_Boom(char board[ROWS][COLS], int row, int col)
{
| 1 2 3 4 5 6 7 8 9 10 11 12 |
|
}//放置雷
int find_boom_num(char board[ROWS][COLS], int x, int y)
{
| 1 |
|
}//判断周围有几颗雷
void Find_Boom(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
int count = 0;//记录周边雷数
while (count < row * col - Boom)
{
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
}
}
game2.h#pragma once//自定义头文件自己生成的
#include
#include
#include
#define ROW 9//宏定义行
#define COL 9//宏定义列
#define ROWS ROW+2//“缓冲区”
#define COLS COL+2//“缓冲区”
#define Boom 10//宏定义雷数
void Rec_board(char board[ROWS][COLS], int rows, int cols, char set);
//初始化雷区和镜像雷区
void Put_board(char board[ROWS][COLS], int row, int col);
//主要打印镜像雷区,实际雷区处于隐藏状态
void Put_Boom(char board[ROWS][COLS], int row, int col);
//放置雷
void Find_Boom(char mine[ROWS][COLS],char show[ROWS][COLS], int row, int col);
//排查雷
代码实现页面这是个代码间的关系
这是初始运行页面
首次坐标输入界面
一不注意就被炸死了
扫雷成功界面,不建议用9*9的盘玩,因为界面、功能不完善,很难获胜
因为行ROW和列COL是全局宏定义的变量,因此可以轻而易举的更改达到扩大雷区的效果
在这里更改
看看5*5超小页面
总结扫雷游戏跟三子棋游戏本质上是一样的,都有三个必要条件初始化棋盘(雷区)、玩家输入坐标、电脑生成随机坐标。回看整个代码,无非就是各种函数模块的拼接,难点也不过是理解数组内元素的比较与更换,总的来说,这些小游戏都是提前练手的好选择,在成为大牛的路上努力,加油吧!各位同学!
鸣谢感谢比特鹏哥关于扫雷两个小时的讲解!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)