【C语言】C语言实现扫雷游戏带图标——vs2010

阅读: 评论:0

【C语言】C语言实现扫雷游戏带图标——vs2010

【C语言】C语言实现扫雷游戏带图标——vs2010

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--ROWint c = rand() % COL ;//1--COLif(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 所以需要自己找对应的包加进去)

完结

送一句勉励的话,最近很喜欢

我们热爱这个世界时,才真正活在这个世界

加油

本文发布于:2024-01-28 15:34:58,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064273028438.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:语言   图标   游戏
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23