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

2020-02-28 14:00:54刘景俊

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

游戏截图:

编译环境: 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] = '';
	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;
			}
 
		}
	}
}