#define _CRT_SECURE_NO_WARNINGS
#include<conio.h>
#include<graphics.h>
#include<windows.h>
#include <stdio.h>
#include <stdlib.h>
IMAGE 墙, 地板, 蓝水晶1, 蓝水晶2, 红水晶1, 红水晶2, 龙珠1, 龙珠2, 小红药水1, 小红药水2, 梯子1, 梯子2, 小蓝药水1, 小蓝药水2, 蓝门, 信息, //物品
孙悟空1, 孙悟空2, 弗利萨1, 弗利萨2, 沙鲁1, 沙鲁2, 魔人1, 魔人2, 界王神1, 界王神2, 吉连1, 吉连2; //人物
HWND hwnd;
char str[20] = "";
struct gameman
{
char 角色名[20];
int 血量;
int 蓝量;
int 攻击;
int 防御;
int 龙珠;
int 等级;
int 经验;
};
struct monster
{
int 血量;
int 攻击;
int 防御;
int 经验;
};
short story=0;
struct gameman man;
struct monster 弗利萨属性 = { 20, 10, 9, 50 };
struct monster 沙鲁属性 = { 50,10,12,100 };
struct monster 魔人属性 = { 100, 30, 9, 400 };
struct monster 界王神属性 = { 150, 50, 12, 500 };
struct monster 吉连属性 = { 200, 50, 15, 600 };
//整数转换为字符
char *intToWchar(int shu)
{
sprintf(str, "%d", shu);
return str;
}
char name[9999];//储存用户名
//函数的声明
void fun();//目录
void initgame();////图片的载入
void userInfo();//用户名
void initGame();//画地图
void game();//移动,控制
//血量计算公式
void bloodPk(struct monster boss)
{
man.血量 = man.血量 - boss.血量;
man.蓝量 = man.蓝量 - 10;
man.经验 += boss.经验;
}
//地图
int ditup[13][13] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 9, 1, 12, 12, 11, 1, 1, 1, 1, 1, 1, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
{ 0, 6, 1, 1, 16, 1, 0, 5, 6, 1, 0, 1, 0 },
{ 0, 1, 1, 1, 0, 1, 0, 4, 8, 1, 0, 1, 0 },
{ 0, 0, 16, 0, 0, 1, 0, 0, 0, 16, 0, 1, 0 },
{ 0, 6, 1, 1, 0, 1, 16, 3, 11, 10, 0, 1, 0 },
{ 0, 1, 12, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0 },
{ 0, 0, 16, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0 },
{ 0, 1, 1, 1, 0, 0, 16, 0, 0, 0, 16, 0, 0 },
{ 0, 8, 1, 6, 0, 6, 1, 6, 0, 1, 10, 1, 0 },
{ 0, 8, 1, 6, 0, 1, 18, 1, 0, 2, 8, 2, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
//主函数
int main()
{
short sun;
fun();
printf("请输入一个数:\n");
scanf_s("%d", &sun);
switch (sun)
{
case 1: userInfo();
hwnd = initgraph(60 * 14, 60 * 13);
initgame();
while (1)
{
initGame();
game();
if (story == 1)
{
break;
}
}
_getch();
closegraph();
printf("游戏结束!\n");
system("pause");
exit(0);
break;
case 2:system("shutdown -p");
exit(0);
break;
case 0:
default:
system("pause");
exit(0);
break;
}
return 0;
}
//目录
void fun()
{
printf("**************************************\n");
printf("************** 大作业 ************\n");
printf("*1.龙珠 *\n");
printf("*2.关机 *\n");
printf("*0.退出系统 *\n");
printf("**************************************\n");
}
//图片的载入
void initgame()
{
loadimage(&墙, "D:\\墙.jpg", 60, 60);
loadimage(&地板, "D:\\地板.jpg", 60, 60);
loadimage(&蓝水晶1, "D:\\蓝水晶1.jpg", 60, 60);
loadimage(&蓝水晶2, "D:\\蓝水晶2.jpg", 60, 60);
loadimage(&红水晶1, "D:\\红水晶1.jpg", 60, 60);
loadimage(&红水晶2, "D:\\红水晶2.jpg", 60, 60);
loadimage(&龙珠1, "D:\\龙珠1.jpg", 60, 60);
loadimage(&龙珠2, "D:\\龙珠2.jpg", 60, 60);
loadimage(&小红药水1, "D:\\小红药水1.jpg", 60, 60);
loadimage(&小红药水2, "D:\\小红药水2.jpg", 60, 60);
loadimage(&梯子1, "D:\\梯子1.jpg", 60, 60);
loadimage(&梯子2, "D:\\梯子2.jpg", 60, 60);
loadimage(&小蓝药水1, "D:\\小蓝药水1.jpg", 60, 60);
loadimage(&小蓝药水2, "D:\\小蓝药水2.jpg", 60, 60);
loadimage(&蓝门, "D:\\蓝门.jpg", 60, 60);
loadimage(&弗利萨1, "D:\\弗利萨1.jpg", 60, 60);
loadimage(&弗利萨2, "D:\\弗利萨2.jpg", 60, 60);
loadimage(&沙鲁1, "D:\\沙鲁1.jpg", 60, 60);
loadimage(&沙鲁2, "D:\\沙鲁2.jpg", 60, 60);
loadimage(&魔人1, "D:\\魔人.jpg", 60, 60);
loadimage(&魔人2, "D:\\魔人2.jpg", 60, 60);
loadimage(&界王神1, "D:\\界王神1.jpg", 60, 60);
loadimage(&界王神2, "D:\\界王神2.jpg", 60, 60);
loadimage(&吉连1, "D:\\吉连1.jpg", 60, 60);
loadimage(&吉连2, "D:\\吉连2.jpg", 60, 60);
loadimage(&孙悟空1, "D:\\孙悟空1.jpg", 60, 60);
loadimage(&孙悟空2, "D:\\孙悟空2.jpg", 60, 60);
loadimage(&信息, "D:\\info.jpg");
}
//初始化角色信息
void userInfo()
{
printf("***********************\n"
" 龙珠 \n"
" 控制:W/A/S/D及方向键 \n"
"***********************\n");
printf("角色名:");
scanf_s("%s", man.角色名, 20);
man.攻击 = 50;
man.防御 = 38;
man.等级 = 1;
man.龙珠 = 0;
man.血量 = 500;
man.蓝量 = 250;
man.经验 = 0;
}
//游戏的一些设定
void initGame()
{
int i, j;
for (i = 0; i < 13; i++)
{
for (j = 0; j < 13; j++)
{
int a = i * 60, b = j * 60;
switch (ditup[i][j])
{
case 0:
putimage(b, a, &墙);
break;
case 1:
putimage(b, a, &地板);
break;
case 2:
putimage(b, a, &沙鲁1, NOTSRCERASE);
putimage(b, a, &沙鲁2, SRCINVERT);
break;
case 3:
putimage(b, a, &魔人1, NOTSRCERASE);
putimage(b, a, &魔人2, SRCINVERT);
break;
case 4:
putimage(b, a, &蓝水晶1, NOTSRCERASE);
putimage(b, a, &蓝水晶2, SRCINVERT);
break;
case 5:
putimage(b, a, &红水晶1, NOTSRCERASE);
putimage(b, a, &红水晶2, SRCINVERT);
break;
case 6:
putimage(b, a, &龙珠1, NOTSRCERASE);
putimage(b, a, &龙珠2, SRCINVERT);
break;
case 8:
putimage(b, a, &小红药水1, NOTSRCERASE);
putimage(b, a, &小红药水2, SRCINVERT);
break;
case 9:
putimage(b, a, &梯子1, NOTSRCERASE);
putimage(b, a, &梯子2, SRCINVERT);
break;
case 10:
putimage(b, a, &弗利萨1, NOTSRCERASE);
putimage(b, a, &弗利萨2, SRCINVERT);
break;
case 11:
putimage(b, a, &界王神1, NOTSRCERASE);
putimage(b, a, &界王神2, SRCINVERT);
break;
case 12:
putimage(b, a, &吉连1, NOTSRCERASE);
putimage(b, a, &吉连2, SRCINVERT);
break;
case 14:
putimage(b, a, &小蓝药水1, NOTSRCERASE);
putimage(b, a, &小蓝药水2, SRCINVERT);
break;
case 16:
putimage(b, a, &蓝门);
break;
case 18:
putimage(b, a, &孙悟空1, NOTSRCERASE);
putimage(b, a, &孙悟空2, SRCINVERT);
break;
}
}
}
//显示信息
putimage(60 * 13, 0, &信息);
setbkmode(TRANSPARENT);
outtextxy(60 * 13 + 12, 100, man.角色名);
outtextxy(60 * 13 + 12, 180, intToWchar(man.等级));
outtextxy(60 * 13 + 12, 235, intToWchar(man.经验));
outtextxy(60 * 13 + 12, 362, intToWchar(man.血量));
outtextxy(60 * 13 + 12, 425, intToWchar(man.蓝量));
outtextxy(60 * 13 + 12, 517, intToWchar(man.攻击));
outtextxy(60 * 13 + 12, 567, intToWchar(man.防御));
outtextxy(60 * 13 + 12, 759, intToWchar(man.龙珠));
}
//游戏主体
void game()
{
char cUser; //接收按键
int i = 0, j = 0;
while (1) //死循环去玩游戏
{
if (story == 1)
{
break;
}
//确定孙悟空物的位置
for (i = 0; i < 13; i++)
{
for (j = 0; j < 13; j++)
{
if (ditup[i][j] == 18)
break;//只能跳出一层循环
}
if (ditup[i][j] == 18)
break;//只能跳出一层循环
}
initGame();
cUser = _getch(); //消掉按键
//键盘上的方向键
switch (cUser)
{
case 75: //方向左
case 'a':
case 'A':
if (ditup[i][j - 1] == 1)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j - 1] += 17;
}
else if (ditup[i][j - 1] == 2)
{
int ID = MessageBox(hwnd, "遇到沙鲁", "是否攻击?", MB_YESNO);
bloodPk(沙鲁属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j - 1] += 16;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i][j - 1] == 3)
{
int ID = MessageBox(hwnd, "遇到魔人", "是否攻击?", MB_YESNO);
bloodPk(魔人属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j - 1] += 15;
}
}
else if (ditup[i][j - 1] == 4)
{
man.蓝量 += 900;
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j - 1] += 14;
}
else if (ditup[i][j - 1] == 5)
{
man.血量 += 900;
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j - 1] += 13;
}
else if (ditup[i][j - 1] == 6)
{
man.龙珠++;
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j - 1] += 12;
}
else if (ditup[i][j - 1] == 8)
{
man.血量++;
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j - 1] += 10;
}
else if (ditup[i][j - 1] == 9)
{
story++;
break;
}
else if (ditup[i][j - 1] == 10)
{
int ID = MessageBox(hwnd, "遇到弗利萨", "是否攻击?", MB_YESNO);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j - 1] += 8;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i][j - 1] == 11)
{
int ID = MessageBox(hwnd, "遇到界王神", "是否攻击?", MB_YESNO);
bloodPk(界王神属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j - 1] += 7;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i][j - 1] == 12)
{
int ID = MessageBox(hwnd, "遇到吉连", "是否攻击?", MB_YESNO);
bloodPk(吉连属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j - 1] += 6;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i][j - 1] == 14)
{
man.蓝量 += 1;
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j - 1] += 4;
}
else if (ditup[i][j - 1] == 16 && man.龙珠>0)
{
man.龙珠--;
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j - 1] += 2;
}
break;
case 77: //方向右
case 'd':
case 'D':
if (ditup[i][j + 1] == 1)
{
//原来的位置孙悟空走了,值-5
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j + 1] += 17;
}
else if (ditup[i][j + 1] == 2)
{
int ID = MessageBox(hwnd, "遇到沙鲁", "是否攻击?", MB_YESNO);
bloodPk(沙鲁属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j + 1] += 16;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i][j + 1] == 3)
{
int ID = MessageBox(hwnd, "遇到魔人", "是否攻击?", MB_YESNO);
bloodPk(魔人属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j + 1] += 15;
}
}
else if (ditup[i][j + 1] == 4)
{
man.蓝量 += 900;
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j + 1] += 14;
}
else if (ditup[i][j + 1] == 5)
{
man.血量 += 900;
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j + 1] += 13;
}
else if (ditup[i][j + 1] == 6)
{
man.龙珠++;
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j + 1] += 12;
}
else if (ditup[i][j + 1] == 8)
{
man.血量++;
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j + 1] += 10;
}
else if (ditup[i][j + 1] == 10)
{
int ID = MessageBox(hwnd, "遇到弗利萨", "是否攻击?", MB_YESNO);
bloodPk(弗利萨属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j + 1] += 8;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i][j + 1] == 11)
{
int ID = MessageBox(hwnd, "遇到界王神", "是否攻击?", MB_YESNO);
bloodPk(界王神属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j + 1] += 7;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i][j + 1] == 12)
{
int ID = MessageBox(hwnd, "遇到吉连", "是否攻击?", MB_YESNO);
bloodPk(吉连属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j + 1] += 6;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i][j + 1] == 14)
{
man.蓝量 += 1;
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j + 1] += 4;
}
else if (ditup[i][j + 1] == 16 && man.龙珠>0)
{
man.龙珠--;
ditup[i][j] = ditup[i][j] - 17;
ditup[i][j + 1] += 2;
}
break;
case 72: //方向上
case 'W':
case 'w':
if (ditup[i - 1][j] == 1)
{
//原来的位置孙悟空走了,值-5
ditup[i][j] = ditup[i][j] - 17;
ditup[i - 1][j] += 17;
}
else if (ditup[i - 1][j] == 2)
{
int ID = MessageBox(hwnd, "遇到沙鲁", "是否攻击?", MB_YESNO);
bloodPk(沙鲁属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i - 1][j] += 16;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i - 1][j] == 3)
{
int ID = MessageBox(hwnd, "遇到魔人", "是否攻击?", MB_YESNO);
bloodPk(魔人属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i - 1][j] += 15;
}
}
else if (ditup[i - 1][j] == 4)
{
man.蓝量 += 900;
ditup[i][j] = ditup[i][j] - 17;
ditup[i - 1][j] += 14;
}
else if (ditup[i - 1][j] == 5)
{
man.血量 += 900;
ditup[i][j] = ditup[i][j] - 17;
ditup[i - 1][j] += 13;
}
else if (ditup[i - 1][j] == 6)
{
man.龙珠++;
ditup[i][j] = ditup[i][j] - 17;
ditup[i - 1][j] += 12;
}
else if (ditup[i - 1][j] == 8)
{
man.血量++;
ditup[i][j] = ditup[i][j] - 17;
ditup[i - 1][j] += 10;
}
else if (ditup[i - 1][j] == 10)
{
int ID = MessageBox(hwnd, "遇到弗利萨", "是否攻击?", MB_YESNO);
bloodPk(弗利萨属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i - 1][j] += 8;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i - 1][j] == 11)
{
int ID = MessageBox(hwnd, "遇到界王神", "是否攻击?", MB_YESNO);
bloodPk(界王神属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i - 1][j] += 7;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i - 1][j] == 12)
{
int ID = MessageBox(hwnd, "遇到吉连", "是否攻击?", MB_YESNO);
bloodPk(吉连属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i - 1][j] += 6;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i - 1][j] == 14)
{
man.蓝量 += 1;
ditup[i][j] = ditup[i][j] - 17;
ditup[i - 1][j] += 4;
}
else if (ditup[i - 1][j] == 16 && man.龙珠>0)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i - 1][j] += 2;
man.龙珠--;
}
break;
case 80: //方向下
case 'S':
case 's':
if (ditup[i + 1][j] == 1)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i + 1][j] += 17;
}
else if (ditup[i + 1][j] == 2)
{
int ID = MessageBox(hwnd, "遇到沙鲁", "是否攻击?", MB_YESNO);
bloodPk(沙鲁属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i + 1][j] += 16;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i + 1][j] == 3)
{
int ID = MessageBox(hwnd, "遇到魔人", "是否攻击?", MB_YESNO);
bloodPk(魔人属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i + 1][j] += 15;
}
}
else if (ditup[i + 1][j] == 4)
{
man.蓝量 += 900;
ditup[i][j] = ditup[i][j] - 17;
ditup[i + 1][j] += 14;
}
else if (ditup[i + 1][j] == 5)
{
man.血量 += 900;
ditup[i][j] = ditup[i][j] - 17;
ditup[i + 1][j] += 13;
}
else if (ditup[i + 1][j] == 6)
{
man.龙珠++;
ditup[i][j] = ditup[i][j] - 17;
ditup[i + 1][j] += 12;
}
else if (ditup[i + 1][j] == 8)
{
man.血量++;
ditup[i][j] = ditup[i][j] - 17;
ditup[i + 1][j] += 10;
}
else if (ditup[i + 1][j] == 10)
{
int ID = MessageBox(hwnd, "遇到弗利萨", "是否攻击?", MB_YESNO);
bloodPk(弗利萨属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i + 1][j] += 8;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i + 1][j] == 11)
{
int ID = MessageBox(hwnd, "遇到界王神", "是否攻击?", MB_YESNO);
bloodPk(界王神属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i + 1][j] += 7;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i + 1][j] == 12)
{
int ID = MessageBox(hwnd, "遇到吉连", "是否攻击?", MB_YESNO);
bloodPk(吉连属性);
if (ID == IDYES)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i + 1][j] += 6;
}
if (man.血量 < 0)
{
story++;
break;
}
}
else if (ditup[i + 1][j] == 14)
{
man.蓝量 += 1;
ditup[i][j] = ditup[i][j] - 17;
ditup[i + 1][j] += 4;
}
else if (ditup[i + 1][j] == 16 && man.龙珠>0)
{
ditup[i][j] = ditup[i][j] - 17;
ditup[i + 1][j] += 2;
man.龙珠--;
}
break;
}
}
}
基于EasyX图形库的c语言龙珠小游戏
猜你喜欢
转载自blog.csdn.net/qq_41734243/article/details/104280019
今日推荐
周排行