对于一个游戏来说,最重要的是什么? 没错,是充钱,充钱,再充钱! 当然,游戏本身也要能动弹,不然钱充的不流畅。
所以,我们来看看如何流畅的处理逻辑。 对于一个界面化的小游戏来说,最主要的就是角色的移动,我们通过C\C++的一个函数了处理键盘的响应,以及一个句柄API来处理一些弹窗问题。话不多说 ,上代码!
userKey = _getch();
switch (userKey)
{
case'A':
case'a':
case'75':
//当要去的地方是空地
if (map[i][j - 1] == 1)
{
map[i][j] = 1;
map[i][j - 1] = 15;
}
// 魔塔游戏中,开门需要收集到钥匙才可以,我们因为素材问题
//只使用了黄色和蓝色两种钥匙
//吃钥匙
if (map[i][j - 1] == 4)
{
map[i][j] = 1;
map[i][j - 1] = 15;
role.Bule++;
}
//开门
if (map[i][j - 1] == 2 && role.Bule > 0)
{
role.Bule--;
map[i][j] = 1;
map[i][j - 1] = 15;
}
//蝙蝠
if (map[i][j - 1] == 10)
{
int ID = MessageBox(hwnd, "你遇到蝙蝠了 ", "是否攻击? ", MB_YESNO);
if (ID == IDYES)
{
//打架
if (bloodPK(BIANFU) == true)
{
map[i][j] = 1;
map[i][j - 1] = 15;
}
else
{
int beginID = MessageBox(hwnd, "你死球了!", "花钱复活不?", MB_YESNO);
}
}
}
//遇到法师
if (map[i][j - 1] == 18)
{
int ID = MessageBox(hwnd, "你遇到法师了 ", "是否攻击? ", MB_YESNO);
if (ID == IDYES)
{
//打架
if (bloodPK(FASHI) == true)
{
map[i][j] = 1;
map[i][j - 1] = 15;
}
else
{
int beginID = MessageBox(hwnd, "你死球了!", "花钱复活不?", MB_YESNO);
}
}
}
//遇到红水晶
if (map[i][j - 1] == 13)
{
map[i][j] = 1;
map[i][j - 1] = 15;
role.Attrack += 50;
role.Defender += 30;
}
//遇到血瓶
if (map[i][j - 1] == 6)
{
map[i][j] = 1;
map[i][j - 1] = 15;
role.HP += 75;
role.MP += 70;
}
//遇到绿豆豆
if (map[i][j - 1] == 9)
{
map[i][j] = 1;
map[i][j - 1] = 15;
role.LV += 1;
role.Defender += 50;
role.Attrack += 50;
}
//遇到红豆豆
if (map[i][j - 1] == 8)
{
map[i][j] = 1;
map[i][j - 1] = 15;
role.HP -= 70;
role.MP -= 50;
role.Defender -= 10;
role.Attrack += 25;
}
//如果遇到怪物,那么你需要确定是否战斗,如果确认那么换位,并且扣除相应的血量
//如果逃离 则怪物不会消失,一直存在
//骷髅
if (map[i][j - 1] == 11)
{
int ID = MessageBox(hwnd, "你遇到骷髅了 ", "是否攻击? ", MB_YESNO);
if (ID == IDYES)
{
//打架
if (bloodPK(KULOU) == true)
{
map[i][j] = 1;
map[i][j - 1] = 15;
}
else
{
int beginID = MessageBox(hwnd, "你死球了!", "花钱复活不?", MB_YESNO);
}
}
else
{
cout << "此路不通!!!" << endl;
}
}
//权杖
if (map[i][j - 1] == 17)
{
role.QZ += 1;
map[i][j] = 1;
map[i][j - 1] = 15;
}
//蓝瓶
if (map[i][j - 1] == 7)
{
map[i][j] = 1;
map[i][j - 1] = 15;
role.MP += 70;
}
//去下一层
if (map[i][j - 1] == 16)
{
if (floor == 2)
{
for (int q = 0; q < 13; q++)
{
for (int k = 0; k < 13; k++)
{
map[q][k] = map2[q][k];
}
}
}
if (floor == 3)
{
for (int q = 0; q < 13; q++)
{
for (int k = 0; k < 13; k++)
{
map[q][k] = map3[q][k];
}
}
}
Floor++;
}
//吃黄钥匙
if (map[i][j - 1] == 5)
{
map[i][j] = 1;
map[i][j - 1] = 15;
role.Yellow++;
}
//开黄门
if (map[i][j - 1] == 3 && role.Yellow > 0)
{
role.Yellow--;
map[i][j] = 1;
map[i][j - 1] = 15;
}
//遇到蓝水晶
if (map[i][j - 1] == 14)
{
map[i][j] = 1;
map[i][j - 1] = 15;
role.Attrack += 30;
role.Defender += 55;
}
break;
是不是感觉清晰而又一目了然,没错,我们只需要让某个位图和角色位图发生移位就可以,如果是堵墙,那么就不让角色的坐标发生改变,如果是其他的一些东西,那么会发生一系列的判断和改变。
int ID = MessageBox(hwnd, "你遇到骷髅了 ", "是否攻击? ", MB_YESNO);
if (ID == IDYES)
{
//打架
if (bloodPK(KULOU) == true)
{
map[i][j] = 1;
map[i][j - 1] = 15;
}
else
{
int beginID = MessageBox(hwnd, "你死球了!", "花钱复活不?", MB_YESNO);
}
}
这一段代码是一个弹窗的显示,MB_YESNO表示判断结果是 是或者 否 messagebox 表示显示弹窗标题和内容。如果想使用这个句柄,那么你需要有这么一句声明:
hwnd = initgraph(55 * 14, 55 * 13);
表示弹窗是显示在这个界面之上。 当然,做了这些处理之后,我们可以在开头添加一些东西,下节我们再讲解。