万网如何上传网站,学做网站可以赚钱吗,中山外贸网站建设公司,网站在哪里购买目录
前言
一 游戏初始化界面的分析
二 游戏的大概框架
三 显示界面的开发
四 完整代码
总结 我们可以来看看游戏初始界面是什么样的 勇士游戏样例 前言
这里是开发游戏的初始界面 一 游戏初始化界面的分析 我们需要一个背景图#xff0c;开始游戏图标#xff0…
目录
前言
一 游戏初始化界面的分析
二 游戏的大概框架
三 显示界面的开发
四 完整代码
总结 我们可以来看看游戏初始界面是什么样的 勇士游戏样例 前言
这里是开发游戏的初始界面 一 游戏初始化界面的分析 我们需要一个背景图开始游戏图标显示图标 首先我们先需要收集资源如背景游戏开始图标显示的图标 有人问为什么一个背景是白的留一个图标一个是黑的图标是白的这个黑白的是掩码图使用来我们实现透明效果的就是在窗口只显示图标而不显示图片的背景增加美观至于掩码图怎么弄我这里推一个视频运用ps一下就可以做出来 【PS学习】Easyx 掩码图 \反白图 \黑白贴图 \透明贴图 制作_哔哩哔哩_bilibili 二 游戏的大概框架 #define _CRT_SECURE_NO_WARNINGS 1#includetool.h
#includeattribute.h
int main() {initgraph(WIN_LONG, WIN_WIDTH);welcome();loading();runwrold();loading();while (1) {int level mapmain();if (level 1) {loading();level1main();}mciSendString(stop ./image\\begingame.mp3 , 0, 0, 0);mciSendString(close ./image\\begingame.mpload.mp33 , 0, 0, 0);loading();runwrold();}
} 这个是游戏的框架这篇文章就是实现welcome() welcome()函数框架 1 图片的初始化 2 图片的放置 3 鼠标的是否触碰显示图标 4 鼠标是否点击 三 显示界面的开发 首先我们进入游戏的时候是需要播放音乐的 char image[60];
mciSendString(open ./image\\begingame.mp3, 0, 0, 0);
mciSendString(play ./image\\begingame.mp3 repeat, 0, 0, 0); 上面那个数组是用来放置图片的我们来看下面那个 第二句分析 MCIERROR mciSend(
String LPCTSTR lpszCommand, // 指向命令字符串的指针LPTSTR lpszReturnString, // 指向返回字符串的缓冲区指针UINT cchReturn, // 返回字符串缓冲区的大小HANDLE hwndCallback // 回调窗口句柄
); lpszCommand 这是第一个参数是一个指向命令字符串的指针。它包含了你希望执行的 MCI 命令例如 play MySound 或 stop MySound lpszReturnString 这是第二个参数是一个指向返回字符串的指针。如果命令执行成功MCI 会将一些返回信息存储在这个缓冲区中。如果不需要返回信息可以传入 NULL cchReturn 这是第三个参数表示返回字符串缓冲区的大小以字符为单位。如果第二个参数是 NULL这个参数也应该是 0 hwndCallback 这是第四个参数是一个窗口句柄用于接收 MCI 命令执行过程中的通知消息。如果回调不需要通知可以传入 NULL 或 0 综上所述第一个就是用于执行命令的 第二个是用于把一些信息返回到缓冲区的 第三个是返回字符串缓冲区的 第四个就是窗口和你内部代码的互动的 当然我们现在这部游戏没有如此的复杂所以我们只需要掌握第一个形参即可我们来分析如何书写 open ./image\\begingame.mp3 对于这个执行命令的输入格式是这样的 command [device] [parameters] command表示要执行的操作例如 play、stop、open、close 等。 device可以是设备别名alias或设备类型如 waveaudio。 parameters是命令的附加参数例如文件路径、播放选项等。 所以第一个是open是打开意思然后后面是你的文件路径这个文件路径很简单就是你文件放置在哪里中间这个就是你取得别名这个一般是不需要写的但是如果你要写的话就类似于这个前面加一个alias就好了这个设备类型得话我们这里选的是文件路径的话就不需要管这个设备类型 mciSendString(open \./image\\begingame.mp3\ alias MySound, NULL, 0, NULL);mciSendString(play MySound, NULL, 0, NULL); // 播放
mciSendString(stop MySound, NULL, 0, NULL); // 停止
mciSendString(close MySound, NULL, 0, NULL); // 关闭 然后就是加载图片了 //begin game picture
sprintf(image, ./image\\gamebegin.jpg);
loadimage(gamebegin, image, 1150, 600);sprintf(image, ./image\\beginback.jpg);
loadimage(keyback, image, 260, 260);sprintf(image, ./image\\begin.jpg);
loadimage(key, image, 260, 260);
updateBg();//button control
sprintf(image, ./image\\fight.jpg);
loadimage(fight, image);sprintf(image, ./image\\fight1back.jpg);
loadimage(fightback, image); 这个十分的简单哈看过我天天酷跑开发的肯定知道怎么写了 首先就是用sprintf来把这个文件名字存入到这个里面然后再把这个文件运用loadimage加载到我们前面定义的IMAGE变量里面 IMAGE gamebegin;
IMAGE keyback;
IMAGE key;
IMAGE fightback;
IMAGE fight; 然后就是加载图片了 void updateBg() {BeginBatchDraw();putimage(0, 0, gamebegin);putimage(WIN_LONG / 2 - 500, WIN_WIDTH / 2 40, keyback, NOTSRCERASE);putimage(WIN_LONG / 2 - 500, WIN_WIDTH / 2 40, key, SRCINVERT);EndBatchDraw();
} 这里就是把这个背景和图标显示到这个界面里面来 首先把这个背景写进来然后就是开始游戏的图标了 然后就是透明图的制作这里运用了颜色的反转我们不需要深入研究深入研究也学不到什么只要记住这么写就好了前面放白底由图标的图后面放黑底无图标的图 前面两个就是x和y的坐标了 这个begin和end就是把这三个图全部加载到缓冲区之后再加载出来的意思 判断是否由触碰 bool isMouseOnButton(int mouseX, int mouseY) {return (mouseX BUTTON_X55 mouseX BUTTON_X210 mouseY BUTTON_Y40 mouseY BUTTON_Y150 );
} 我们来分析这个函数这个就是传入你的鼠标的X和Y然后进行判断这个return如果是真就是0是假就是1我们可以根据这个来进行判断是否触碰这个后面所相加的数字一般是图片的长与宽这个就是一个矩形的判断区域 鼠标和结束 void keyevent1() {while (true) {// 获取鼠标消息MOUSEMSG msg GetMouseMsg(); int mouseX msg.x, mouseY msg.y;//进行清屏操作防止fight按钮持续出现cleardevice();putimage(0, 0, gamebegin);putimage(WIN_LONG / 2 - 500, WIN_WIDTH / 2 40, keyback, NOTSRCERASE);putimage(WIN_LONG / 2 - 500, WIN_WIDTH / 2 40, key, SRCINVERT);if (isMouseOnButton(mouseX, mouseY)) {/*这里由于无法使用透明化这个黄色所以我们设计另外的注意图片还有算自己的宽度0*/BeginBatchDraw();putimage(BUTTON_X 210 40, BUTTON_Y 80, fightback, NOTSRCERASE);putimage(BUTTON_X 210 40, BUTTON_Y 80, fight, SRCINVERT);EndBatchDraw();if (msg.uMsg WM_LBUTTONDOWN) {break;}}Sleep(10);}cleardevice();mciSendString(stop ./image\\begingame.mp3, 0, 0, 0);mciSendString(close ./image\\begingame.mp3, 0, 0, 0);
} 首先我们先定义一个鼠标的全部信息的变量msgmsg所等于的函数是获取当前鼠标的具体信息 因为我们要有图标在旁边显示我们贴上去就要里面清除所以就要cleardevice()函数cleardevice()函数后面是放置背景和开始游戏的图标要不然清除了就没了然后我们再进行判断 我们把鼠标现在具体的信息放进到我们自己写的判断函数里面取就好了然后如果为真就显示图标然后我们再判断是否点击就后面的if语句里面后面那个是系统自己写的点击的值然后如相等就是突出然后没有就先短暂休眠一下为了保持流畅然后如果if为真就会结束外面的循环然后后面就是清理屏幕为加载界面创建空间然后再进行关闭音乐就好了 四 完整代码 #includeattribute.h
#includetool.hIMAGE gamebegin;
IMAGE keyback;
IMAGE key;
IMAGE fightback;
IMAGE fight;//判断是否点击了之后是否在按钮的范围
//加减是偏移量由于图片本身有空白的
bool isMouseOnButton(int mouseX, int mouseY) {return (mouseX BUTTON_X55 mouseX BUTTON_X210 mouseY BUTTON_Y40 mouseY BUTTON_Y150 );
}void updateBg() {BeginBatchDraw();putimage(0, 0, gamebegin);putimage(WIN_LONG / 2 - 500, WIN_WIDTH / 2 40, keyback, NOTSRCERASE);putimage(WIN_LONG / 2 - 500, WIN_WIDTH / 2 40, key, SRCINVERT);EndBatchDraw();
}void keyevent1() {while (true) {// 获取鼠标消息MOUSEMSG msg GetMouseMsg(); int mouseX msg.x, mouseY msg.y;//进行清屏操作防止fight按钮持续出现cleardevice();putimage(0, 0, gamebegin);putimage(WIN_LONG / 2 - 500, WIN_WIDTH / 2 40, keyback, NOTSRCERASE);putimage(WIN_LONG / 2 - 500, WIN_WIDTH / 2 40, key, SRCINVERT);if (isMouseOnButton(mouseX, mouseY)) {/*这里由于无法使用透明化这个黄色所以我们设计另外的注意图片还有算自己的宽度0*/BeginBatchDraw();putimage(BUTTON_X 210 40, BUTTON_Y 80, fightback, NOTSRCERASE);putimage(BUTTON_X 210 40, BUTTON_Y 80, fight, SRCINVERT);EndBatchDraw();if (msg.uMsg WM_LBUTTONDOWN) {break;}}Sleep(10);}cleardevice();mciSendString(stop ./image\\begingame.mp3, 0, 0, 0);mciSendString(close ./image\\begingame.mp3, 0, 0, 0);
}void welcome() {char image[60];mciSendString(open ./image\\begingame.mp3, 0, 0, 0);mciSendString(play ./image\\begingame.mp3 repeat, 0, 0, 0);//begin game picturesprintf(image, ./image\\gamebegin.jpg);loadimage(gamebegin, image, 1150, 600);sprintf(image, ./image\\beginback.jpg);loadimage(keyback, image, 260, 260);sprintf(image, ./image\\begin.jpg);loadimage(key, image, 260, 260);updateBg();//button controlsprintf(image, ./image\\fight.jpg);loadimage(fight, image);sprintf(image, ./image\\fight1back.jpg);loadimage(fightback, image);keyevent1();
} 前面的预处理指令就是包含了一些需要的库函数系统自己带的然后我只是懒得每次写的就直接全部放在一起方便些 总结
今天我们学习游戏开始界面的开发和游戏的大概框架游戏开始界面的开发主要是鼠标的互动我们只需要MOUSEMSG这个类型知道就好然后这个里面由xy与是uMsg这个后面可以理解这个u为use为使用的意思 1 鼠标的互动 2 掩码图 3 加载图和放置图