C语言魔塔游戏的实现代码

 更新时间:2020年02月28日 10:53:15   作者:张宜强  
这篇文章主要介绍了C语言魔塔游戏的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

游戏截图:

编译环境: VS2017

游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。觉得麻烦的直接下载C-mota_jb51.rar

解压后点击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;

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

函数:

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;

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

此处有一个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(); //重新显示角色信息
	}
}

到此这篇关于C语言魔塔游戏的实现代码的文章就介绍到这了,更多相关C语言魔塔游戏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入理解memmove()与memcpy()的区别以及实现方法

    深入理解memmove()与memcpy()的区别以及实现方法

    本篇文章是对memmove()与memcpy()的区别以及实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 《C++ primer plus》读书笔记(二)

    《C++ primer plus》读书笔记(二)

    本读书笔记是读了《C++ primer plus(第六版)》第五至八章的学习笔记。是C++读书笔记系列的第二篇。复习C++基础知识的可以瞄瞄。
    2014-10-10
  • C语言入门篇--四大常量(字面,const修饰,宏,枚举)及标识符

    C语言入门篇--四大常量(字面,const修饰,宏,枚举)及标识符

    本篇文章是c语言基础篇,主要讲述一下常量,常量即不可被直接修改的量(const修饰的常变量可间接修改,后续文章会继续说明)请大家持续关注脚本之家
    2021-08-08
  • C++ OpenCV实现物体尺寸测量示例详解

    C++ OpenCV实现物体尺寸测量示例详解

    本文主要介绍了利用OpenCV对物体的尺寸进行测量,即先定位到待测物体的位置,然后测量物体的宽高。感兴趣的同学可以跟随小编一起学习学习
    2022-01-01
  • C语言 如何求两整数的最大公约数与最小公倍数

    C语言 如何求两整数的最大公约数与最小公倍数

    这篇文章主要介绍了C语言中如何求两整数的最大公约数与最小公倍数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C语言经典顺序表真题演练讲解

    C语言经典顺序表真题演练讲解

    程序中经常需要将一组数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化,顺序表则是将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示
    2022-04-04
  • C++实现马踏棋盘(骑士周游)

    C++实现马踏棋盘(骑士周游)

    这篇文章主要为大家详细介绍了C++实现马踏棋盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C语言中bool变量的深入理解

    C语言中bool变量的深入理解

    C语言中没有BOOL类型变量,它是C++独有的,由于使用BOOL类型可以使代码更具有可读性,下面这篇文章主要给大家介绍了关于C语言中bool变量的相关资料,需要的朋友可以参考下
    2021-08-08
  • C++11系列学习之类型推导

    C++11系列学习之类型推导

    这篇文章主要介绍了C++11系列学习之类型推导,文章基于C++的相关资料展开对主题的详细内容介绍,具有一定的参考价值需要的小伙伴可参考一下
    2022-04-04
  • c++ static详细使用分析

    c++ static详细使用分析

    在C++中,static是一个关键字,用于声明静态成员、静态局部变量以及静态函数,这篇文章主要介绍了c++ static详细分析,需要的朋友可以参考下
    2024-05-05

最新评论