基於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;
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章