admin 管理员组

文章数量: 1184232

整理一下以前学习时找到的程序。

一、游戏框架

2、游戏流程
对应数字

作用:012345678	雷	加密	标记
操作:012345678-1+-20+-30
结果:012345678-119-28>30

生成地图时,把所有图片代表的数字进行加密(即 +20),左键点击翻开进行解密(即 -20),这时候就需要判断点开结果;标记和取消标记同理(即在加密的结果下 ±30)

二、游戏代码及素材(链接在最后)

程序需要用到 <graphics.h>,需要安装 EasyX,下载直接安装即可。
网址:

/*
	文件名称:源.cpp
	文件描述:实现扫雷游戏
	编译环境:vs2017
*/#include<stdio.h>#include<time.h>#include<stdlib.h>#include<graphics.h>#pragma comment(lib,"winmm.lib")#define ROW 10		//行数#define COL	10		//列数#define NUM 10		//雷的个数#define SIZE 50		//一张图片的大小int map[ROW+2][COL+2];//范围扩大	//全局变量自动初始化为0
IMAGE  img[12];//0-8  雷 标记 加密int win;
HWND hwnd;//游戏初始化voidGameInit(){//初始化窗口initgraph(ROW *50, COL *50);//ROW COL//加载图片loadimage(&img[0], L"./res/0.jpg", SIZE, SIZE);loadimage(&img[1], L"./res/1.jpg", SIZE, SIZE);loadimage(&img[2], L"./res/2.jpg", SIZE, SIZE);loadimage(&img[3], L"./res/3.jpg", SIZE, SIZE);loadimage(&img[4], L"./res/4.jpg", SIZE, SIZE);loadimage(&img[5], L"./res/5.jpg", SIZE, SIZE);loadimage(&img[6], L"./res/6.jpg", SIZE, SIZE);loadimage(&img[7], L"./res/7.jpg", SIZE, SIZE);loadimage(&img[8], L"./res/8.jpg", SIZE, SIZE);//0-8loadimage(&img[9], L"./res/9.jpg", SIZE, SIZE);//雷loadimage(&img[10], L"./res/10.jpg", SIZE, SIZE);//加密loadimage(&img[11], L"./res/11.jpg", SIZE, SIZE);//标记//声音 路径:./res/music.mp3(这是相对路径,可以改为绝对路径)//mciSendString(L"open ./res/music.mp3 alias BGM", 0, 0, 0);//mciSendString(L"play BGM",0, 0, 0);//随机数种子srand((unsignedint)time(NULL));//初始化数组为0for(int i =0; i < ROW+2; i++){for(int j =0; j < COL+2; j++){
			map[i][j]=0;}}//随机放置一些雷,-1代表雷 多少个雷for(int i =0; i < NUM;)//10次{//rand()&50		//0-49//rand()%10		//0-9int r =rand()% ROW +1;//随机得到行	//1-10int c =rand()% COL +1;//随机得到列	//1-10//可能重复得不到十个if(map[r][c]==0)//0{
			map[r][c]=-1;
			i++;}}//遍历所有数组的元素//根据雷的分布 填充数组数据 辅助区for(int i =1; i <= ROW; i++){for(int j =1; j <= COL; j++){//遍历九宫格if(map[i][j]!=-1){for(int m = i -1; m <= i +1; m++){for(int n = j -1; n <= j +1; n++){//视频 源码 素材if(map[m][n]==-1)
							map[i][j]++;}}}}}//先给数组加密for(int i =1; i <= ROW; i++){for(int j =1; j <= COL; j++){
			map[i][j]+=20;}}
	win =0;//点开一个格子 win+1 ROW*COL(格子总数)-win点开的=雷的数量
	hwnd =GetHWnd();}//游戏的绘制voidGameDraw(){/*
		0	1	2	3	4	5	6	7	8	-1	+-20	+-30
		0	1	2	3	4	5	6	7	8	雷	加密	标记
		0	1	2	3	4	5	6	7	8	-1	19-28	>30
	*///打印数组	贴图for(int i =1; i <= ROW; i++){for(int j =1; j <= COL; j++){//printf("%3d", map[i][j]);if(map[i][j]>=0&& map[i][j]<=8)//0-8putimage((i -1)*SIZE,(j -1)*SIZE,&img[map[i][j]]);elseif(map[i][j]==-1)putimage((i -1)*SIZE,(j -1)*SIZE,&img[9]);//雷elseif(map[i][j]>=19&& map[i][j]<=28)putimage((i -1)*SIZE,(j -1)*SIZE,&img[10]);//加密elseif(map[i][j]>=30)putimage((i -1)*SIZE,(j -1)*SIZE,&img[11]);//标记}}}intPlayGame()//int 返回值	判断点到雷{
	MOUSEMSG msg ={0};int n;while(1){
		msg =GetMouseMsg();//msg接受鼠标信息switch(msg.uMsg){case WM_LBUTTONDOWN://左键	翻牌
			n = map[msg.x / SIZE +1][msg.y / SIZE +1];//19-28if(n >=19&& n <=28)//翻开{
				map[msg.x / SIZE +1][msg.y / SIZE +1]-=20;
				win++;}return map[msg.x / SIZE +1][msg.y / SIZE +1];break;case WM_RBUTTONDOWN://右键	标记
			n = map[msg.x / SIZE +1][msg.y / SIZE +1];if(n >=19&& n <=28){
				map[msg.x / SIZE +1][msg.y / SIZE +1]+=30;}if(n >=30){
				map[msg.x / SIZE +1][msg.y / SIZE +1]-=30;}return map[msg.x / SIZE +1][msg.y / SIZE +1];break;}}}//主函数intmain(){while(1){GameInit();while(1){GameDraw();//输了if(PlayGame()==-1){GameDraw();MessageBox(hwnd, L"你输了!", L"", MB_OK);break;}//赢了if(ROW*COL - win == NUM){MessageBox(hwnd, L"太棒了!", L"", MB_OK);break;}}if(MessageBox(hwnd, L"再来一局??", L"", MB_RETRYCANCEL)== IDCANCEL)break;}return0;}

三、游戏界面

四、百度网盘

本人用 VS 创建的文件,生成的项目很繁杂,可以看下结构,提取其中的源代码和素材即可。

链接:
提取码:prgf

本文标签: 加密 路径 编程