基于EasyX图形库的c语言龙珠小游戏

#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;
		}
	}
}
发布了23 篇原创文章 · 获赞 26 · 访问量 1447

猜你喜欢

转载自blog.csdn.net/qq_41734243/article/details/104280019