博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小游戏——扫雷
阅读量:4117 次
发布时间:2019-05-25

本文共 3635 字,大约阅读时间需要 12 分钟。



实现一个扫雷游戏
1.设置两个数组:mine[ROW][COL]表示布雷,show[ROW][COL]显示扫雷情况(显示周围有几个雷);
因为统计四周,边缘位置不好实现,所以把二维数组的行和列都加二,这样无论是否在边缘都可以当做一种情况来实现。
2.初始化mine和show,show->*,mine->0;
3.setmine布雷,电脑随机设置20个雷;
4.显示游戏面板,在游戏面板上输入坐标;
5.如果有雷,表示输了,游戏结束;无雷继续游戏,这时要统计周围雷的个数,如果有0个雷,就把周围区域置成‘’,直到赢的个数等于ROW*COL-雷的个数,那么就赢了。

//1.game.h#ifndef _GAME_H_#define _GAME_H_#include
#include
#include
#include
#include
//memset的头文件#pragma warning(disable:4996)#define ROW 10#define COL 10#define MINE_NUM 20void menu();//菜单void game(); //玩游戏void setMine(char mine[ROW + 2][COL + 2], int row, int col);//布雷int getMine(char mine[ROW + 2][COL + 2], int row, int col, int x, int y);//统计周围雷的个数void display(char board[ROW + 2][COL + 2], int row, int col);//显示游戏面板(mine和show)#endif

//2.main.c#include"game.h"void menu(){	printf("************************\n");	printf("***********1.play********\n");	printf("*************2.exit******\n");	printf("************************\n");}int main(){	int select = 0;	do	{		menu();		printf("please select:\n");		scanf("%d", &select);		switch (select)		{		case 1:			game();			break;		case 2:			exit(0);	   default:		   printf("error,please Enter Again NO<1/2>\n");		   break;		}		} while (1);//跳出循环;		system("pause");		return 0;}

//3.game,c#include"game.h"生成1-10的随机数://static int getRandomNum(int start, int end)//{//	return(rand() % (end - start + 1) + start);//}//布雷:void setMine(char mine[ROW + 2][COL + 2], int row, int col){	int num = MINE_NUM;	srand((unsigned long)time(NULL));	do{		//int x = getRandomNum(1, ROW);//生成1-10的随机数		//int y = getRandomNum(1, COL);//生成1-10的随机数		int x = rand() % 10;		int y = rand() % 10;		if (mine[x][y] == '0')//有雷		{			mine[x][y] = '1';			num--;		}	} while (num);}//统计该位置周围雷的个数:int getMine(char mine[ROW + 2][COL + 2], int row, int col, int  x, int y){	return ((mine[x - 1][y - 1] - '0')		+ (mine[x - 1][y] - '0')		+ (mine[x - 1][y + 1] - '0')		+ (mine[x][y - 1] - '0')		+ (mine[x][y + 1] - '0')		+ (mine[x + 1][y - 1] - '0')		+ (mine[x + 1][y] - '0')		+ (mine[x + 1][y + 1] - '0'));}//显示mine和showvoid display(char board[ROW + 2][COL + 2], int row, int col){	int i = 1;	int j = 1;	printf("   ");	for (i = 1; i<=COL; i++)//输出每一列	{		printf("%3d", i);//这里输出1-10;	}	printf("\n");	for (i = 0; i <= COL; i++){		printf("---");//输出---;	}	printf("\n");	for (i = 1; i <=ROW; i++)//输出行	{		printf("%2d|", i);		for (j = 1; j <=COL; j++)		{			printf("%2c|", board[i][j]);//这里输出*		}		printf("\n");	}}void game(){	int win = 0;//已排雷个数	char mine[ROW + 2][COL + 2];//布雷	char show[ROW + 2][COL + 2];//扫雷	memset(show, '*', (ROW + 2)*(COL + 2));	memset(mine, '0', (ROW + 2)*(COL + 2));//初始化棋盘;	setMine(mine, ROW + 2, COL + 2);//布雷	do{		system("CLS");//清屏		int x, y;		display(show, ROW + 2, COL + 2);//加2便于统计边缘雷的个数;		printf("please input
:"); scanf("%d%d", &x, &y); if ((x >= 1 && x <= ROW) && (y >= 1 && y <= COL)) { display(show, ROW + 2, COL + 2);//显示雷 if (mine[x][y] == '1')//有雷 { printf("regretly,you lost!\n"); display(mine, ROW + 2, COL + 2);//显示雷 break; } else//无雷,显示雷周围的个数 { int count = getMine(mine, ROW + 2, COL + 2, x, y); show[x][y] = count + '0'; win++; if (count==0) { show[x - 1][y - 1] = show[x - 1][y] = show[x - 1][y + 1] = show[x][y + 1] = show[x + 1][y + 1] = show[x + 1][y] = show[x + 1][y - 1] = show[x][y - 1] = ' '; } if(win == ROW*COL - 20)//赢的次数为80次就赢了。 { printf("congratulations,you won!"); display(mine, ROW + 2, COL + 2); break; } } } else { printf("Enter error,please try again\n"); } } while (1);}

打印结果如下:

你可能感兴趣的文章
python数字逆序输出及多个print输出在同一行
查看>>
ESP8266 WIFI数传 Pixhaw折腾笔记
查看>>
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>
去哪儿一面+平安科技二面+hr面+贝贝一面+二面产品面经
查看>>
element ui 弹窗在IE11中关闭时闪现问题修复
查看>>
vue 遍历对象并动态绑定在下拉列表中
查看>>
Vue动态生成el-checkbox点击无法选中的解决方法
查看>>
python __future__
查看>>
MySQL Tricks1
查看>>
python 变量作用域问题(经典坑)
查看>>
pytorch
查看>>
pytorch(二)
查看>>
pytorch(三)
查看>>
pytorch(四)
查看>>
pytorch(5)
查看>>
pytorch(6)
查看>>
ubuntu相关
查看>>
C++ 调用json
查看>>
nano中设置脚本开机自启动
查看>>