游戏概述
此2D游戏是自己一行一行代码码出来的(参考的游戏也是自己以前做过或者实现的2D游戏),使用的easyx.h的库。资源大多是网上找来自己加工的(人物借鉴别人的模型,Alz自己换的颜色),掩码图大多也是自己使用PS,ae等工具制作的,完整的制作2D游戏素材教程在我前面的博客会有提到,希望对你们有所帮助 编译环境Visual studio 2017
资源加载
单独使用了一个头文件进行资源的加载resources.h,人物也封装成了一个类。
游戏概述
本程序是一个对战的仙侠类游戏,其中 表示移动 J,K,U分别表示跳跃,砍,放大招。对手采取的是一个手写的电脑人机。可以追着角色移动。目前阶段只给敌人添加了左右移动的特性,智能Al敌人会逐渐完善。 开始界面: 战斗界面: 战斗胜利界面: 战斗失败界面:
主要功能函数说明
int main(int argv, char*argc[])
{
int HP = role.NowHP();
int opp_HP = opponent.NowHP();
srand((unsigned)time(NULL));
initgraph(WIDTH, HEIGHT);
loadResources();
opponent.init(600,role.Y(),0,100,0,100);
startUI();
while (1) {
ShowUI();
keyDown();
killRelease();
AI();
opp_Follow();
Win();
}
closegraph();
return 0;
}
角色类:
#pragma once
#include"loadResources.h"
#define LBorder -120
#define RBorder 1024
#define UpBorder 150
#define DownBorder 450
class Role
{
int x;
int y;
int postion;
int fullHP;
int myself;
int HP;
public:
Role() {
x = 50;
y = 300;
postion = 1;
fullHP = 100;
myself = 1;
HP = 100;
}
~Role() {};
void init(int X, int Y, int pos, int fullBlood, int Myself, int blood);
void XMove();
void YMove();
void moveRight()
{
x += 30;
}
void moveLeft()
{
x -= 30;
}
int Pos()
{
return postion;
}
void Up() {
y -= 30;
}
void Down() {
y += 30;
}
int X() {
return x;
}
int Y() {
return y;
}
void ChangeX(int value)
{
x = value;
}
void ChangeY(int value)
{
y = value;
}
void ChangePos(int pos) {
postion = pos;
}
int Object()
{
return myself;
}
void changeHP(int peopleHP)
{
HP -= peopleHP;
}
int NowHP()
{
return HP;
}
void showHP(int X, int Y, int xx, int yy, int dir) {
if (dir == 1)
{
char HPtext[100];
sprintf(HPtext, "角色 %d/%d", HP, fullHP);
rectangle(X, 1 + Y, 110 + xx, 20 + yy);
setfillcolor(RED);
solidrectangle(1 + X, 2 + Y,10+HP + xx, 19 + yy);
setbkmode(TRANSPARENT);
outtextxy(0,3,HPtext);
}
if (dir == 0)
{
char HPtext_opp[100];
sprintf(HPtext_opp, "敌人 %d/%d", HP, fullHP);
rectangle(X, 30 + Y, 110 + xx, 50 + yy);
setfillcolor(RED);
solidrectangle(1 + X, 31 + Y, 10+HP + xx, 49 + yy);
setbkmode(TRANSPARENT);
outtextxy(0, 32, HPtext_opp);
}
}
};
void Role::XMove() {
switch (postion) {
case 0:
if (x < LBorder) {
x = LBorder;
break;
}
moveLeft();
break;
case 1:
if (x > RBorder-230) {
x = RBorder - 230;
break;
}
moveRight();
break;
}
}
void Role::YMove() {
switch (postion) {
case 0:
if (y > DownBorder) {
y = DownBorder;
break;
}
Down();
break;
case 1:
if (y < UpBorder) {
y = UpBorder;
break;
}
Up();
break;
}
}
void Role::init(int X, int Y, int pos, int fullBlood,int Myself,int blood) {
x = X;
y = Y;
postion = pos;
fullHP = fullBlood;
myself = Myself;
HP = blood;
}
前期Al的简单实现:
void AI()
{
if ((role.X() - opponent.X()) >= 30 || (role.X() - opponent.X()) <= -30)
{
state_opp = 1;
opponent.XMove();
}
else
{
state_opp = 3 + rand() % 6;
role.changeHP(5);
}
}
代码还会继续优化,Al也会不断的完善。现阶段只是实现了一些简单的打斗和场景特效,代码逻辑进行了详细的标注,很容易看懂。
源代码下载:
链接: github地址
|