#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<conio.h>
#define MB_OK 0x00000000L
int Map[12][12] =
{
0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,10,0,1,1,5,1,1,1,0,
0,1,1,1,0,1,1,0,1,1,3,0,
0,1,0,1,0,6,1,0,1,3,4,2,
0,1,0,1,5,4,1,0,1,1,3,0,
0,0,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,5,6,0,1,1,1,1,0,
0,1,1,1,0,0,0,6,1,1,1,0,
0,1,1,1,7,4,5,1,1,1,9,0,
0,1,1,1,0,0,0,6,1,1,1,0,
0,8,1,1,6,1,0,1,1,1,1,0,
0,0,0,0,0,0,0,0,0,0,0,0
};
struct Role
{
char 角色名[20];
int 血量;
int 蓝量;
int 防御;
int 攻击;
int 蓝钥匙;
int 黄钥匙;
int 等级;
int 经验;
}role;
struct monster
{
int 攻击;
int 血量;
int 防御;
int 经验;
};
struct monster guard = { 50,15,10,50 };
struct monster 李文振 = { 70,10,20,25 };
IMAGE img[20], roleInfo;
HWND hwnd;
void inputRoleName()
{
printf("请输入角色名称:");
scanf("%s", role.角色名);
role.攻击 = 40;
role.防御 = 100;
role.等级 = 0;
role.黄钥匙 = 0;
role.蓝钥匙 = 0;
role.蓝量 = 70;
role.血量 = 135;
role.经验 = 0;
}
//批量加载图片
void loadResource()
{
loadimage(&roleInfo, "info.jpg",60,60*12);
for (int i = 0; i < 11; i++)
{
char fileName[10] = "";
sprintf(fileName, "%d.jpg", i);
loadimage(img + i, fileName, 60, 60);
}
}
//把整形转换为字符串
char str[20] = "";
char* intTowchar(int xNum)
{
sprintf(str, "%d", xNum);
return str;
}
//加载地图
void drawMap()
{
int i, j;
int x, y;
for (i = 0; i < 12; i++)
{
for (j = 0; j < 12; j++)
{
x = j * 60;
y = i * 60;
putimage(x, y, &img[Map[i][j]]);
}
}
putimage(60 * 12, 0, &roleInfo);
outtextxy(60 * 12 + 17, 60, role.角色名);
outtextxy(60 * 12 + 25, 138, intTowchar(role.等级));
outtextxy(60 * 12 + 25, 190, intTowchar(role.经验));
outtextxy(60 * 12 + 20, 325, intTowchar(role.血量));
outtextxy(60 * 12 + 20, 380, intTowchar(role.蓝量));
outtextxy(60 * 12 + 22, 480, intTowchar(role.攻击));
outtextxy(60 * 12 + 22, 535, intTowchar(role.防御));
outtextxy(60 * 12 + 25, 660, intTowchar(role.黄钥匙));
}
//设置一套与怪物的PK系统
bool PK(struct monster 怪物)
{
int zhandouli,shijixieliang1,shijixieliang2;//战斗力,实际血量
zhandouli = role.攻击 + role.蓝量 * 0.4;//人物的
shijixieliang1 = 怪物.血量 + 怪物.防御 * 0.3;//怪物的
shijixieliang2 = role.血量 + role.防御 * 0.3;//人物的
if (zhandouli > 怪物.攻击)
{
role.经验 += 怪物.经验;
role.血量 -= (怪物.攻击 * 0.1);
if (role.血量 > 0)
return true;
else return false;
}
else
{
role.血量 -= 怪物.攻击 - role.防御 * 0.3;
role.蓝量 -= (怪物.攻击 - role.防御 * 0.3) * 0.3;
role.经验 += 怪物.经验;
if (role.血量 > 0)
return true;
else return false;
}
}
//开始写键盘操作部分
void KeyDown()
{
char userKey;
int i, j, m1,m2, n1,n2;
for (i=0; i < 12; i++)
{
for (j=0; j < 12; j++)
{
if (Map[i][j] == 9)
break;
}
if (Map[i][j] == 9)
break;
}
for (m1 = 0; m1 < 12; m1++)
{
for (n1 = 0; n1 < 12; n1++)
{
if (Map[m1][n1] == 8)
break;
}
if (Map[m1][n1] == 8)
break;
}
for (m2 = 0; m2 < 12; m2++)
{
for (n2 = 0; n2 < 12; n2++)
{
if (Map[m2][n2] == 10)
break;
}
if (Map[m2][n2] == 10 )
break;
}
userKey = _getch();//_getch()表示不可见输入
switch (userKey)
{
case 'W':
case 'w':
case 72: //数字是指小键盘的上下左右
if (Map[i-1][j] == 1)
{
Map[i][j] = 1;
Map[i-1][j] = 9;
}
else if (Map[i - 1][j] == 6)
{
Map[i - 1][j] = 9;
Map[i][j] = 1;
role.黄钥匙++;
}
else if (Map[i-1][j] == 5)
{
if (role.黄钥匙 != 0)
{
Map[i-1][j] = 9;
Map[i][j] = 1;
role.黄钥匙--;
}
}
else if (Map[i - 1][j] == 4)
{
int ID = MessageBox(hwnd, "遇到辅导员了!", "是否打死?", MB_YESNO);
//MessageBox是弹出框,括号内hwnd指在句柄hwnd上方弹出,MB_YESNO是判断是或者否作为ID的返回值
if (ID == IDYES)
{
if (PK(李文振) == true)
{
Map[i - 1][j] = 9;
Map[i][j] = 1;
}
else
{
int ID1 = MessageBox(hwnd, "重开吧", "你被干掉了!", MB_YESNO);
if (ID1 == IDYES) return;
else closegraph;
}
}
}
else if (Map[i - 1][j] == 3)
{
int ID = MessageBox(hwnd, "遇到保安大爷了!", "是否打死?", MB_YESNO);
//MessageBox是弹出框,括号内hwnd指在句柄hwnd上方
if (ID == IDYES)
{
if (PK(李文振) == true)
{
Map[i - 1][j] = 9;
Map[i][j] = 1;
}
else
{
int ID1 = MessageBox(hwnd, "重开吧", "你被干掉了!", MB_YESNO);
if (ID1 == IDYES) return;
else closegraph;
}
}
}
else if (Map[i - 1][j] == 3)
{
int ID = MessageBox(hwnd, "遇到保安大爷了!", "是否打死?", MB_YESNO);
//MessageBox是弹出框,括号内hwnd指在句柄hwnd上方弹出,MB_YESNO是判断是或者否作为ID的返回值
if (ID == IDYES)
{
if (PK(guard) == true)
{
Map[i - 1][j] = 9;
Map[i][j] = 1;
}
else
{
int ID1 = MessageBox(hwnd, "重开吧", "你被干掉了!", MB_YESNO);
if (ID1 == IDYES) return;
else closegraph;
}
}
}
else if (Map[i - 1][j] == 4)
{
int ID = MessageBox(hwnd, "遇到保安大爷了!", "是否打死?", MB_YESNO);
//MessageBox是弹出框,括号内hwnd指在句柄hwnd上方弹出,MB_YESNO是判断是或者否作为ID的返回值
if (ID == IDYES)
{
if (PK(guard) == true)
{
Map[i - 1][j] = 9;
Map[i][j] = 1;
}
else
{
int ID1 = MessageBox(hwnd, "重开吧", "你被干掉了!", MB_YESNO);
if (ID1 == IDYES) return;
else closegraph;
}
}
}
else if (Map[i - 1][j] == 7)
{
int ID = MessageBox(hwnd, "是否喝掉药水", "捡到回血药水", MB_YESNO);
if (ID == IDYES)
{
role.血量 += 5;
Map[i - 1][j] = 9;
Map[i][j] = 1;
}
else
{
Map[i - 1][j] = 9;
Map[i][j] = 1;
}
}
if (Map[i - 1][j] == Map[m1][n1])
{
Map[i][j] = 1;
Map[m2][n2 - 1] = 9;
}
else if (Map[i - 1][j] == Map[m2][n2])
{
Map[i][j] = 1;
Map[m1][n1 + 1] = 9;
}
else if (Map[i - 1][j] == 2)
{
if (role.经验 >= 225)
{
Map[i - 1][j] = 9;
Map[i][j] = 1;
int ID = MessageBox(hwnd, "历经千辛万苦,你终于逃出了校门!\n是否要开启下一关?", "恭喜!", MB_YESNO);
if (ID == IDYES)
MessageBox(hwnd, "下一关还没做呢。", "抱歉!", MB_OK);
else closegraph();
}
else
{
MessageBox(hwnd, "经验不够翻出大门,再去赚点儿吧!", "", MB_OK);
if (Map[i][j-1] == 1)
{
Map[i][j] = 1;
Map[i][j-1] = 9;
}
else if (Map[i][j-1] == 6)
{
Map[i][j-1] = 9;
Map[i][j] = 1;
role.黄钥匙++;
}
else if (Map[i][j-1] == 5)
{
if (role.黄钥匙 != 0)
{
Map[i][j-1] = 9;
Map[i][j] = 1;
role.黄钥匙--;
}
}
else if (Map[i][j - 1] == 4)
{
int ID = MessageBox(hwnd, "遇到辅导员了!", "是否打死?", MB_YESNO);
if (ID == IDYES)
{
if (PK(李文振) == true)
{
Map[i][j - 1] = 9;
Map[i][j] = 1;
}
else
{
int ID1 = MessageBox(hwnd, "你被干掉了!", "重开吧", MB_YESNO);
if (ID1 == IDYES) return;
else closegraph;
}
}
}
else if (Map[i][j - 1] == 3)
{
int ID = MessageBox(hwnd, "遇到保安大爷了!", "是否打死?", MB_YESNO);
if (ID == IDYES)
{
if (PK(guard) == true)
{
Map[i][j - 1] = 9;
Map[i][j] = 1;
}
else
{
int ID1 = MessageBox(hwnd, "你被干掉了!", "重开吧", MB_YESNO);
if (ID1 == IDYES) return;
else closegraph;
}
}
}
else if (Map[i][j - 1] == 7)
{
int ID = MessageBox(hwnd, "是否喝掉药水", "捡到回血药水", MB_YESNO);
if (ID == IDYES)
{
role.血量 += 5;
Map[i][j - 1] = 9;
Map[i][j] = 1;
}
else
{
Map[i][j - 1] = 9;
Map[i][j] = 1;
}
}
else if (Map[i][j - 1] == Map[m1][n1])
{
Map[i][j] = 1;
Map[m2][n2 - 1] = 9;
}
else if (Map[i][j - 1] == Map[m2][n2])
{
Map[i][j] = 1;
Map[m1][n1 + 1] = 9;
}
else if (Map[i][j - 1] == 2)
{
if (role.经验 >= 225)
{
Map[i][j - 1] = 9;
Map[i][j] = 1;
int ID = MessageBox(hwnd, "历经千辛万苦,你终于逃出了校门!\n是否要开启下一关?", "恭喜!", MB_YESNO);
if (ID == IDYES)
MessageBox(hwnd, "下一关还没做呢。", "抱歉!", MB_OK);
else closegraph();
}
else
{
MessageBox(hwnd, "经验不够翻出大门,再去赚点儿吧!", "", MB_OK);
}
}
break;
case 'D':
case 'd':
case 77:
if (Map[i][j+1] == 1)
{
Map[i][j] = 1;
Map[i][j+1] = 9;
}
else if (Map[i][j+1] == 6)
{
Map[i][j+1] = 9;
Map[i][j] = 1;
role.黄钥匙++;
}
else if (Map[i][j+1] == 5)
{
if (role.黄钥匙 != 0)
{
Map[i][j+1] = 9;
Map[i][j] = 1;
role.黄钥匙--;
}
}
else if (Map[i][j + 1] == 4)
{
int ID = MessageBox(hwnd, "遇到辅导员了!", "是否打死?", MB_YESNO);
//MessageBox是弹出框,括号内hwnd指在句柄hwnd上方弹出,MB_YESNO是判断是或者否作为ID的返回值
if (ID == IDYES)
{
if (PK(李文振) == true)
{
Map[i][j + 1] = 9;
Map[i][j] = 1;
}
else
{
int ID1 = MessageBox(hwnd, "你被干掉了!", "重开吧", MB_YESNO);
if (ID1 == IDYES) return;
else closegraph;
}
}
}
else if (Map[i][j + 1] == 3)
{
int ID = MessageBox(hwnd, "遇到保安大爷了!", "是否打死?", MB_YESNO);
//MessageBox是弹出框,括号内hwnd指在句柄hwnd上方弹出,MB_YESNO是判断是或者否作为ID的返回值
if (ID == IDYES)
{
if (PK(guard) == true)
{
Map[i][j + 1] = 9;
Map[i][j] = 1;
}
else
{
int ID1 = MessageBox(hwnd, "你被干掉了!", "重开吧", MB_YESNO);
if (ID1 == IDYES) return;
else closegraph;
}
}
}
else if (Map[i][j + 1] == 7)
{
int ID = MessageBox(hwnd, "是否喝掉药水", "捡到回血药水", MB_YESNO);
if (ID == IDYES)
{
role.血量 += 5;
Map[i][j + 1] = 9;
Map[i][j] = 1;
}
else
{
Map[i][j + 1] = 9;
Map[i][j] = 1;
}
}
else if (Map[i][j + 1] == Map[m1][n1])
{
Map[i][j] = 1;
Map[m2][n2 - 1] = 9;
}
else if (Map[i][j + 1] == Map[m2][n2])
{
Map[i][j] = 1;
Map[m1][n1 + 1] = 9;
}
else if (Map[i][j + 1] == 2)
{
if (role.经验 >= 225)
{
Map[i][j + 1] = 9;
Map[i][j] = 1;
int ID = MessageBox(hwnd, "历经千辛万苦,你终于逃出了校门!\n是否要开启下一关?", "恭喜!", MB_YESNO);
if (ID == IDYES)
MessageBox(hwnd, "下一关还没做呢。", "抱歉!", MB_OK);
else closegraph();
}
else
{
MessageBox(hwnd, "经验不够翻出大门,再去赚点儿吧!", "", MB_OK);
}
}
break;
case 'S':
case 's':
case 80:
if (Map[i+1][j] == 1)
{
Map[i][j] = 1;
Map[i+1][j] = 9;
}
else if (Map[i+1][j] == 6)
{
Map[i+1][j] = 9;
Map[i][j] = 1;
role.黄钥匙++;
}
else if (Map[i+1][j] == 5)
{
if (role.黄钥匙 != 0)
{
Map[i+1][j] = 9;
Map[i][j] = 1;
role.黄钥匙--;
}
}
else if (Map[i + 1][j] == 4)
{
int ID = MessageBox(hwnd, "遇到辅导员了!", "是否打死?", MB_YESNO);
//MessageBox是弹出框,括号内hwnd指在句柄hwnd上方弹出,MB_YESNO是判断是或者否作为ID的返回值
if (ID == IDYES)
{
if (PK(李文振) == true)
{
Map[i + 1][j] = 9;
Map[i][j] = 1;
}
else
{
int ID1 = MessageBox(hwnd, "你被干掉了!", "重开吧", MB_YESNO);
if (ID1 == IDYES) return;
else closegraph();
}
}
}
else if (Map[i + 1][j] == 3)
{
int ID = MessageBox(hwnd, "遇到保安大爷了!", "是否打死?", MB_YESNO);
if (ID == IDYES)
{
if (PK(guard) == true)
{
Map[i + 1][j] = 9;
Map[i][j] = 1;
}
else
{
int ID1 = MessageBox(hwnd, "你被干掉了!", "重开吧", MB_YESNO);
if (ID1 == IDYES) return;
else closegraph();
}
}
}
else if (Map[i + 1][j] == 7)
{
int ID = MessageBox(hwnd, "是否喝掉药水", "捡到回血药水", MB_YESNO);
if (ID == IDYES)
{
role.血量 += 5;
Map[i + 1][j] = 9;
Map[i][j] = 1;
}
else
{
Map[i + 1][j] = 9;
Map[i][j] = 1;
}
}
else if (Map[i + 1][j] == Map[m1][n1])
{
Map[i][j] = 1;
Map[m2][n2 - 1] = 9;
}
else if (Map[i + 1][j] == Map[m2][n2])
{
Map[i][j] = 1;
Map[m1][n1 + 1] = 9;
}
else if (Map[i + 1][j] == 2)
{
if (role.经验 >= 225)
{
Map[i + 1][j] = 9;
Map[i][j] = 1;
int ID = MessageBox(hwnd, "历经千辛万苦,你终于逃出了校门!\n是否要开启下一关?", "恭喜!", MB_YESNO);
if (ID == IDYES)
MessageBox(hwnd, "下一关还没做呢。", "抱歉!", MB_OK);
else closegraph();
}
else
{
MessageBox(hwnd, "经验不够翻出大门,再去赚点儿吧!", "", MB_OK);
}
}
break;
}
}
int main()
{
inputRoleName();
loadResource();
hwnd=initgraph(60 * 13, 60 * 12);
while (1)
{
drawMap();
KeyDown();
}
closegraph();
return 0;
}