作者:艹尛鱈_695 | 来源:互联网 | 2023-10-10 17:45
原标题:怎样用C语言实现一个扫雷的游戏?
扫雷游戏-C语言
扫雷游戏和我上面写的三子棋游戏的框架有类似,对与这种像对于来说比较复杂一点的代码.我们就应该应用同样的思路,先构建好一个框架,理清自己的思路,然后再编写代码
思路:
1.首先,对于扫雷游戏,我们应该创建两个二维数组,一个是给玩家看到的,另一个应该是含有雷到底在哪里的一个二维数组,只有一个是完全不够的.
2.把玩家能看到的那张表打印出来
3.让玩家输入要下的坐标,并且对其要进行校验
4.判断是否有地雷,有则游戏直接结束
5.如果没有错误,则将周围手雷的数目打在屏幕上
6.判断输赢,看翻开格子的数量如果是71=9*9-10
7.如果翻开的格子数为71,则游戏结束,玩家胜利
思路一样,主要就是根据自己列出的思路去合理的写出代码,就好啦
如下面例题:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_COL 9
#define MAX_ROW 9
#define DEFAULT_MINE_COUNT 10
int menu(){
printf("\n\n=======================\n");
printf("1.开始游戏\n");
printf("2.结束游戏\n");
printf("=======================\n");
printf("请输入序号:");
int choice = 0;
scanf("%d",&choice);
return choice;
}
void init(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][文章来源地址34179.htmlMAX_COL]){
for (int row = 0; row < MAX_ROW; row++){
for (int col = 0; col < MAX_COL; col++){
showMap[row][col] = '*';
}
}
for (int row = 0; row <MAX_ROW; row++){
for (int col = 0; col <MAX_COL; col++){
mineMap[row][col] = '0';
}
}
int n = DEFAULT_MINE_COUNT;
while(n > 0){
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if文章来源地址34179.html (mineMap[row][col] == '1'){ www.yii666.com
continue;
}
mineMap[row][col] = '1';
n--;
}
}
void printMap(char theMap[MAX_ROW][MAX_COL]){
printf("1 2 3 4 5 6 7 8 9\n");
printf("-----------------\n");
for (int row = 0; row < MAX_ROW; row++){
for (int col = 0; col < MAX_COL; col++){
printf文章来源站点https://www.yii666.com/("%c ",theMap[row][col]);
}
printf("\n");
}
printf("-----------------\n");
}
void updateShowMap(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 < 0 || r >= MAX_ROW || c < 0 || c >= MAX_COL){
continue;
}
if (mineMap[r][c] == '1'){
count++;
}
}
}
showMap[row][col] = count + '0';
}
void game(){
char showMap[MAX_ROW][MAX_COL] = { 0 };
char mineMap[MAX_ROW][MAX_COL] = { 0 };
init(showMap, mineMap);
int openedBlockCount = 0;
while (1){
printMap(showMap);
int row = 0;
int col = 0;
printf("请输入你要翻开的坐标(row,col):");
scanf("%d %d",&row, &col);
if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL){
printf("您输入的坐标有误!\n");
continue;
}
if (showMap[row][col] != '*'){
printf("当前位置已经被翻开!\n");
continue;
}
if (mineMap[row][col] == '1'){
printf("Game over!\n");
printMap(mineMap);
break;
}
updateShowMap( showMap, mineMap, row, col);
openedBlockCount++;
if (openedBlockCount == MAX_ROW*MAX_COL - DEFAULT_MINE_COUNT){
printf("游戏胜利了!;");
printMap(mineMap);
break;
}
}
}
int main(){
while (1){
int choice = menu();
if (choice == 1){
game();
}else if (choice == 0){
printf("Goodbye!");
break;
}else{
printf("您的输入有误");
}
}
system("pause");
return 0;
}
写这个代码的时候还是要小心,要细心,尤其是在row<=MAX_ROW这一部分的时候,一定要细心,早上我也调试了好久,就是因为多加了等于号,累了大半天.还是要多敲代码 ,gai油!
来源于:怎样用C语言实现一个扫雷的游戏?