C语言魔塔游戏[通俗易懂]

C语言魔塔游戏[通俗易懂]很早就很想写这个,今天终于写完了。游戏截图:编译环境:VS2017下面我来介绍一下游戏的主要功能和实现方式首先是玩家的定义,使用结构体,这个名字是可以自己改变的structgamerole{ charn…

大家好,又见面了,我是你们的朋友全栈君。

游戏已更新:C语言魔塔游戏十层_张宜强的博客-CSDN博客

很早就很想写这个,今天终于写完了。

游戏截图:

C语言魔塔游戏[通俗易懂]

C语言魔塔游戏[通俗易懂]

C语言魔塔游戏[通俗易懂]

编译环境: VS2017

直接下载https://download.csdn.net/download/qq_41505957/12154086 

解压后点击sln文件直接可以运行

下面我来介绍一下游戏的主要功能和实现方式

首先是玩家的定义,使用结构体,这个名字是可以自己改变的

struct gamerole
{
	char name[20] = "黑蛋";  //玩家名字
	int HP;	    //血量
	int MP;
	int DEF;	//防御
	int ATT;    //攻击
	int Lv;     //等级
	int Exp;    //经验
	int Num_Blue_Key; //蓝钥匙数量
	int Num_Yellow_Key;
}player;

在游戏的右边显示任务的各项属性

C语言魔塔游戏[通俗易懂]

函数:

void SetPlayer()
{
	putimage(60 * 13, 0, &Message);	
	outtextxy(60 * 13 + 12, 100, player.name);
	outtextxy(60 * 13 + 12, 180, intToString(player.Lv));
	outtextxy(60 * 13 + 12, 235, intToString(player.Exp));
	outtextxy(60 * 13 + 12, 362, intToString(player.HP));
	outtextxy(60 * 13 + 12, 425, intToString(player.MP));
	outtextxy(60 * 13 + 12, 517, intToString(player.ATT));
	outtextxy(60 * 13 + 12, 567, intToString(player.DEF));
	outtextxy(60 * 13 + 12, 689, intToString(player.Num_Yellow_Key));
	outtextxy(60 * 13 + 12, 759, intToString(player.Num_Blue_Key));
}

由于这个函数要求属性必须是字符串,所以我写了一个把数字转化成字符串的函数

//整数转换为字符
char *intToString(int Number)
{
	int len = 0;
	
	if (Number == 0) {
		str[0] = '0';
		len++;
	}
	while (Number)
	{
		str[len++] = Number % 10+'0';
		Number /= 10;
	}
	for (int i = 0; i < len/2; i++) {
		char t = str[i];
		str[i] = str[len - i - 1];
		str[len - i - 1] = t;
	}
	str[len] = '
//整数转换为字符
char *intToString(int Number)
{
int len = 0;
if (Number == 0) {
str[0] = '0';
len++;
}
while (Number)
{
str[len++] = Number % 10+'0';
Number /= 10;
}
for (int i = 0; i < len/2; i++) {
char t = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = t;
}
str[len] = '\0';
return str;
}
'; return str; }

怪物属性的定义

struct monster
{
	int HP;	    //血量
	int ATT;    //攻击
	int DEF;	//防御
	int Exp;    //经验
};

接下来就是定义画布,然后加载图片,我用一个二维数组存下了地图,不同的数字代表不同的图片,然后根据二维数组的值把不同的地方贴上不同的图片。

void SetMap()
{
	for (int i = 0; i < 13; i++)
	{
		for (int j = 0; j < 13; j++)
		{
			switch (map[i][j])
			{

			case 0:
				putimage(j * 60, i * 60, &Wall);          //墙
				break;
			case 1:
				putimage(j * 60, i * 60, &Ground);        //地板
				break;
			case 2:
				putimage(j * 60, i * 60, &Blue_door);     //蓝门
				break;
			case 3:
				putimage(j * 60, i * 60, &Yellow_door);    //黄门
				break;
			case 4:
				putimage(j * 60, i * 60, &Blue_Cry);         //蓝水晶
				break;
			case 5:
				putimage(j * 60, i * 60, &Red_Cry);          //红水晶
				break;
			case 6:
				putimage(j * 60, i * 60, &Blue_Key);        //蓝钥匙
				break;
			case 7:
				putimage(j * 60, i * 60, &Yellow_Key);     //黄钥匙
				break;
			case 8:
				putimage(j * 60, i * 60, &Red_Med);          //红药水
				break;
			case 9:
				putimage(j * 60, i * 60, &Blue_Med);         //蓝药水
				break;
			case 10:
				putimage(j * 60, i * 60, &Small_Bat);        //小蝙蝠
				break;
			case 11:
				putimage(j * 60, i * 60, &Small_Wizard);     //小巫师
				break;
			case 12:
				putimage(j * 60, i * 60, &Small_Skull);      //小骷髅
				break;
			case 13:
				putimage(j * 60, i * 60, &Big_Skull);        //大骷髅
				break;
			case 14:
				putimage(j * 60, i * 60, &Green_Slime);      //绿史莱姆
				break;
			case 15:
				putimage(j * 60, i * 60, &Red_Slime);        //红史莱姆
				break;
			case 98:
				putimage(j * 60, i * 60, &Ladder);         //梯子
				break;
			case 99:
				putimage(j * 60, i * 60, &Player);          //玩家
				break;
			}

		}
	}
}

接下来就是人物的移动和战斗了,人物的移动我就是直接对上下左右四种情况分别讨论, 在人物走动的时候要判断能不能走,不能走就不处理,如果能走,就把走到的那个位置上变成人,把之前人的位置变成地板。

case 'w':
case 72:
if (map[playerx - 1][playery] == 1) {         //下一步是地板
	map[playerx - 1][playery] = 99;
	map[playerx][playery] = 1;
	playerx--;
}

需要处理的就是钥匙,门, 水晶, 药水, 怪物。

如果是钥匙,把对应的钥匙数量加1。

如果是门,判断一下对应颜色的钥匙是否足够,如果足够,钥匙数量减1,然后把对应位置上的门变为空地。

如果是药水,吃了之后会增加生命。

如果是水晶,根据水晶的颜色加对应的属性。

当遇到怪物的时候回产生战斗,对于不同的怪物分开处理,下面是小蝙蝠的处理

case 10:
        ID = MessageBox(hwnd, "小蝙蝠", "是否攻击?", MB_YESNO);
        if (ID == IDYES)
	{
	    if (VS(player.HP, player.ATT, player.DEF, Small_Bat_Pro.HP, Small_Bat_Pro.ATT, Small_Bat_Pro.DEF)) {
			player.Exp += Small_Bat_Pro.Exp;
			return 1;
		    }	
	}
	break;

遇到怪物是会弹出对应的对话框

C语言魔塔游戏[通俗易懂]

此处有一个VS函数,用于计算战斗是否成功,如果成功,会加相应的属性,如果失败,则会弹出打不过的窗口。

int VS(int playHP, int playATT, int playDEF, int monHP, int monATT, int monDEF)
{
	while (playHP > 0 || monHP > 0)
	{
		monHP -= (playATT - monDEF);
		if (monHP < 0)
			break;
		playHP -= (monATT - playDEF);
	}
	if (playHP > 0) {
		player.HP = playHP;
		return 1;
	}
		
	else {
		MessageBox(hwnd, "", "打不过", MB_YESNO);
		return 0;
	}
}

在每一次敲击键盘后更新地图信息和人物信息 :

SetMap();  //重新显示地图
SetPlayer(); //重新显示角色信息

到了这里,游戏的内容也就说的差不多了,虽然我只写出了第一个地图。但是,只要添加地图即可有更多的玩法,有兴趣的同学可以自制关卡,实现更多内容。

最后,加上所有代码,注释上说的也比较清楚。

#include <stdlib.h>
#include <graphics.h>
#include <windows.h>
#include<conio.h>
#include<graphics.h>
#include<windows.h>
#include <stdio.h>
void initgamePicture();   //加载游戏图片
void SetPlayer();       //显示角色信息
void initPlayer();      //初始化游戏角色
void SetMap();         //加载游戏地图
char *intToString(int Number); //把整数转化成字符串
void playGame();          //开始游戏
int Combat(int x);
int VS(int playHP, int playATT, int playDEF, int monHP, int monATT, int monDEF);
int playerx, playery;
char str[20] = "";
//地图1
int map[13][13] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 98, 1, 14, 15, 14, 1, 1, 1, 1, 1, 1, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
{ 0, 8, 1, 1, 2, 1, 0, 5, 6, 1, 0, 1, 0 },
{ 0, 1, 12, 1, 0, 1, 0, 4, 8, 1, 0, 1, 0 },
{ 0, 0, 2, 0, 0, 1, 0, 0, 0, 14, 0, 1, 0 },
{ 0, 6, 1, 1, 0, 1, 3, 10, 11, 10, 0, 1, 0 },
{ 0, 1, 13, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 },
{ 0, 0, 2, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0 },
{ 0, 1, 1, 1, 0, 0, 14, 0, 0, 0, 14, 0, 0 },
{ 0, 8, 1, 6, 0, 7, 1, 6, 0, 1, 10, 1, 0 },
{ 0, 8, 1, 6, 0, 1, 99, 1, 0, 14, 9, 14, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
IMAGE Wall, Ground, Green_Slime, Red_Slime, Blue_Cry, Red_Cry,  Blue_Key, Yellow_Key,
Red_Med, Blue_Med, Ladder, Small_Skull, Big_Skull, Small_Bat, Small_Wizard,
Blue_door, Yellow_door, Player, Message;
HWND hwnd;
struct gamerole
{
char name[20] = "黑蛋";  //玩家名字
int HP;	    //血量
int MP;
int DEF;	//防御
int ATT;    //攻击
int Lv;     //等级
int Exp;    //经验
int Num_Blue_Key; //蓝钥匙数量
int Num_Yellow_Key;
}player;
struct monster
{
int HP;	    //血量
int ATT;    //攻击
int DEF;	//防御
int Exp;    //经验
};
struct monster Green_Slime_Pro = { 50,10,12,100 };    //绿史莱姆属性     
struct monster Red_Slime_Pro = { 100, 50, 12, 500 };  //红史莱姆属性
struct monster Small_Wizard_Pro = { 100, 30, 9, 400 };//小巫师属性
struct monster Small_Bat_Pro = { 20, 10, 9, 50 };         //小蝙蝠属性
struct monster Small_Skull_Pro = {30, 20, 10, 200};   //小骷髅属性
struct monster Big_Skull_Pro = {60, 50, 25, 300};     //大骷髅属性
int main()
{
initPlayer();
hwnd = initgraph(60 * 14, 60 * 13);
initgamePicture();
while (1) {
SetMap();
SetPlayer();
playGame();
}
return 0;
}
/*
*显示角色信息
*/
void SetPlayer()
{
putimage(60 * 13, 0, &Message);	
outtextxy(60 * 13 + 12, 100, player.name);
outtextxy(60 * 13 + 12, 180, intToString(player.Lv));
outtextxy(60 * 13 + 12, 235, intToString(player.Exp));
outtextxy(60 * 13 + 12, 362, intToString(player.HP));
outtextxy(60 * 13 + 12, 425, intToString(player.MP));
outtextxy(60 * 13 + 12, 517, intToString(player.ATT));
outtextxy(60 * 13 + 12, 567, intToString(player.DEF));
outtextxy(60 * 13 + 12, 689, intToString(player.Num_Yellow_Key));
outtextxy(60 * 13 + 12, 759, intToString(player.Num_Blue_Key));
}
/*
*   加载游戏图片
*/
void initgamePicture()
{
loadimage(&Wall, "墙.jpg", 60, 60);
loadimage(&Ground, "地板.jpg", 60, 60);
loadimage(&Green_Slime, "绿史莱姆.jpg", 60, 60);
loadimage(&Red_Slime, "红史莱姆.jpg", 60, 60);
loadimage(&Blue_Cry, "蓝水晶.jpg", 60, 60);
loadimage(&Red_Cry, "红水晶.jpg", 60, 60);
loadimage(&Blue_Key, "蓝钥匙.jpg", 60, 60);
loadimage(&Yellow_Key, "黄钥匙.jpg", 60, 60);
loadimage(&Red_Med, "小红药水.jpg", 60, 60);
loadimage(&Blue_Med, "小蓝药水.jpg", 60, 60);
loadimage(&Ladder, "梯子.jpg", 60, 60);
loadimage(&Small_Bat, "小蝙蝠.jpg", 60, 60);
loadimage(&Small_Wizard, "小巫师.jpg", 60, 60);
loadimage(&Small_Skull, "骷髅兵.jpg", 60, 60);
loadimage(&Big_Skull, "大骷髅兵.jpg", 60, 60);
loadimage(&Blue_door, "蓝门.jpg", 60, 60);
loadimage(&Yellow_door, "黄门.jpg", 60, 60);
loadimage(&Player, "人.jpg", 60, 60);
loadimage(&Message, "info.jpg");
}
/*
*初始化游戏角色
*/
void initPlayer()
{
player.Lv = 0;
player.ATT = 50;
player.DEF = 50;
player.Num_Blue_Key = 0;
player.Num_Yellow_Key = 0;
player.HP = 500;
player.MP = 250;
player.Exp = 0;
playerx = 11;
playery = 6;
}
//整数转换为字符
char *intToString(int Number)
{
int len = 0;
if (Number == 0) {
str[0] = '0';
len++;
}
while (Number)
{
str[len++] = Number % 10+'0';
Number /= 10;
}
for (int i = 0; i < len/2; i++) {
char t = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = t;
}
str[len] = '\0';
return str;
}
/*
*加载游戏地图
*
*/
void SetMap()
{
for (int i = 0; i < 13; i++)
{
for (int j = 0; j < 13; j++)
{
switch (map[i][j])
{
case 0:
putimage(j * 60, i * 60, &Wall);          //墙
break;
case 1:
putimage(j * 60, i * 60, &Ground);        //地板
break;
case 2:
putimage(j * 60, i * 60, &Blue_door);     //蓝门
break;
case 3:
putimage(j * 60, i * 60, &Yellow_door);    //黄门
break;
case 4:
putimage(j * 60, i * 60, &Blue_Cry);         //蓝水晶
break;
case 5:
putimage(j * 60, i * 60, &Red_Cry);          //红水晶
break;
case 6:
putimage(j * 60, i * 60, &Blue_Key);        //蓝钥匙
break;
case 7:
putimage(j * 60, i * 60, &Yellow_Key);     //黄钥匙
break;
case 8:
putimage(j * 60, i * 60, &Red_Med);          //红药水
break;
case 9:
putimage(j * 60, i * 60, &Blue_Med);         //蓝药水
break;
case 10:
putimage(j * 60, i * 60, &Small_Bat);        //小蝙蝠
break;
case 11:
putimage(j * 60, i * 60, &Small_Wizard);     //小巫师
break;
case 12:
putimage(j * 60, i * 60, &Small_Skull);      //小骷髅
break;
case 13:
putimage(j * 60, i * 60, &Big_Skull);        //大骷髅
break;
case 14:
putimage(j * 60, i * 60, &Green_Slime);      //绿史莱姆
break;
case 15:
putimage(j * 60, i * 60, &Red_Slime);        //红史莱姆
break;
case 98:
putimage(j * 60, i * 60, &Ladder);         //梯子
break;
case 99:
putimage(j * 60, i * 60, &Player);          //玩家
break;
}
}
}
}
int Combat(int x)
{
int ID;
switch (x) {
case 10:
ID = MessageBox(hwnd, "小蝙蝠", "是否攻击?", MB_YESNO);
if (ID == IDYES)
{
if (VS(player.HP, player.ATT, player.DEF, Small_Bat_Pro.HP, Small_Bat_Pro.ATT, Small_Bat_Pro.DEF)) {
player.Exp += Small_Bat_Pro.Exp;
return 1;
}	
}
break;
case 11:
ID = MessageBox(hwnd, "遇到小巫师", "是否攻击?", MB_YESNO);
if (ID == IDYES)
{
if (VS(player.HP, player.ATT, player.DEF, Small_Wizard_Pro.HP, Small_Wizard_Pro.ATT, Small_Wizard_Pro.DEF)) {
player.Exp += Small_Wizard_Pro.Exp;
return 1;
}
}
break;
case 12:
ID = MessageBox(hwnd, "遇到小骷髅", "是否攻击?", MB_YESNO);
if (ID == IDYES)
{
if (VS(player.HP, player.ATT, player.DEF, Small_Skull_Pro.HP, Small_Skull_Pro.ATT, Small_Skull_Pro.DEF)) {
player.Exp += Small_Skull_Pro.Exp;
return 1;
}
}
break;
case 13:
ID = MessageBox(hwnd, "遇到大骷髅", "是否攻击?", MB_YESNO);
if (ID == IDYES)
{
if (VS(player.HP, player.ATT, player.DEF, Big_Skull_Pro.HP, Big_Skull_Pro.ATT, Big_Skull_Pro.DEF)) {
player.Exp += Big_Skull_Pro.Exp;
return 1;
}
}
break;
case 14:
ID = MessageBox(hwnd, "遇到绿史莱姆", "是否攻击?", MB_YESNO);
if (ID == IDYES)
{
if (VS(player.HP, player.ATT, player.DEF, Green_Slime_Pro.HP, Green_Slime_Pro.ATT, Green_Slime_Pro.DEF)) {
player.Exp += Green_Slime_Pro.Exp;
return 1;
}
}
break;
case 15:
ID = MessageBox(hwnd, "遇到红史莱姆", "是否攻击?", MB_YESNO);
if (ID == IDYES)
{
if (VS(player.HP, player.ATT, player.DEF, Red_Slime_Pro.HP, Red_Slime_Pro.HP, Red_Slime_Pro.HP)) {
player.Exp += Green_Slime_Pro.Exp;
return 1;
}
}
break;
}
return 0;
}
int VS(int playHP, int playATT, int playDEF, int monHP, int monATT, int monDEF)
{
while (playHP > 0 || monHP > 0)
{
monHP -= (playATT - monDEF);
if (monHP < 0)
break;
playHP -= (monATT - playDEF);
}
if (playHP > 0) {
player.HP = playHP;
return 1;
}
else {
MessageBox(hwnd, "", "打不过", MB_YESNO);
return 0;
}
}
void playGame()
{
while (1)
{
char ch = _getch();
switch (ch) {
case 'w':
case 72:
if (map[playerx - 1][playery] == 1) {         //下一步是地板
map[playerx - 1][playery] = 99;
map[playerx][playery] = 1;
playerx--;
}
else if (map[playerx-1][playery]== 6) {      //下一步是蓝钥匙
player.Num_Blue_Key++;
map[playerx - 1][playery] = 99;
map[playerx][playery] = 1;
playerx--;
}
else if (map[playerx - 1][playery] == 7) {     //下一步是黄钥匙
player.Num_Yellow_Key++;
map[playerx - 1][playery] = 99;
map[playerx][playery] = 1;
playerx--;
}
//下一步是怪物
else if (map[playerx - 1][playery] == 10 || map[playerx - 1][playery] == 11 ||
map[playerx - 1][playery] == 12 || map[playerx - 1][playery] == 13 ||
map[playerx - 1][playery] == 14 || map[playerx - 1][playery] == 15)
{
int x = Combat(map[playerx - 1][playery]);
if (x == 1) {
map[playerx - 1][playery] = 99;
map[playerx][playery] = 1;
playerx--;
}
}
//红蓝药水
else if (map[playerx - 1][playery] == 8 || map[playerx - 1][playery] == 9) {
if (map[playerx - 1][playery] == 8)
player.HP += 200;
else
player.HP += 500;
map[playerx - 1][playery] = 99;
map[playerx][playery] = 1;
playerx--;
}
//红蓝门
else if (map[playerx - 1][playery] == 2 || map[playerx - 1][playery] == 3) {
if (map[playerx - 1][playery] == 2 && player.Num_Blue_Key) {
player.Num_Blue_Key--;
map[playerx - 1][playery] = 99;
map[playerx][playery] = 1;
playerx--;
}
if (map[playerx - 1][playery] == 3 && player.Num_Yellow_Key) {
player.Num_Yellow_Key--;
map[playerx - 1][playery] = 99;
map[playerx][playery] = 1;
playerx--;
}
}
//红蓝水晶
//红水晶+2攻击
//蓝水晶+2防御
else if (map[playerx - 1][playery] == 4 || map[playerx - 1][playery] == 5) {
if (map[playerx - 1][playery] == 4)
player.DEF += 2;
else if (map[playerx - 1][playery] == 5)
player.ATT += 2;
map[playerx - 1][playery] = 99;
map[playerx][playery] = 1;
playerx--;
}
break;
case 's':
case 80:
if (map[playerx + 1][playery] == 1) {         //下一步是地板
map[playerx + 1][playery] = 99;
map[playerx][playery] = 1;
playerx++;
}
else if (map[playerx + 1][playery] == 6) {      //下一步是蓝钥匙
player.Num_Blue_Key++;
map[playerx + 1][playery] = 99;
map[playerx][playery] = 1;
playerx++;
}
else if (map[playerx + 1][playery] == 7) {     //下一步是黄钥匙
player.Num_Yellow_Key++;
map[playerx + 1][playery] = 99;
map[playerx][playery] = 1;
playerx++;
}
//下一步是怪物
else if (map[playerx + 1][playery] == 10 || map[playerx + 1][playery] == 11 ||
map[playerx + 1][playery] == 12 || map[playerx + 1][playery] == 13 ||
map[playerx + 1][playery] == 14 || map[playerx + 1][playery] == 15)
{
int x = Combat(map[playerx + 1][playery]);
if (x == 1) {
map[playerx + 1][playery] = 99;
map[playerx][playery] = 1;
playerx++;
}
}
//红蓝药水
else if (map[playerx + 1][playery] == 8 || map[playerx + 1][playery] == 9) {
if (map[playerx + 1][playery] == 8)
player.HP += 200;
else
player.HP += 500;
map[playerx + 1][playery] = 99;
map[playerx][playery] = 1;
playerx++;
}
//红蓝门
else if (map[playerx + 1][playery] == 2 || map[playerx + 1][playery] == 3) {
if (map[playerx + 1][playery] == 2 && player.Num_Blue_Key) {
player.Num_Blue_Key++;
map[playerx + 1][playery] = 99;
map[playerx][playery] = 1;
playerx++;
}
if (map[playerx + 1][playery] == 3 && player.Num_Yellow_Key) {
player.Num_Yellow_Key++;
map[playerx + 1][playery] = 99;
map[playerx][playery] = 1;
playerx++;
}
}
//红蓝水晶
//红水晶+2攻击
//蓝水晶+2防御
else if (map[playerx + 1][playery] == 4 || map[playerx + 1][playery] == 5) {
if (map[playerx + 1][playery] == 4)
player.DEF += 2;
else if (map[playerx + 1][playery] == 5)
player.ATT += 2;
map[playerx + 1][playery] = 99;
map[playerx][playery] = 1;
playerx++;
}
break;
case 'a':
case 75:
if (map[playerx][playery - 1] == 1) {         //下一步是地板
map[playerx][playery - 1] = 99;
map[playerx][playery] = 1;
playery--;
}
else if (map[playerx][playery - 1] == 6) {      //下一步是蓝钥匙
player.Num_Blue_Key++;
map[playerx][playery - 1] = 99;
map[playerx][playery] = 1;
playery--;
}
else if (map[playerx][playery - 1] == 7) {     //下一步是黄钥匙
player.Num_Yellow_Key++;
map[playerx][playery - 1] = 99;
map[playerx][playery] = 1;
playery--;
}
//下一步是怪物
else if (map[playerx][playery - 1] == 10 || map[playerx][playery - 1] == 11 ||
map[playerx][playery - 1] == 12 || map[playerx][playery - 1] == 13 ||
map[playerx][playery - 1] == 14 || map[playerx][playery - 1] == 15)
{
int x = Combat(map[playerx][playery - 1]);
if (x == 1) {
map[playerx][playery - 1] = 99;
map[playerx][playery] = 1;
playery--;
}
}
//红蓝药水
else if (map[playerx][playery - 1] == 8 || map[playerx][playery - 1] == 9) {
if (map[playerx][playery - 1] == 8)
player.HP += 200;
else
player.HP += 500;
map[playerx ][playery- 1] = 99;
map[playerx][playery] = 1;
playery--;
}
//红蓝门
else if (map[playerx][playery - 1] == 2 || map[playerx][playery - 1] == 3) {
if (map[playerx][playery - 1] == 2 && player.Num_Blue_Key) {
player.Num_Blue_Key--;
map[playerx][playery - 1] = 99;
map[playerx][playery] = 1;
playery--;
}
if (map[playerx][playery - 1] == 3 && player.Num_Yellow_Key) {
player.Num_Yellow_Key--;
map[playerx][playery - 1] = 99;
map[playerx][playery] = 1;
playery--;
}
}
//红蓝水晶
//红水晶+2攻击
//蓝水晶+2防御
else if (map[playerx][playery - 1] == 4 || map[playerx][playery - 1] == 5) {
if (map[playerx][playery - 1] == 4)
player.DEF += 2;
else if (map[playerx][playery - 1] == 5)
player.ATT += 2;
map[playerx][playery - 1] = 99;
map[playerx][playery] = 1;
playery--;
}
break;
case 'd':
case 77:
if (map[playerx][playery + 1] == 1) {         //下一步是地板
map[playerx][playery + 1] = 99;
map[playerx][playery] = 1;
playery++;
}
else if (map[playerx][playery + 1] == 6) {      //下一步是蓝钥匙
player.Num_Blue_Key++;
map[playerx][playery + 1] = 99;
map[playerx][playery] = 1;
playery++;
}
else if (map[playerx][playery + 1] == 7) {     //下一步是黄钥匙
player.Num_Yellow_Key++;
map[playerx][playery + 1] = 99;
map[playerx][playery] = 1;
playery++;
}
//下一步是怪物
else if (map[playerx][playery + 1] == 10 || map[playerx][playery + 1] == 11 ||
map[playerx][playery + 1] == 12 || map[playerx][playery + 1] == 13 ||
map[playerx][playery + 1] == 14 || map[playerx][playery + 1] == 15)
{
int x = Combat(map[playerx][playery + 1]);
if (x == 1) {
map[playerx][playery + 1] = 99;
map[playerx][playery] = 1;
playery++;
}
}
//红蓝药水
else if (map[playerx][playery + 1] == 8 || map[playerx][playery + 1] == 9) {
if (map[playerx][playery + 1] == 8)
player.HP += 200;
else
player.HP += 500;
map[playerx][playery + 1] = 99;
map[playerx][playery] = 1;
playery++;
}
//红蓝门
else if (map[playerx][playery + 1] == 2 || map[playerx][playery + 1] == 3) {
if (map[playerx][playery + 1] == 2 && player.Num_Blue_Key) {
player.Num_Blue_Key--;
map[playerx][playery + 1] = 99;
map[playerx][playery] = 1;
playery++;
}
if (map[playerx][playery + 1] == 3 && player.Num_Yellow_Key) {
player.Num_Yellow_Key--;
map[playerx][playery + 1] = 99;
map[playerx][playery] = 1;
playery++;
}
}
//红蓝水晶
//红水晶+2攻击
//蓝水晶+2防御
else if (map[playerx][playery + 1] == 4 || map[playerx][playery + 1] == 5) {
if (map[playerx][playery + 1] == 4)
player.DEF += 2;
else if (map[playerx][playery + 1] == 5)
player.ATT += 2;
map[playerx][playery + 1] = 99;
map[playerx][playery] = 1;
playery++;
}
break;
}
SetMap();  //重新显示地图
SetPlayer(); //重新显示角色信息
}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144213.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号