我们经常在电脑上面玩的扫雷游戏,很考验我们的判断能力,但是实现一个扫雷游戏并不是很困难,只要多注意一些细节就好,就可以将一个简单的扫雷游戏写出来!
接下来先介绍扫雷游戏要实现的功能:
首先,要对雷阵进行初始化,在初始化的时候要注意要定义两个数组,一个是让我们扫雷的阵,另外一个就是显示某一个地方的周围的雷的总个数的矩阵,在初始化的时候要注意为了避免传址的问题,我们把它写在主函数里面。
我char[行][关口]; 字符显示(行)(关口); int i=0; int j=0; (我=0;我& lt;行- 1;我+ +) { (j=0;j & lt;关口- 1;j + +) { 我[我][j]=' 0 '; 显示[我][j]=?’; } }
接下来就是电脑在随机布局雷阵的函数,这个函数要用到rand(),,函数,来产生随机值,在雷阵里面随机布雷。
我空虚set_mine (char(行)[关口]) { int数=计数; int x=0; int y=0; 将srand ((unsigned)时间(NULL)); 而(计数) { x=rand () % 9 + 1; y=rand () % 9 + 1; 如果(我的[x] [y]==' 0 ') { 我[x] [y]=' 1 '; 数, } } }
再有就是计算雷的个数的函数,要讲某一个坐标位置的周围8个位置的雷的个数算出来,并且将个数显示出来
我int get_num (char(行)关口,int x, int y) { int数=0; 如果(我的[x - 1] [y - 1)==' 1 ')//左上方 { 数+ +; } 如果(我的[x - 1] [y]==' 1 ')//左边 { 数+ +; } 如果(我的[x - 1] [y + 1)==' 1 ')//左下方 { 数+ +; } 如果(我的[x] [y - 1)==' 1 ')//上方 { 数+ +; } 如果(我的[x] [y + 1)==' 1 ')//下方 { 数+ +; } 如果(我的[x + 1] [y - 1)==' 1 ')//右上方 { 数+ +; } 如果(我的[x + 1] [y]==' 1 ')//右方 { 数+ +; } 如果(我的[x + 1] [y + 1)==' 1 ')//右下方 { 数+ +; } 返回计数; }
将扫雷函数的各个函数都实现了之后,我们来看一下完整的代码
头文件game.h
#定义_CRT_SECURE_NO_WARNINGS 1 # include# include # include # include #定义行11 #定义峡路11号 #定义数10 int菜单();//菜单函数 空白显示(char(行)[关口]); 我智力游戏(char(行)关口,字符显示(行)[关口]);//游戏 我空虚set_mine (char(行)[关口]);//设置雷的位置 我int扫描(char(行)关口,字符显示(行)[关口]);//开始扫雷 我int get_num (char(行)关口,int x, int y);//计算雷的个数
实现函数,game.c
# include“game.h”//菜单函数 int菜单() { printf (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n”); printf (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n”); printf(" * * * * * * * * * * * * *欢迎来到saolei * * * * * * * * * * * * * \ n”); printf (" * * * * * * * * * * * * * 1。打* * * * * * * * * * * * * \ n”); printf (" * * * * * * * * * * * * * 0。出口* * * * * * * * * * * * * \ n”); printf (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n”); printf (" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n”); 返回0; }//设置雷的位置 我空虚set_mine (char(行)[关口]) { int数=计数; int x=0; int y=0; 将srand ((unsigned)时间(NULL)); 而(计数) { x=rand () % 9 + 1; y=rand () % 9 + 1; 如果(我的[x] [y]==' 0 ') { 我[x] [y]=' 1 '; 数, } } }//打印下棋完了显示的界面 空白显示(char(行)[关口]) { int i=0; int j=0; printf (" "); (i=1;我& lt;关口- 1;我+ +) { printf (" % d”,我); } printf (" \ n "); (i=1;我& lt;行- 1;我+ +) { printf (" % d”,我); (j=1;j & lt;关口- 1;j + +) { printf (" % c”,[我][j]); } printf (" \ n "); } }//计算雷的个数 我int get_num (char(行)关口,int x, int y) { int数=0; 如果(我的[x - 1] [y - 1)==' 1 ')//左上方 { 数+ +; } 如果(我的[x - 1] [y]==' 1 ')//左边 { 数+ +; } 如果(我的[x - 1] [y + 1)==' 1 ')//左下方 { 数+ +; } 如果(我的[x] [y - 1)==' 1 ')//上方 { 数+ +; } 如果(我的[x] [y + 1)==' 1 ')//下方 { 数+ +; } 如果(我的[x + 1] [y - 1)==' 1 ')//右上方 { 数+ +; } 如果(我的[x + 1] [y]==' 1 ')//右方 { 数+ +; } 如果(我的[x + 1] [y + 1)==' 1 ')//右下方 { 数+ +; } 返回计数; }//扫雷 我int扫描(char(行)关口,字符显示(行)[关口]) { int数=0; int x=0; int y=0; 而(计数!=((行2)* (cols-2)计数)) { printf(“请输入坐标:\ n”); scanf (“% d % d”, x,, y); 如果(我的[x] [y]==' 1 ') { printf("你踩到雷了! \ n”); 返回0; } 其他的 { int ret=get_num(我的,x, y); 显示[x] [y]=ret + ' 0 ';//set_mine(我); 显示(显示); 数+ +; } } printf("恭喜你赢了! \ n”); 显示(我); 返回0; }//游戏 我智力游戏(char(行)关口,字符显示(行)[关口]) { set_mine(我); 显示(显示);//显示(矿);//可以将雷的位置显示出来 扫描(矿山、显示); 返回0; }C语言实现简易扫雷小游戏