很早就很想写这个,今天终于写完了。
游戏截图:



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










