二维数组实战项目--------《扫雷游戏》(上)

简介: 接上期介绍的三子棋游戏,今天给大家介绍与其相似的扫雷游戏!(源码在文章末尾)

一  . 游戏开发框架


  • 建立游戏菜单
  • 建立扫雷的棋盘
  • 初始化棋盘
  • 布置雷
  • 排雷(判断是否踩雷)
  • 游戏结束


二 . 游戏开发及细节详解


1.建立游戏菜单


首先,我们需要创建一个项目,添加一个头文件和两个源文件

27b1a5b382444da29cec90dc010d3352.png

5609cb2c73f34746a10d767073687556.png

test.c------------------------用于游戏的主体框架设计和扫雷游戏的逻辑测试

game.h----------------------用于相应函数的声明

game.c----------------------用于游戏函数的实现


游戏菜单的打印实现,上期分享的三子棋游戏已经声明过了,直接套用上次的代码就好了,代码块如下:

voidmenu() {
printf("-------------------------\n");
printf("---------1.paly----------\n");
printf("---------0.exit----------\n");
printf("-------------------------\n");
}
voidgame() {
printf("开始游戏\n");
}
intmain() {
intinput=0;
do {
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
        {
case1:
game();
break;
case0:
printf("退出游戏:\n");
break;
default:
printf("选择错误,重新选择:\n");
break;
        }
    } while (input);
return0;
}

实现如下:

14dcc36cc8f64eaa83f4a7d420265105.gif

到这里,准备工作的游戏菜单打印部分就完成了。


2.建立扫雷的棋盘


关于游戏的规则这里就不多介绍了,参考下面的链接:https://jingyan.baidu.com/article/7f766daf9231e84101e1d03d.html

7c2501737ff343ed8516ed0c5ac9530d.png

关于棋盘的打印,我们需要二维数组来定义,但是为了防止数组越界问题,我们适当扩大数组的大小,在定义棋盘的时候有雷的地方用 ‘ 1 ’表示,没有雷的地方用  ‘ 0 ’表示;

7c2501737ff343ed8516ed0c5ac9530d.png

接下来要考虑扫雷的细节问题:

0c3b9e438be243868c5a465713a52abe.png


创建一个mine数组和一个show数组:

45cc140efd0948f5bbde8cfac29e35b6.png


game.h

#pragma once#include <stdio.h>#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2

test.c

//设计2个数组存放信息charmine[ROWS][COLS] = { 0 };
charshow[ROWS][COLS] = { 0 };

两个数组已经创建好了,接下来我们要初始化棋盘并打印棋盘


3.初始化棋盘


mine数组初始化用 ‘ 0 ’表示

show数组初始化用 ‘ * ’表示


test.c

voidgame() {
//设计2个数组存放信息charmine[ROWS][COLS] = { 0 };
charshow[ROWS][COLS] = { 0 };
//初始化棋盘init_board(mine, ROWS, COLS,'0');
init_board(show, ROWS, COLS,'*');
//打印棋盘display_board(mine, ROW, COL);
display_board(show, ROW, COL);
}

game.c

voidinit_board(charboard[ROWS][COLS], introws, intcols, charset) {
inti=0;
intj=0;
for (i=0; i<rows; i++) {
for (j=0; j<cols; j++) {
board[i][j] =set;
        }
    }
}
voiddisplay_board(charboard[ROWS][COLS], introw, intcol) {
inti=0;
intj=0;
for (i=1; i<=row; i++) {
for (j=1; j<=col; j++) {
printf("%c ", board[i][j]);
        }
printf("\n");
    }
}

game.h

//初期化棋盘voidinit_board(charboard[ROWS][COLS], introws, intcols,charset);
//打印棋盘voiddisplay_board(charboard[ROWS][COLS], introw, intcol);

棋盘的打印如下:

6938e1e9dc6e4eb29829244ba7959f87.png

 由上图可以看到,打印的棋盘对玩家不太友好,我们可以在棋盘上面加上行列标号,以便于玩家在进行游戏的时候输入坐标,只需改变game.c的代码即可:

voiddisplay_board(charboard[ROWS][COLS], introw, intcol) {
inti=0;
intj=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");
    }
}

实现如下:

0d74f6fa44e6489c8bf00c805ef26a76.png

目录
相关文章
|
7月前
|
存储 C语言
数组和函数实践:扫雷游戏玩法和棋盘初始化(1)
数组和函数实践:扫雷游戏玩法和棋盘初始化(1)
|
7月前
|
C语言
C语言之详解数组【附三子棋和扫雷游戏实战】(二)
C语言之详解数组【附三子棋和扫雷游戏实战】(二)
|
2月前
|
存储 编译器 C语言
【C语言篇】数组和函数的实践:扫雷游戏(附源码)
【C语言篇】数组和函数的实践:扫雷游戏(附源码)
41 0
|
7月前
|
C语言
C语言初阶⑤(数组)扫雷游戏(分步实现+效果图)
C语言初阶⑤(数组)扫雷游戏(分步实现+效果图)
43 1
|
7月前
|
存储
数组和函数实践:扫雷游戏
数组和函数实践:扫雷游戏
|
Serverless C语言
C项目(扫雷)
C项目(扫雷)
85 0
|
7月前
|
存储 编译器 C语言
C语言之详解数组【附三子棋和扫雷游戏实战】(一)
C语言之详解数组【附三子棋和扫雷游戏实战】(一)
小白的第二个项目--扫雷游戏
小白的第二个项目--扫雷游戏
95 0