目录
1. 项目介绍
使用C语言,手写魂斗罗经典游戏场景。
配套视频教程
视频讲解整个开发过程。
2. 游戏效果演示
为了避免违规,这里不做演示,可以直接在视频教程中查看完整效果。
3. 项目准备
VS2019+EasyX图形库
Easyx直接在easyx官网下载,然后双击安装。
4. 创建项目
使用vs2019创建一个空项目,并导入项目素材资源(留言邮箱地址获取)
素材目录res:
修改项目属性,把字符集修改为多字节字符集:
5. 实现游戏的启动界面
先导入工具文件tools.h和tools.cpp 。
#include <stdio.h>
#include <graphics.h>
#include "tools.h"
#define WIN_WIDTH 1400
#define WIN_HEIGHT 600
IMAGE imgWelcome;
IMAGE imgStartNormal;
IMAGE imgStartPress;
IMAGE imgBg;
void loadResources() {
char name[128];
initgraph(WIN_WIDTH, WIN_HEIGHT);
loadimage(&imgBg, "res/bg.png");
loadimage(&imgWelcome, "res/welcome.png");
loadimage(&imgStartNormal, "res/start_normal.png");
loadimage(&imgStartPress, "res/start_press.png");
}
void updateWindow() {
putimage(0, 0, &imgBg);
}
void welcome() {
mciSendString("play res/welcome.mp3", 0, 0, 0);
putimage(0, 0, &imgWelcome);
int x = 192;
int y = 452 - 5 - 12;
putimagePNG(x, y, &imgStartNormal);
MOUSEMSG msg;
while (1) {
msg = GetMouseMsg();
if (msg.uMsg == WM_MOUSEMOVE || msg.uMsg == WM_LBUTTONDOWN || msg.uMsg == WM_LBUTTONUP) {
if (msg.x > x && msg.x < x + imgStartNormal.getwidth() &&
msg.y > y && msg.y < y + imgStartNormal.getheight()) {
if (msg.uMsg == WM_LBUTTONUP) {
break;
}
putimagePNG(x, y, &imgStartPress);
}
else {
putimagePNG(x, y, &imgStartNormal);
}
}
}
}
int main(void) {
loadResources();
welcome();
while (1) {
updateWindow();
// to do
}
system("pause");
return 0;
}
启动按钮的点击原理,非常简单。直接根据鼠标消息的位置来判断,如果在按钮区域之内,就高亮显示,如果在按钮区域之外,按钮就显示正常状态,如果鼠标位置落在按钮区域之内,同时点击了鼠标左键,就认为是按钮的单击事件,然后跳转到游戏场景。
下一节,实现玩家Hero的走动。