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
版权声明:本文标题:探索Flash中心的宝藏——制作扫雷游戏的进阶攻略 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1772489754a3556516.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论