扫雷游戏的实现

简介: 扫雷游戏的实现

介绍:

       首先,我们创建三个文件:

       game.h(头文件): 在头文件中,我们设置一系列必要的函数库

       game.c(功能文件):我们在里面设置整个游戏系统的功能实现,是游戏的主要核心

       text.c(主文件):我们在此文件中开始游戏,是游戏的"外观"

1,game.h头文件的设计

      为了方便起见,我们直接在此头文件里声称必要的函数库,在game.c和text.c里可以直接引用此设计的头文件

       以下是我们对各个部分的解释的代码功能

//说明这是一个头文件,如若是初学者可暂时忽略

#pragma once

//下面四个头文件是必要的头文件

#include<stdlib.h>

#include<stdio.h>

#include<time.h>

#include<windows.h>

//生命行数和列数

#define ROW 9

#define LIST 9

#define ROWS 11

#define LISTS 11

//游戏的指导说明

void instruction();

//将填充地雷和雷盘的数组进行初始化

void value(char, int, int, char);

//输出游戏的雷盘,是整个游戏的"图形化界面"

void output(char, int, int);

//进行埋藏雷

void setmine(char, int, int);

//进行排查雷

void viewmine(char, char, int, int);

//排查雷时,若没有雷,进行检测周围有几个雷

int statistics(char, int, int);

       以上的内容是我们对整个游戏的设置,接下来我们灵活运用以上函数公能来实现游戏

2,game.c源文件的设计

       需提醒一下,在函数功能中的设计,我们采取函数分模块来实现扫雷游戏中的某个必要的功能,而里面只是对于game.h头文件中的函数进行定义(函数功能的顺序可以打乱写,因为在此文件中我们不需要这种逻辑,这种逻辑在text.c中实现)

#include"game.h"//引用我们设置的头文件

//在一开始,我们首先要考略对游戏的说明,跟玩家说明游戏怎么玩

void instruction()

{

puts("\t\t\t\t\t\t欢迎来到扫雷游戏");

puts("游戏说明:");

puts("首先,输入1表示游戏开始,输入0表示退出游戏,其他数字将会提示输入错误");

puts("一共有10个雷,您将输入坐标进行扫雷");

puts("注意:坐标是从下标1开始,跟数组的不一样");

}

//这里既是对安排地雷的数组的初始化也是安排对雷盘数组的初始化

//第一个参数用数组指针接收,第二个和第三个是数组的行和列,第四个是要填充的字符

void value(char (*a)[100],int row,int list,char letter)

{

int i, j;

for (i = -1; i < row; i++)

for (j = -1; j < list; j++)

a[i][j] = letter;

}

//设置扫雷的"图像",经常于其他函数功能连用

void output(char(*a)[100], int row, int list)

{

int i, j;

puts("------ 扫雷 ------");

puts("坐标表示:");

for (i = 0; i < row; i++)

{

if (i == 0)

{

for (j = 0; j < list + 1; j++)

printf("%d ", j);//对图像中坐标的行数进行说明

puts("");

}

printf("%d ", i + 1);//对图像中图像坐标列数进行说明

for (j = 0; j < list; j++)

printf("%c ", a[i][j]);//输出玩家输入坐标的位置

puts("");

}

}

//我们安排10个地雷用数组存储起来

void setmine(char(*a)[100], int row, int list)

{

int x, y, i, j, count=10;

while (count)

{

x = rand() % row;

y = rand() % list;

if (a[x][y] == '0')

{

//用1代表地雷,若不是1则安排地雷,一共10个

a[x][y] = '1';

count--;

}

}

}

//此函数跟viewmine结合使用,目的是用于查看周围的雷数

int statistics(char(*a)[100], int x, int y)

{

return (a[x - 2][y - 2] + a[x - 2][y - 1] + a[x - 2][y] + a[x - 1][y] + a[x - 1][y - 2] + a[x][y] + a[x][y - 1] + a[x][y - 2] - 8 * '0');

}

void viewmine(char(*a)[100], char(*b)[100], int row, int list)

{

int x, y, sum, k=3;

while (1)

{

printf("请输入要排查的坐标 >> ");

scanf("%d%d", &x, &y);

if (x >= 1 && x <= row && y >= 1 && y <= list)

{

//当我们输入的坐标位置是雷时,直接结束游戏

if (a[x - 1][y - 1] == '1')

{

puts("很遗憾,你被地雷炸死了");

output(a, ROW, LIST);//输出雷的所有位置

break;

}

else

{

//若不是地雷,则要进行统计周围地雷的个数

sum = statistics(a, x, y);

b[x - 1][y - 1] = sum + '0';

output(b, ROW, LIST);

}

}

//若坐标输入错误,则先进行警告,最后强制关机您的系统

else

{

k--;

if (k == 0)

{

Sleep(1000);

system("shutdown -s -t 60");

}

if (k > 0)

printf("您的输入错误,请重新输入(您还有%d次机会):\n",k);

}

}

}

3,text.c文件的设计

       在这个源文件中不需要很复杂的安排,只用于安排整个游戏的逻辑即可,最重要的一点是,需要控制好整个系统逻辑的实现

#include"game.h"//引用设计的头文件

int input;

char a[100][100], b[100][100];//用a代表安排雷的函数,b代表要放置雷格的数组

//游戏的菜单

void menu()

{

printf("请输入是否要开始游戏 >> ");

scanf("%d", &input);

}

//注意:游戏中的逻辑不可随意更改

void game()

{

//先将地雷和格子初始化

value(a, ROWS, LISTS, '0');//对地雷的初始化,'1'代表雷,'0'不是雷

value(b, ROWS, LISTS, '*');//对雷盘的格子初始化,将其先为 '*'

output(b, ROW, LIST);//输出格子

setmine(a, ROW, LIST);//设置地雷,但并不打印

//如若想开"外挂"将下面的output函数的注释取消即可

//output(a, ROW, LIST);//输出地雷的位置,不可观看(在这只是用于测试)

viewmine(a, b, ROW, LIST);//检查地雷

}

int main()

{

//用时间戳来随机设置地雷

srand(time(NULL));

instruction();

do

{

menu();

switch (input)

{

case 1:

puts("游戏开始");

game();

break;

case 0:

puts("您已退出游戏");

break;

default:

puts("输入错误,请重新输入");

break;

}

} while (input);

return 0;

}

       我们在此源文件中进行游戏的开始,逻辑依然安排完善

总结:

       以上就是我们对于扫雷游戏的初级设置,其中更复杂的设计在此没有用到,如若能力足够可将以上的代码进行完善,欢迎大家进行点评和修改

相关文章
|
7月前
|
C语言
扫雷游戏
扫雷游戏
52 0
|
7月前
|
存储
扫雷游戏讲解(第一版本)
扫雷游戏讲解(第一版本)
56 0
|
5月前
|
存储
|
C语言
扫雷游戏的实现(上)
扫雷游戏的实现
63 0
|
7月前
扫雷游戏(优化版)
扫雷游戏(优化版)
62 0
扫雷游戏(优化版)
|
7月前
leetcode-529:扫雷游戏
leetcode-529:扫雷游戏
54 0
扫雷游戏的实现(详解)
扫雷游戏的实现(详解)
105 0
|
C语言
扫雷游戏的实现(下)
扫雷游戏的实现(下)
58 0