C语言实现扫雷游戏带图标——vs2010
2020-07-31 11:59
555 查看
C语言实现扫雷——vs2010
- 绘制函数 打印二维数组中所有元素
- 函数进行初始化
- 布雷
- 遍历不为雷的元素
- 利用九宫格遍历周边元素
- 填充图片
- 判断游戏成功与失败
- 用switch case实现鼠标左右键功能
- 实现空白辅助区
- 简单的加密
- 扫雷游戏图标
- 走过的坑
- 完结
绘制函数 打印二维数组中所有元素
利用二维数组打印出10行10列的所有数字
#include <stdio.h> #define ROW 10//行 #define COL 10//列 int map[ROW][COL];//打印行和列 void DrawMap(){ int i,j; for( i = 1;i < ROW; i++){ for( j = 1;j < COL; j++) printf("%2d ",map[i][j]); } printf("\n"); } int main(){ DrawMap(); return 0; }
函数进行初始化
当完成游戏时,想要再一次重新玩游戏,则需要对所有的赋值为0
void GameInit(){ for( i = 0;i < ROW; i++){ for( j = 0;j < COL; j++){ map[i][j] = 0; } } }
布雷
(1)用-1表示雷 ,共有NUM个雷
#define NUM 10//雷
(2)利用随机数得到行和列 进行布雷
#include <stdlib.h> #include <time.h> void GameInit() { srand((unsigned int)time(NULL)); } int n= 0; while(n < NUM) int r = rand() % ROW;//1--ROW int c = rand() % COL ;//1--COL if(map[r][c]==0){//排除行和列重复布雷 map[r][c] = -1; n++; }
遍历不为雷的元素
for(i = 0;i < ROW; i++){ for(j = 0;j<COL;j++){//遍历不为雷的元素 if(map[i][j]!= -1){//找到不为雷的元素 for( m = i -1; m<=i+1; m++){//九宫格得出行和列 for( n = j - 1; n<=j+1; n++) if(map[m][n] == -1)//找到不为雷的元素{ map[i][j]++;} } } } }
利用九宫格遍历周边元素
(1)把10行10列放大为12行12列,在利用九宫格遍历周边元素,则把所有的行和列都加2
for( i = 1;i < ROW+2; i++){ for(j = 1;j < COL+2;j++){ } }
(2)让周边的行和列作为辅助区,用来辅助九宫格,中间的10行10列作为游戏区进行游戏,则随机的得的行和列都要加1
int r = rand() % ROW+1;//1-ROW int c = rand() % COL+1 ;//1-COL
填充图片
根据元素填入图片
#include <graphics.h>//处理图片的图文件 #define SIZE 50//定义图片的长度 IMAGE img[12];//图片 int map[ROW+2][COL+2];//不为雷的元素 //绘制函数 打印图片 void DrawMap(){ for( int i = 1;i < ROW; i++){ for( j = 1;j < COL; j++){ printf("%2d ",map[i][j]); /****************** 元素 图片 -1 img[9] 0-8 数字 19-28 img[10] >30 img[11] ******************/ if(map[i][j]== -1){ putimage((i-1)*SIZE,(j-1)*SIZE,&img[9]);//当数字为-1放img[9]的雷图片 } else if(map[i][j]>=0&&map[i][j]<= 8){ putimage((i-1)*SIZE,(j-1)*SIZE,&img[map[i][j]]);//打印数字图片 } else if (map[i][j]>=19&&map[i][j]<28){ putimage((i-1)*SIZE,(j-1)*SIZE,&img[10]);//打印空白 } else if(map[i][j]>30){ putimage((i-1)*SIZE,(j-1)*SIZE,&img[11]);//小红旗标记图片 } } printf("\n"); } } int main(){ HWND hwnd = initgraph(ROW*SIZE,COL*SIZE,SHOWCONSOLE);//窗口 size的大小 显示在控制台 loadimage(&img[0],L"0.jpg",SIZE,SIZE);//加载数字为0的图片,图片名称为0.jpg 大小为SIZE乘SIZE loadimage(&img[1],L"1.jpg",SIZE,SIZE); loadimage(&img[2],L"2.jpg",SIZE,SIZE); loadimage(&img[3],L"3.jpg",SIZE,SIZE); loadimage(&img[4],L"4.jpg",SIZE,SIZE); loadimage(&img[5],L"5.jpg",SIZE,SIZE); loadimage(&img[6],L"6.jpg",SIZE,SIZE); loadimage(&img[7],L"7.jpg",SIZE,SIZE); loadimage(&img[8],L"8.jpg",SIZE,SIZE); loadimage(&img[9],L"9.jpg",SIZE,SIZE);//雷 loadimage(&img[10],L"10.jpg",SIZE,SIZE);//空白 loadimage(&img[11],L"11.jpg",SIZE,SIZE);//标记 GameInit(); DrawMap(); return 0 }
判断游戏成功与失败
int count = 0;//点开的个数 while(1){ DrawMap(); if(PlayGame()== -1){ DrawMap(); MessageBox(hwnd,L"Gameover!",L"",MB_OK);//当为雷则宣布Gameover! break; } if(ROW*COL - NUM == count){//行数乘以列数减去雷的数量等于点开的个数 DrawMap(); MessageBox(hwnd,L"success!",L"",MB_OK);//宣布游戏成功 break; } }
用switch case实现鼠标左右键功能
int PlayGame(){ //定义鼠标初始化为零 MOUSEMSG msg = { 0 }; int r,c; while(1){ msg = GetMouseMsg(); switch(msg.uMsg){ case WM_LBUTTONDOWN:// 左键 翻开扫雷 空白图片 r = msg.x / SIZE + 1; c = msg.y / SIZE + 1;//点击翻开的位置 if(map[r][c] >= 19 && map[r][c] <= 28){ if (map[r][c] == 20){ OpenZero(r,c);//调用打开空白区,下面实现空白辅助区 } else{ map[r][c] -= 20; count++; } } return map[r][c]; break; case WM_RBUTTONDOWN:// 右键 标记一个空白图片 取消一个标记图片 r = msg.x / SIZE + 1; c = msg.y / SIZE + 1; if(map[r][c] >= 19 && map[r][c] <= 28){ map[r][c] += 50; } else if(map[r][c] > 30){ map[r][c] -= 50; } } return map[r][c]; break;
实现空白辅助区
void OpenZero(int r,int c ){ map[r][c] -= 20; count++; //0为辅助区均为零 for(int m = r -1;m<= r +1;m++){ for(int n = c-1;n<= c +1;n++){ if(m>=1&&m<=ROW&&n>=1&&n<=COL){//游戏 if(map[m][n]>= 19&&map[m][n]<= 28){ if(map[m][n]!= 20){ map[m][n] -= 20; count++; } else{ OpenZero(m,n); }}}}} }
简单的加密
for(i = 1;i < ROW + 1; i++){ for(j = 1;j< COL + 1;j++){ map[i][j] += 20; } }
扫雷游戏图标
注: 当加入图片的时候,需要从项目打开——点击右键——从windows打开所在文件——填入图片即可
数字0(自己修的 )
数字1
数字2
数字3
数字4
数字5
数字6 (自己修的 太丑 略)
数字7
雷:
小红旗标记
走过的坑
图片要求
1, 图片的大小规格一样:可为256 乘以256
2,图片需要为jpg类型用不了png类型
#include <graphics.h>
直接下载的vs2010版本,并不自带#include <graphics.h>文件
需要自己在网上找 加入对应的包(只有exe版只能导入md 所以需要自己找对应的包加进去)
完结
送一句勉励的话,最近很喜欢
我们热爱这个世界时,才真正活在这个世界
加油
相关文章推荐
- 扫雷游戏(C语言实现)
- C语言实现扫雷游戏算法
- 用 C语言 实现扫雷游戏
- 一步一步实现扫雷游戏(C语言实现)(四)
- 用C语言实现扫雷游戏(三)
- C语言编程实现扫雷游戏
- 基于C语言实现的扫雷游戏代码
- C语言实现经典游戏——扫雷!
- 一步一步实现扫雷游戏(C语言实现)(一)
- 一步一步实现扫雷游戏(C语言实现)(二)
- 用C语言实现扫雷游戏(一)
- 简易小游戏扫雷——C语言编程实现
- 扫雷游戏的C语言实现
- C语言+二维数组+非递归实现扫雷游戏(代码贴过来后无缩进,尽请谅解,工程完成度:85%)
- 用C语言实现扫雷游戏
- C语言模拟实现简单扫雷游戏
- C语言实现扫雷游戏
- 扫雷游戏的实现过程(C语言)
- C语言实现扫雷游戏详解!
- 【C语言】简易扫雷游戏——C语言实现