前言
提示:相信大家小时候都玩过扫雷游戏,对扫雷游戏的规则应该也有一定得了解,在本文中,我们将使用C语言去实现扫雷游戏的制作,希望大家都有所收获。
提示:以下是本篇文章正文内容,下面案例可供参考
一、编辑这个小游戏的几个步骤
1、定义两个二维数组作为地图,一个是用来给玩家看的的地图用 showMap表示,另一个是用来储存地雷的地图用mineMap表示 2、初始化地图,对于showMap用’ * ‘来初始化;对于mineMap用 ’ 1 ‘表示有地雷,用’ 0 ‘表示没地雷,并随机生成十个位置为地雷 3、打印showMap 4、玩家输入要翻开地图的坐标 5、判断输入坐标的合法性 6、判断是否踩雷 7、更新地图 8、判断输赢
二、各个步骤具体实现代码
1.定义两个二维数组作为地图
代码如下:
char showMap[MAX_ROW][MAX_COL] = { 0 };
char mineMap[MAX_ROW][MAX_COL] = { 0 };
2.初始化地图
代码如下:
void init(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][MAX_COL]) {
memset(showMap, '*', MAX_ROW * MAX_COL);
memset(mineMap, '0', MAX_ROW * MAX_COL);
srand((unsigned int)time(0));
int count = 0;
while (count<10) {
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (mineMap[row][col] == '1') {
continue;
}
mineMap[row][col] = '1';
count++;
}
}
3.打印showMap
代码如下:
void printMap(char Map[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
printf("%c", Map[row][col]);
}
printf("\n");
}
}
4.玩家输入要翻开地图的坐标
代码如下:
int row;
int col;
int updatecount = 0;
printf("请输入要打开的地图坐标(row,col)\n");
scanf("%d %d", &row, &col);
5.判断输入坐标的合法性
代码如下:
if (row<0 || row>MAX_ROW || col<0 || row>MAX_COL){
printf("输入的坐标有误,请重新输入!\n");
continue;
}
if (showMap[row][col] != '*') {
printf("该位置已经被翻开,请重新输入!\n");
continue;
}
6.判断是否踩雷
代码如下:
if (mineMap[row][col] == '1') {
printf("抱歉您踩到地雷了,游戏结束!\n");
break;
}
7.更新地图
代码如下:
void undateMap(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][MAX_COL],
int row,int col) {
int count = 0;
for (int r = row-1; r <=row + 1; r++) {
for (int c = col-1; c <=col + 1; c++) {
if (r == row && c == col) {
continue;
}
if (r<0 || r>MAX_ROW || c<0 || c>MAX_COL) {
continue;
}
if (mineMap[r][c] == '1') {
count++;
}
}
}
showMap[row][col] = '0' + count;
}
6.判断输赢
代码如下:
if (updatecount == MAX_ROW * MAX_COL - 10) {
printf("游戏胜利!恭喜你!");
}
三、扫雷游戏的总代码
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define MAX_ROW 9
#define MAX_COL 9
void init(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][MAX_COL]) {
memset(showMap, '*', MAX_ROW * MAX_COL);
memset(mineMap, '0', MAX_ROW * MAX_COL);
srand((unsigned int)time(0));
int count = 0;
while (count<10) {
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (mineMap[row][col] == '1') {
continue;
}
mineMap[row][col] = '1';
count++;
}
}
void printMap(char Map[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
printf("%c", Map[row][col]);
}
printf("\n");
}
}
void undateMap(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][MAX_COL],
int row,int col) {
int count = 0;
for (int r = row-1; r <=row + 1; r++) {
for (int c = col-1; c <=col + 1; c++) {
if (r == row && c == col) {
continue;
}
if (r<0 || r>MAX_ROW || c<0 || c>MAX_COL) {
continue;
}
if (mineMap[r][c] == '1') {
count++;
}
}
}
showMap[row][col] = '0' + count;
}
int main() {
char showMap[MAX_ROW][MAX_COL] = { 0 };
char mineMap[MAX_ROW][MAX_COL] = { 0 };
init(showMap, mineMap);
printMap(showMap);
while (1) {
int row;
int col;
int updatecount = 0;
printf("请输入要打开的地图坐标(row,col)\n");
scanf("%d %d", &row, &col);
if (row<0 || row>MAX_ROW || col<0 || row>MAX_COL){
printf("输入的坐标有误,请重新输入!\n");
continue;
}
if (showMap[row][col] != '*') {
printf("该位置已经被翻开,请重新输入!\n");
continue;
}
undateMap(showMap, mineMap,row,col);
updatecount++;
printMap(showMap);
if (mineMap[row][col] == '1') {
printf("抱歉您踩到地雷了,游戏结束!\n");
break;
}
if (updatecount == MAX_ROW * MAX_COL - 10) {
printf("游戏胜利!恭喜你!");
}
}
}
四、总结
本文主要利用C语言对大家喜闻乐见的小游戏扫雷游戏进行了简单实现,希望大家可以通过本文对C语言的学习产生兴趣,如有问题请私信联系。
|