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] = '\0';
	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(); //重新显示角色信息
	}
}

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android严苛模式StrictMode使用详解[通俗易懂]

    Android严苛模式StrictMode使用详解[通俗易懂]StrictMode类是Android 2.3(API9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的。举个例子来说,如果开发者在UI线

    2022年7月3日
    24
  • 启动mysql的命令 linux命令,linux如何启动mysql服务 linux启动mysql服务命令是什么(图文)…

    启动mysql的命令 linux命令,linux如何启动mysql服务 linux启动mysql服务命令是什么(图文)…mysql 数据库是一种开放源代码的关系型数据库管理系统 有很多朋友都在使用 一些在 linux 系统上安装了 mysql 数据库的朋友 却不知道该如何对 mysql 数据库进行配置 那么 linux 该如何启动 mysql 服务呢 接下来小编就给大家带来 linux 启动 mysql 服务的命令教程 R1d 电脑 数码 手机应用问题解决的 IT 技术网站 seo 云狐网具体步骤如下 R1d 电脑 数码 手机应用问题解决的 IT 技术网

    2025年8月31日
    4
  • autocomplete=”off” inpu属性

    autocomplete=”off” inpu属性

    2021年10月15日
    61
  • matlab 计算变异系数,[转载]用Matlab编的计算结构可靠指标的改进一次二阶矩法程序(验算点法)…

    matlab 计算变异系数,[转载]用Matlab编的计算结构可靠指标的改进一次二阶矩法程序(验算点法)…题目:编制改进一次二阶矩法计算可靠指标的程序,并给出算例,要求提供源程序,算法语言不限。选取的算例为:z=g(x,y)=x*y-1140,其中x,y服从正态分布,μx=38,Vx=0.1,μy=38,Vy=0.05本程序采用Matlab编写。选取β1=3.0,β2=2.5计算结果为:可靠指标β=4.2672,最终验算点为:(22.8430,49.9060),在验算点处功能函数值为:1.2354e…

    2022年5月22日
    47
  • Java XLSTransformer生成excel文件

    Java XLSTransformer生成excel文件把页面的数据导出excel数据 然后进入struts2action packagecomxx.emidas.activity.activity.ajax;importcom.xx.combiz.spring.util.LionConfigUtils;importcom.xx.e

    2022年7月24日
    25
  • 【Unity3D】自学之路2.0

    【Unity3D】自学之路2.0一、前言原文主要讲的是如何从零基础入门,然后一步一步进阶的文章,包括很多学习资料,学习的网址,研究方向等,内容还是比较全面的。大家多多支持一些克森大神,关注一下他的公众号。这篇文章就将原文的内容进行总结合并,然后转载过来跟大家一起学习。二、原文原文地址:https://mp.weixin.qq.com/s/nAaGAzT7NIPH4v6YOzBCRg原文作者:克森原文出处:微…

    2022年6月1日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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