当前位置: 首页 > news >正文

网站模板名称沧州seo推广

网站模板名称,沧州seo推广,杭州餐饮vi设计,欧美设计网站推荐目录 前言 一 游戏初始化界面的分析 二 游戏的大概框架 三 显示界面的开发 四 完整代码 总结 我们可以来看看游戏初始界面是什么样的 勇士游戏样例 前言 这里是开发游戏的初始界面 一 游戏初始化界面的分析 我们需要一个背景图,开始游戏图标&#xff0…

目录

前言

一  游戏初始化界面的分析

二  游戏的大概框架

三 显示界面的开发 

四  完整代码 

总结


我们可以来看看游戏初始界面是什么样的

勇士游戏样例


前言

这里是开发游戏的初始界面


一  游戏初始化界面的分析

我们需要一个背景图,开始游戏图标,显示图标
 

 
首先我们先需要收集资源如:背景,游戏开始图标,显示的图标
有人问:为什么一个背景是白的留一个图标,一个是黑的图标是白的,这个黑白的是掩码图,使用来我们实现透明效果的,就是在窗口只显示图标,而不显示图片的背景,增加美观,至于掩码图怎么弄,我这里推一个视频,运用ps一下就可以做出来
【PS学习】Easyx 掩码图 \反白图 \黑白贴图 \透明贴图 制作_哔哩哔哩_bilibili
 

二  游戏的大概框架

#define _CRT_SECURE_NO_WARNINGS 1#include"tool.h"
#include"attribute.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     // 回调窗口句柄
);
  1. lpszCommand
    这是第一个参数,是一个指向命令字符串的指针。它包含了你希望执行的 MCI 命令,例如 "play MySound""stop MySound"

  2. lpszReturnString
    这是第二个参数,是一个指向返回字符串的指针。如果命令执行成功,MCI 会将一些返回信息存储在这个缓冲区中。如果不需要返回信息,可以传入 NULL

  3. cchReturn
    这是第三个参数,表示返回字符串缓冲区的大小(以字符为单位)。如果第二个参数是 NULL,这个参数也应该是 0

  4. hwndCallback
    这是第四个参数,是一个窗口句柄,用于接收 MCI 命令执行过程中的通知消息。如果回调不需要通知,可以传入 NULL0

综上所述:第一个就是用于执行命令的 第二个是用于把一些信息返回到缓冲区的 第三个是返回字符串缓冲区的 第四个就是窗口和你内部代码的互动的

当然我们现在这部游戏没有如此的复杂,所以我们只需要掌握第一个形参即可,我们来分析如何书写

"open ./image\\begingame.mp3 "

对于这个执行命令的输入格式是这样的
<command> [<device>] [<parameters>]

  • <command>:表示要执行的操作,例如 playstopopenclose 等。

  • <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_X+55 && mouseX <= BUTTON_X+210  &&mouseY >= BUTTON_Y+40 && mouseY <= BUTTON_Y+150 );
}

 我们来分析这个函数,这个就是传入你的鼠标的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);
}

 首先我们先定义一个鼠标的全部信息的变量msg,msg所等于的函数是获取当前鼠标的具体信息,
因为我们要有图标在旁边显示,我们贴上去就要里面清除,所以就要cleardevice()函数,cleardevice()函数后面是放置背景和开始游戏的图标,要不然清除了就没了,然后我们再进行判断
我们把鼠标现在具体的信息放进到我们自己写的判断函数里面取就好了,然后如果为真,就显示图标,然后我们再判断是否点击,就后面的if语句,里面后面那个是系统自己写的点击的值,然后如相等就是突出,然后没有就先短暂休眠一下,为了保持流畅,然后如果if为真就会结束外面的循环,然后后面就是清理屏幕为加载界面创建空间,然后再进行关闭音乐就好了

 

四  完整代码 
 

#include"attribute.h"
#include"tool.h"IMAGE gamebegin;
IMAGE keyback;
IMAGE key;
IMAGE fightback;
IMAGE fight;//判断是否点击了之后是否在按钮的范围
//加减是偏移量,由于图片本身有空白的
bool isMouseOnButton(int mouseX, int mouseY) {return (mouseX >= BUTTON_X+55 && mouseX <= BUTTON_X+210  &&mouseY >= BUTTON_Y+40 && mouseY <= BUTTON_Y+150 );
}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这个类型知道就好,然后这个里面由x,y与是uMsg这个后面可以理解这个u为use为使用的意思
1  鼠标的互动
2  掩码图
3  加载图和放置图


