#include "game.h"
IMAGE DeepBackground;//创建最底部背景
IMAGE EachDifficultyBackground[DIFFICULTY];//有DIFFICULTY种各个难度的背景
IMAGE NumberEmptyBlock[8];//八种含数字的空方快
IMAGE DiscoveredEmptyBlock;//探索过的空方快
IMAGE CoveredBlock;//未探索的方块
IMAGE DifficultyMenu[DIFFICULTY][2];//菜单中的难度按键
IMAGE RedMineBlock;//红色的雷
IMAGE BlackMineBlock;//黑色的雷
IMAGE FlagBlock;//标旗
IMAGE SmilingFaceBlock[2];//笑脸
IMAGE HandsomeFaceBlock[2];//帅脸
IMAGE CryingFaceBlock[2];//哭脸
IMAGE BackBlock[2];//返回键
IMAGE ExitBlock[2];//退出游戏
int MenuClickStatus = 0;//0为未点击,1为点击简单难度,2为点击中等难度,以此类推
int smile = 0;//笑脸状态变量,0是第一张,1是第二张
int cry = 0;//哭脸状态变量,0是不用打印,1是第一张,2是第二张
int handsome = 0;//帅脸状态变量,0是不用打印,1是第一张,2是第二张
int back = 0;//返回键状态变量,0为第一张,1为第二张
int exitstatus = 0;
//初始化游戏,加载资源
void GameInitialization()
{
//将最底部背景加载入内存
loadimage(&DeepBackground, "rsc/background/DeepBackground.png");
//名字字符串,方便对路径的文本进行存储
char name[64];//字符数组,用来装载路径
for (int i = 0; i < DIFFICULTY; i++)//加载菜单中的难度按键
{
for (int j = 0; j < 2; j++)
{
sprintf(name, "rsc/menu/%d_Difficulty_%d.png", i + 1, j + 1);//依次将难度按键的路径写入name中
loadimage(&DifficultyMenu[i][j], name);//依次将难度按键加载入内存
}
}
for(int i = 0;i < DIFFICULTY;i++)//对DIFFICULTY种难度背景进行加载
{
sprintf(name, "rsc/background/Difficulty_%d.png",i + 1);//将这几种背景的路径写入name中
loadimage(&EachDifficultyBackground[i], name);//将背景进行加载
}
for (int i = 0; i < 8; i++)//对八种带数字的空方快进行加载
{
sprintf(name,"rsc/block/%d_block.png", i + 1);//将路径写入name中
loadimage(&NumberEmptyBlock[i], name);//加载八种方块
}
loadimage(&CoveredBlock, "rsc/block/covered_block.png");//加载未探索的方块
loadimage(&DiscoveredEmptyBlock, "rsc/block/empty_block.png");//加载探索过的空方块
loadimage(&RedMineBlock, "rsc/block/mine_boom_block.png");//加载红背景的雷
loadimage(&BlackMineBlock, "rsc/block/mine_appear_block.png");//加载黑背景的雷
loadimage(&FlagBlock, "rsc/block/flag_block.png");//加载标旗方块
loadimage(&SmilingFaceBlock[0], "rsc/block/smilingface_block.png");//加载弹起的笑脸方块
loadimage(&SmilingFaceBlock[1], "rsc/block/smilingface_block_down.png");//加载按下的笑脸方块
loadimage(&HandsomeFaceBlock[0], "rsc/block/handsomeface.png");//加载弹起的帅脸方块
loadimage(&HandsomeFaceBlock[1], "rsc/block/handsomeface_down.png");//加载按下的帅脸方块
loadimage(&CryingFaceBlock[0], "rsc/block/cryingface_block.png");//加载弹起的哭脸方块
loadimage(&CryingFaceBlock[1], "rsc/block/cryingface_block_down.png");//加载按下的哭脸方块
loadimage(&BackBlock[0], "rsc/block/back_block.png");//加载返回键
loadimage(&BackBlock[1], "rsc/block/back_block_down.png");//加载返回键
loadimage(&ExitBlock[0], "rsc/menu/exit_up.png");//加载退出游戏键
loadimage(&ExitBlock[1], "rsc/menu/exit_down.png");//加载退出游戏键
initgraph(WIN_WIDTH, WIN_HEIGHT, 0);//初始化窗口
}
//菜单渲染
void MenuPrint()
{
BeginBatchDraw();//开始双缓冲
putimage(0, 0, &DeepBackground);//渲染最底部背景
for(int i = 0;i < DIFFICULTY;i++)//依次渲染难度按键,未按下的状态
{
putimage(600, 90 + i * 100, &DifficultyMenu[i][0]);
}
if(MenuClickStatus)//只要MenuClickStatus不为零就可以进行下面的操作
{
putimage(600, 90 + (MenuClickStatus - 1) * 100, &DifficultyMenu[MenuClickStatus - 1][1]);//通过MenuClickStatus进行渲染对应种类的按下的按键
}
putimage(1100, 90, &ExitBlock[exitstatus]);//渲染退出键
setbkmode(TRANSPARENT);// 设置文字背景为透明
settextcolor(BLACK);// 设置文字颜色
settextstyle(25, 0, _T("黑体"));//设置字体大小和字体
outtextxy(5, 500, _T("鼠标左键可以揭示方块,鼠标右键可以标志小旗,再次右键取消标记"));//字体内容
outtextxy(5, 525, _T("四种模式:"));//字体内容
outtextxy(5, 550, _T("简单模式场地 行9 * 列9 ,有10 个雷"));//字体内容
outtextxy(5, 575, _T("中等模式场地 行16 * 列16 ,有40 个雷"));//字体内容
outtextxy(5, 600, _T("大师模式场地 行16 * 列25 ,有60 个雷"));//字体内容
outtextxy(5, 625, _T("满屏模式场地 行20 * 列44 ,有132个雷"));//字体内容
outtextxy(5, 650, _T("点击小黄脸可以刷新游戏,后者说重新布雷"));//字体内容
outtextxy(5, 675, _T("小黄脸初始是笑脸,变成哭脸就代表失败,变成帅脸就代表胜利"));//字体内容
EndBatchDraw();//结束双缓冲
}
//判断用户点击
void UserClickMenu(int * confirmPtr)
{
ExMessage menuclick;//创建信息变量
int x = 0;//横坐标
int y = 0;//纵坐标
while(1)
{
MenuPrint();//通过循环持续刷新窗口,使得变化可以实时显现
peekmessage(&menuclick);//通过循环进行持续获取信息
if (menuclick.message == WM_LBUTTONDOWN)//左键按下
{
x = menuclick.x;//记录下坐标
y = menuclick.y;
if (menuclick.x < 1000 && menuclick.x > 600 && menuclick.y > 90 && menuclick.y < 180)
{
MenuClickStatus = 1;//点到第一个按钮,刷新状态变量,以便渲染变化后的图片
}
else if (menuclick.x < 1000 && menuclick.x > 600 && menuclick.y > 190 && menuclick.y < 280)
{
MenuClickStatus = 2;//点到第二个按钮,刷新状态变量,以便渲染变化后的图片
}
else if (menuclick.x < 1000 && menuclick.x > 600 && menuclick.y > 290 && menuclick.y < 380)
{
MenuClickStatus = 3;//点到第三个按钮,刷新状态变量,以便渲染变化后的图片
}
else if (menuclick.x < 1000 && menuclick.x > 600 && menuclick.y > 390 && menuclick.y < 480)
{
MenuClickStatus = 4;//点到第四个按钮,刷新状态变量,以便渲染变化后的图片
}
else if (menuclick.x < 1500 && menuclick.x > 1100 && menuclick.y > 90 && menuclick.y < 490)
{
exitstatus = 1;//点到第退出个按钮,刷新状态变量,以便渲染变化后的图片
}
}
if (menuclick.message == WM_LBUTTONUP)//左键抬起
{
exitstatus = 0;//刷新变量,以便渲染抬起的按键的图片
MenuClickStatus = 0;//刷新变量,以便渲染抬起的按键的图片
if (menuclick.x < 1000 && menuclick.x > 600 && menuclick.y > 90 && menuclick.y < 180)
{
if (x < 1000 && x > 600 && y > 90 && y < 180)
{
*confirmPtr = 1;//按下和抬起都是在第一个按钮上,则选则关卡为第一关
break;
}
}
else if (menuclick.x < 1000 && menuclick.x > 600 && menuclick.y > 190 && menuclick.y < 280)
{
if (x < 1000 && x > 600 && y > 190 && y < 280)
{
*confirmPtr = 2;//按下和抬起都是在第二个按钮上,则选则关卡为第二关
break;
}
}
else if (menuclick.x < 1000 && menuclick.x > 600 && menuclick.y > 290 && menuclick.y < 380)
{
if (x < 1000 && x > 600 && y > 290 && y < 380)
{
*confirmPtr = 3;//按下和抬起都是在第三个按钮上,则选则关卡为第三关
break;
}
}
else if (menuclick.x < 1000 && menuclick.x > 600 && menuclick.y > 390 && menuclick.y < 480)
{
if (x < 1000 && x > 600 && y > 390 && y < 480)
{
*confirmPtr = 4;//按下和抬起都是在第四个按钮上,则选则关卡为第四关
break;
}
}
else if (menuclick.x < 1500 && menuclick.x > 1100 && menuclick.y > 90 && menuclick.y < 490)
{
if (x < 1500 && x > 1100 && y > 90 && y < 490)
{
*confirmPtr = 0;//按下和抬起都是在退出按钮上,则退出游戏
break;
}
}
}
}
}
//用来初始化深层数组,difficulty用来传难度,不同难度初始化大小不同
void DeepBoardIntial(int deep[ROW][COL], int row, int col)
{
int i = 0, j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
deep[i][j] = 0;//初始化为0,以便之后填充数字
}
}
}
//用来初始化表面数组,difficulty用来传难度,不同难度初始化大小不同
void FaceBoardIntial(char face[ROW][COL], int row, int col)
{
int i = 0, j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
face[i][j] = '_';//初始化为 _ ,表示未揭示的格子
}
}
}
//随机放置地雷
void RandomMineGenerate(int deep[ROW][COL], int row, int col, int minesnum)
{
int x = 0;
int y = 0;
int i = 0;
srand((unsigned int)time(NULL));//设置随机种子
for (i = 0; i < minesnum; i++)//minesnum雷的个�
没有合适的资源?快使用搜索试试~ 我知道了~
C语言+EasyX图形化界面扫雷
共41个文件
png:36个
exe:2个
cpp:2个
需积分: 0 1 下载量 145 浏览量
2024-01-28
14:16:55
上传
评论
收藏 293KB ZIP 举报
温馨提示
使用EasyX图形化库,基于C语言编写的带有可视图形界面的扫雷程序,压缩包中有源文件,rsc中是源文件图片之类的,还有源代码,以及debug和release版本的可执行程序。
资源推荐
资源详情
资源评论
收起资源包目录
minesweeper.zip (41个子文件)
minesweeper
main.cpp 940B
debug
mine sweeping visual interface.exe 171KB
release
mine sweeping visual interface.exe 60KB
game.h 2KB
rsc
menu
4_Difficulty_2.png 13KB
1_Difficulty_2.png 9KB
exit_up.png 45KB
4_Difficulty_1.png 18KB
2_Difficulty_2.png 11KB
3_Difficulty_2.png 10KB
2_Difficulty_1.png 16KB
1_Difficulty_1.png 14KB
3_Difficulty_1.png 13KB
exit_down.png 23KB
block
mine_appear_block.png 2KB
mine_boom_block.png 2KB
handsomeface_down.png 3KB
empty_block.png 388B
2_block.png 2KB
flag_block.png 1KB
cryingface_block_down.png 3KB
5_block.png 2KB
6_block.png 2KB
4_block.png 2KB
handsomeface.png 2KB
back_block_down.png 953B
3_block.png 2KB
1_block.png 1KB
covered_block.png 1KB
smilingface_block_down.png 2KB
smilingface_block.png 2KB
7_block.png 741B
cryingface_block.png 2KB
back_block.png 2KB
8_block.png 1KB
background
Difficulty_4.png 22KB
Difficulty_3.png 12KB
Difficulty_2.png 8KB
DeepBackground.png 27KB
Difficulty_1.png 3KB
game.cpp 23KB
共 41 条
- 1
资源评论
StewieLee
- 粉丝: 906
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功