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

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

游戏截图:

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

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

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;

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

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] = '';  	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,然后把对应位置上的门变为空地。

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

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

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/483953.html

(0)
上一篇 2020年11月10日
下一篇 2020年11月10日

精彩推荐