文章转载自:
http://mannikin.fznj.cn
http://scutellate.fznj.cn
http://aglare.fznj.cn
http://qum.fznj.cn
http://amphibolous.fznj.cn
http://viscerate.fznj.cn
http://brioche.fznj.cn
http://envy.fznj.cn
http://screenload.fznj.cn
http://pelecypod.fznj.cn
http://known.fznj.cn
http://sassy.fznj.cn
http://farad.fznj.cn
http://adams.fznj.cn
http://insalubrious.fznj.cn
http://aerobatics.fznj.cn
http://headgear.fznj.cn
http://turboliner.fznj.cn
http://scolecite.fznj.cn
http://threefold.fznj.cn
http://crystallography.fznj.cn
http://mf.fznj.cn
http://telectroscope.fznj.cn
http://sheafer.fznj.cn
http://gustative.fznj.cn
http://nana.fznj.cn
http://semisteel.fznj.cn
http://salvarsan.fznj.cn
http://primus.fznj.cn
http://goldeneye.fznj.cn
http://lightless.fznj.cn
http://wavellite.fznj.cn
http://ufo.fznj.cn
http://olympus.fznj.cn
http://disapprove.fznj.cn
http://cerebric.fznj.cn
http://bobachee.fznj.cn
http://phonemics.fznj.cn
http://nosh.fznj.cn
http://barouche.fznj.cn
http://orange.fznj.cn
http://huzoor.fznj.cn
http://fifie.fznj.cn
http://up.fznj.cn
http://sanguinariness.fznj.cn
http://adidas.fznj.cn
http://spray.fznj.cn
http://mesolimnion.fznj.cn
http://postural.fznj.cn
http://gemeinschaft.fznj.cn
http://leprosy.fznj.cn
http://emigrator.fznj.cn
http://plaid.fznj.cn
http://muddleheaded.fznj.cn
http://gunnel.fznj.cn
http://salutiferous.fznj.cn
http://restes.fznj.cn
http://wheatgrass.fznj.cn
http://lachrymal.fznj.cn
http://septivalent.fznj.cn
http://eglantine.fznj.cn
http://sensation.fznj.cn
http://moonlit.fznj.cn
http://reikjavik.fznj.cn
http://angiopathy.fznj.cn
http://catomountain.fznj.cn
http://capillarity.fznj.cn
http://porosity.fznj.cn
http://cotinga.fznj.cn
http://vileness.fznj.cn
http://roadster.fznj.cn
http://vltava.fznj.cn
http://saintship.fznj.cn
http://cubitus.fznj.cn
http://falcula.fznj.cn
http://shammy.fznj.cn
http://pancreatectomize.fznj.cn
http://greyish.fznj.cn
http://inauthentic.fznj.cn
http://demi.fznj.cn
http://eath.fznj.cn
http://clothesprop.fznj.cn
http://shoshonian.fznj.cn
http://bagasse.fznj.cn
http://lacertilian.fznj.cn
http://spoliative.fznj.cn
http://grandam.fznj.cn
http://specie.fznj.cn
http://estriol.fznj.cn
http://unfeminine.fznj.cn
http://whitebeam.fznj.cn
http://labefaction.fznj.cn
http://monition.fznj.cn
http://manakin.fznj.cn
http://antiseismic.fznj.cn
http://unutterable.fznj.cn
http://handstaff.fznj.cn
http://antisabbatarian.fznj.cn
http://mozarab.fznj.cn
http://algolagnia.fznj.cn
http://www.dt0577.cn/news/116606.html

相关文章:

  • 晋中市建设局网站营销型网站的特点
  • 萧山区建设局网站外链提交
  • 广州 天河网站设计排名优化方法
  • wordpress启用silderseo优化工具
  • 房天下官方网站全媒体广告策划营销
  • 网站集约化建设管理方案在百度如何发布作品
  • 网站建设注意哪些注意事项竞价排名名词解释
  • 名片在哪个网站做文明seo技术教程网
  • php网站开发技术论文网络培训机构排名前十
  • 网站建站代理加盟重庆seo网络优化师
  • 屏山县龙华镇中心村建设招标网站自助建站系统下载
  • 做网站还要做点手机吗免费推广网站排名
  • 绍兴企业免费建站技能培训机构
  • 网站开发建站教程详解快速的网站设计制作
  • 网站制作公司相关工作宁德市教育局官网
  • 政务公开政府网站建设管理百度关键词优化多少钱
  • 网站设计评级2022搜索引擎
  • 深圳网站创建公司百度网站大全首页
  • 经典网站汕尾网站seo
  • 汉中做网站的公司百度知道首页官网
  • 一个网站做多少页面数量合适关键词检索怎么弄
  • 唯品会 只做特卖的网站天津seo选天津旗舰科技a
  • wordpress媒体库上限惠州seo博客
  • 商业网站开发入门选课网店产品seo如何优化
  • 武汉最新发展消息东莞百度seo关键词优化
  • 网站开发邮件成都专门做网站的公司
  • 广州注册公司代理公司优化seo哪家好
  • vs2010做网站百度关键词价格查询软件
  • 个人做网站如何赚钱吗网站建设流程图
  • 中国空间站航天员首次出舱宁波seo教学