用c语言做《变异版吃豆人小游戏》

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h> 
#include <conio.h>
#define HIGH 45
#define WIDTH 48 

struct Gamer {
    
    
	/*玩家坐标*/  //玩家无防御 
	int gamer_x;
	int gamer_y;
	int score;//计分器 
	int death;//血量 
	int monsterDeath;//杀敌数 
	int flag;//引出怪物的话
	int bullet;//区分发射子弹 1号子弹 2号子弹 3号子弹 4号子弹 
	char recordRe;//记录玩家的方向 
};

struct Gamer gamer = {
    
    //玩家初始状态 
	 22, //注意:一定要为偶数 
	 20,
	 0,
	 3,
	 0,
	 0,
	 0,
	 0,
};

struct FoodPos {
    
    
	/*食物位置*/
	int food_x;
	int food_y;

};

struct FoodPos food1 = {
    
    //食物初始位置
	 94,
	 1
};

struct FoodPos food2 = {
    
    
	66,
	30
};

struct FoodPos food3 = {
    
    
	6,
	36
};

struct FoodPos food4 = {
    
    
	66,
	4
};

struct FoodPos food5 = {
    
    
	8,
	5
};

struct FoodPos food6 = {
    
    
	94,
	28
};

struct Bullet {
    
    
	int bullet_x;
	int bullet_y;
	int breaker;
	int flag;
};

struct Bullet bullet[4] = {
    
    
	{
    
     0, 0, 0, 0},
	{
    
     0, 0, 0, 0},
	{
    
     0, 0, 0, 0},
	{
    
     0, 0, 0, 0}
};

struct AppleTree {
    
    
	/*苹果树坐标*/
	int appletree_x;
	int appletree_y;
	/*苹果树前坐标*/
	int appletree_xPre;
	int appletree_yPre;
	int health;//回复血量 
	int appletime;//每隔一定时间出现 
	int flag;//被吃标记 
};

struct AppleTree appletree = {
    
    
	46,
	28,
	46,
	28,
	1,   //恢复血量为1 
	5,    //时间间隔为5 
	0   //未被吃 
};

struct MonsterPos {
    
    
	/*怪物坐标*/
	int monster_x;
	int monster_y;
};

struct MonsterPos monster1 = {
    
    //怪物初始位置 
	6,
	4
};

struct MonsterPos monster2 = {
    
    //怪物初始位置 
	6,
	6
};

struct MonsterPos monster3 = {
    
    //怪物初始位置 
	6,
	8
};

struct MonsterPos monster4 = {
    
    //怪物初始位置 
	6,
	10
};

struct Boss {
    
    
	/*BOSS位置*/
	int boss_x;
	int boss_y;
	/*BOSS血量*/
	int boss_death;
	/*BOSS攻击力*/
	int boss_ATK;
};

void goto_XY(int x, int y)// //设置CMD窗口光标位置
{
    
    
	HANDLE hOut;
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos = {
    
     x, y };
	SetConsoleCursorPosition(hOut, pos);
}

void hide_cursor() //隐藏CMD窗口光标
{
    
    
	CONSOLE_CURSOR_INFO cci;
	cci.bVisible = FALSE;
	cci.dwSize = sizeof(cci);
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorInfo(handle, &cci);
}

//基本场景 
void Show() {
    
    

	int i, j;
	for (i = 0; i < 48; i += 1) {
    
    
		for (j = 0; j < 120; j += 2) {
    
    
			if (i != 0 && i != 47 && (j == 0 || j == 98 || j == 118)) {
    
    
				hide_cursor();
				goto_XY(j, i); //光标移动是依照空格的判断 
							   //但一个方块占俩空格 
				printf("▉");
			}
			else if (i == 0 || i == 47) {
    
    
				hide_cursor();
				goto_XY(j, i);
				hide_cursor();
				printf("▉");
			}
		}
		printf("\n");
	}


	goto_XY(102, 5);
	hide_cursor();
	printf("游戏说明:");
	goto_XY(107, 6);
	hide_cursor();
	printf("●");
	goto_XY(101, 7);
	hide_cursor();
	printf("苹果树│ 吃后可");
	goto_XY(101, 8);
	hide_cursor();
	printf("以回血,而回血");
	goto_XY(101, 9);
	hide_cursor();
	printf("量则不确定。遇");
	goto_XY(101, 10);
	hide_cursor();
	printf("到怪物记得逃跑");
	goto_XY(101, 11);
	hide_cursor();
	printf(",否则,减血。");
	goto_XY(101, 12);
	hide_cursor();
	printf("吃小草▲可以加");
	goto_XY(101, 13);
	hide_cursor();
	printf("分。当分数为10");
	goto_XY(101, 14);
	hide_cursor();
	printf("时,通关成功!");

	goto_XY(101, 16);
	hide_cursor();
	printf("注意事项:");
	goto_XY(101, 18);
	hide_cursor();
	printf("苹果树每隔一段");
	goto_XY(101, 19);
	hide_cursor();
	printf("时间会消失。怪");
	goto_XY(101, 20);
	hide_cursor();
	printf("物可追杀你,可");
	goto_XY(101, 21);
	hide_cursor();
	printf("躲避子弹。空格");
	goto_XY(101, 22);
	hide_cursor();
	printf("为召唤魔法球,");
	goto_XY(101, 23);
	hide_cursor();
	printf("魔球可控,但四");
	goto_XY(101, 24);
	hide_cursor();
	printf("个魔法球不可控");

	goto_XY(102, 27);
	hide_cursor();
	printf("分数:%d", gamer.score);

	goto_XY(102, 29);
	hide_cursor();
	printf("杀敌数:%d", gamer.monsterDeath);

	goto_XY(102, 31);
	hide_cursor();
	printf("血量:%d", gamer.death);



	if (gamer.flag == 1) {
    
    
		goto_XY(101, 42);
		hide_cursor();
		printf("怪物:菜鸡,你");
		goto_XY(101, 43);
		hide_cursor();
		printf("斗不赢我的,哈哈.");
	}
	else if (gamer.flag == 2) {
    
    
		goto_XY(101, 42);
		hide_cursor();
		printf("怪物:小伙子,你");
		goto_XY(101, 43);
		hide_cursor();
		printf("不行噢,哈哈.");
	}
	else if (gamer.flag == 3) {
    
    
		goto_XY(101, 42);
		hide_cursor();
		printf("怪物:我想让你");
		goto_XY(101, 43);
		hide_cursor();
		printf("一条胳膊,啧啧.");
	}
	else if (gamer.flag == 4) {
    
    
		goto_XY(101, 42);
		hide_cursor();
		printf("我想睡觉~~~~,好");
		goto_XY(101, 43);
		hide_cursor();
		printf("想回家 @&@!");
	}




	//	左右范围100~116且为偶数//上下范围1~46///


}

void GameOver()
{
    
    

	if (gamer.score >= 10) {
    
    
		system("cls");
		printf("  恭 喜 通 关 !\n");
		exit(0);
	}
	if (gamer.death <= 0) {
    
    
		system("cls");
		printf("  过 关 失 败 !\n");
		exit(0);
	}

}
//子弹是否消失//撞墙返1 撞怪返2 正常返0 
int IsDeathBullet(int bulletnum)
{
    
    
	//首先满足是否处于发射状态 
	if (bullet[bulletnum].breaker == 1) {
    
    
		if ((bullet[bulletnum].bullet_y <= 46 && bullet[bulletnum].bullet_y >= 1) && bullet[bulletnum].bullet_x < 2)
		{
    
    //碰到左墙 
			bullet[bulletnum].breaker = 0;//开关关闭 
			bullet[bulletnum].flag = 0;//新子弹 
			bullet[bulletnum].bullet_x = 0;
			bullet[bulletnum].bullet_y = 0;
			return 1;
		}
		else if ((bullet[bulletnum].bullet_y <= 46 && bullet[bulletnum].bullet_y >= 1) && bullet[bulletnum].bullet_x > 96) {
    
    
			//碰到右墙 
			bullet[bulletnum].breaker = 0;//开关关闭 
			bullet[bulletnum].flag = 0;//新子弹 
			bullet[bulletnum].bullet_x = 0;
			bullet[bulletnum].bullet_y = 0;
			return 1;
		}
		else if ((bullet[bulletnum].bullet_x >= 2 && bullet[bulletnum].bullet_x <= 96) && bullet[bulletnum].bullet_y > 46) {
    
    
			//碰到下墙	 
			bullet[bulletnum].breaker = 0;//开关关闭 
			bullet[bulletnum].flag = 0;//新子弹 
			bullet[bulletnum].bullet_x = 0;
			bullet[bulletnum].bullet_y = 0;
			return 1;
		}
		else if ((bullet[bulletnum].bullet_x >= 2 && bullet[bulletnum].bullet_x <= 96) && bullet[bulletnum].bullet_y < 1) {
    
    
			//碰到上墙	
			bullet[bulletnum].breaker = 0;//开关关闭 
			bullet[bulletnum].flag = 0;//新子弹 
			bullet[bulletnum].bullet_x = 0;
			bullet[bulletnum].bullet_y = 0;
			return 1;
		}
		else if (bullet[bulletnum].bullet_x == monster1.monster_x && bullet[bulletnum].bullet_y == monster1.monster_y) {
    
    
			//如果撞上怪物 1
			bullet[bulletnum].breaker = 0;//开关关闭 
			bullet[bulletnum].flag = 0;   //新子弹 
			bullet[bulletnum].bullet_x = 0;//空位置 
			bullet[bulletnum].bullet_y = 0;
			++gamer.monsterDeath;
			++gamer.score;
			//system("cls")//刷新//随机刷怪 
			monster1.monster_x = rand() % 94 + 2;
			monster1.monster_y = rand() % 45 + 1;
			while (monster1.monster_x % 2 == 0) {
    
    
				monster1.monster_x = rand() % 94 + 2;
			}
			goto_XY(monster1.monster_x, monster1.monster_y);
			hide_cursor();
			printf("▉");
			return 2;
		}
		else if (bullet[bulletnum].bullet_x == monster2.monster_x && bullet[bulletnum].bullet_y == monster2.monster_y) {
    
    
			//如果撞上怪物 2
			bullet[bulletnum].breaker = 0;
			bullet[bulletnum].flag = 0;
			bullet[bulletnum].bullet_x = 0;
			bullet[bulletnum].bullet_y = 0;
			++gamer.monsterDeath;
			++gamer.score;
			//system("cls");
			monster2.monster_x = rand() % 94 + 2;
			monster2.monster_y = rand() % 45 + 1;
			while (monster2.monster_x % 2 == 0) {
    
    
				monster2.monster_x = rand() % 94 + 2;
			}
			goto_XY(monster2.monster_x, monster2.monster_y);
			hide_cursor();
			printf("▉");
			return 2;
		}
		else if (bullet[bulletnum].bullet_x == monster3.monster_x && bullet[bulletnum].bullet_y == monster3.monster_y) {
    
    
			//如果撞上怪物 3
			bullet[bulletnum].breaker = 0;
			bullet[bulletnum].flag = 0;
			bullet[bulletnum].bullet_x = 0;
			bullet[bulletnum].bullet_y = 0;
			++gamer.monsterDeath;
			++gamer.score;
			//system("cls");
			monster3.monster_x = rand() % 94 + 2;
			monster3.monster_y = rand() % 45 + 1;
			while (monster3.monster_x % 2 == 0) {
    
    
				monster3.monster_x = rand() % 94 + 2;
			}
			goto_XY(monster3.monster_x, monster3.monster_y);
			hide_cursor();
			printf("▉");
			return 2;
		}
		else if (bullet[bulletnum].bullet_x == monster4.monster_x && bullet[bulletnum].bullet_y == monster4.monster_y) {
    
    
			//如果撞上怪物 4
			bullet[bulletnum].breaker = 0;
			bullet[bulletnum].flag = 0;
			bullet[bulletnum].bullet_x = 0;
			bullet[bulletnum].bullet_y = 0;
			++gamer.monsterDeath;
			++gamer.score;
			//system("cls");
			monster4.monster_x = rand() % 94 + 2;
			monster4.monster_y = rand() % 45 + 1;
			while (monster4.monster_x % 2 == 0) {
    
    
				monster4.monster_x = rand() % 94 + 2;
			}
			goto_XY(monster4.monster_x, monster4.monster_y);
			hide_cursor();
			printf("▉");
			return 2;
		}
		return 0;
	}


}

/*子弹前进*/
void BulletGo()
{
    
    
	//如子弹处于发射状态且子弹状态处于正常情况
	if (bullet[0].breaker == 1 && IsDeathBullet(0) == 0) {
    
    
		if (gamer.recordRe == 'w') {
    
    //按上键 
			--bullet[0].bullet_y;
			--bullet[0].bullet_y;
			goto_XY(bullet[0].bullet_x, bullet[0].bullet_y);
			hide_cursor();
			printf("◆");
		}
		else if (gamer.recordRe == 's') {
    
    //按下键 
			++bullet[0].bullet_y;
			++bullet[0].bullet_y;
			goto_XY(bullet[0].bullet_x, bullet[0].bullet_y);
			hide_cursor();
			printf("◆");
		}
		else if (gamer.recordRe == 'a') {
    
    //按左键 

			--bullet[0].bullet_x;
			goto_XY(bullet[0].bullet_x, bullet[0].bullet_y);
			hide_cursor();
			printf("◆");
		}
		else if (gamer.recordRe == 'd') {
    
    //按右键 

			++bullet[0].bullet_x;
			goto_XY(bullet[0].bullet_x, bullet[0].bullet_y);
			hide_cursor();
			printf("◆");
		}
	}


	if (bullet[1].breaker == 1 && IsDeathBullet(1) == 0) {
    
    
		if (gamer.recordRe == 'w') {
    
    //按上键 
			--bullet[1].bullet_y;
			--bullet[1].bullet_y;
			goto_XY(bullet[1].bullet_x, bullet[1].bullet_y);
			hide_cursor();
			printf("◆");
		}
		else if (gamer.recordRe == 's') {
    
    //按下键 
			++bullet[1].bullet_y;
			++bullet[1].bullet_y;
			goto_XY(bullet[1].bullet_x, bullet[1].bullet_y);
			hide_cursor();
			printf("◆");
		}
		else if (gamer.recordRe == 'a') {
    
    //按左键 

			--bullet[1].bullet_x;
			goto_XY(bullet[1].bullet_x, bullet[1].bullet_y);
			hide_cursor();
			printf("◆");
		}
		else if (gamer.recordRe == 'd') {
    
    //按右键 

			++bullet[1].bullet_x;
			goto_XY(bullet[1].bullet_x, bullet[1].bullet_y);
			hide_cursor();
			printf("◆");
		}
	}


	if (bullet[2].breaker == 1 && IsDeathBullet(2) == 0) {
    
    
		if (gamer.recordRe == 'w') {
    
    //按上键 
			--bullet[2].bullet_y;
			--bullet[2].bullet_y;
			goto_XY(bullet[2].bullet_x, bullet[2].bullet_y);
			hide_cursor();
			printf("◆");
		}
		else if (gamer.recordRe == 's') {
    
    //按下键 
			++bullet[2].bullet_y;
			++bullet[2].bullet_y;
			goto_XY(bullet[2].bullet_x, bullet[2].bullet_y);
			hide_cursor();
			printf("◆");
		}
		else if (gamer.recordRe == 'a') {
    
    //按左键 

			--bullet[2].bullet_x;
			goto_XY(bullet[2].bullet_x, bullet[2].bullet_y);
			hide_cursor();
			printf("◆");
		}
		else if (gamer.recordRe == 'd') {
    
    //按右键 

			++bullet[2].bullet_x;
			goto_XY(bullet[2].bullet_x, bullet[2].bullet_y);
			hide_cursor();
			printf("◆");
		}
	}


	if (bullet[3].breaker == 1 && IsDeathBullet(3) == 0) {
    
    
		if (gamer.recordRe == 'w') {
    
    //按上键 
			--bullet[3].bullet_y;
			--bullet[3].bullet_y;
			goto_XY(bullet[3].bullet_x, bullet[3].bullet_y);
			hide_cursor();
			printf("◆");
		}
		else if (gamer.recordRe == 's') {
    
    //按下键 
			++bullet[3].bullet_y;
			++bullet[3].bullet_y;
			goto_XY(bullet[3].bullet_x, bullet[3].bullet_y);
			hide_cursor();
			printf("◆");
		}
		else if (gamer.recordRe == 'a') {
    
    //按左键 

			--bullet[3].bullet_x;
			goto_XY(bullet[3].bullet_x, bullet[3].bullet_y);
			hide_cursor();
			printf("◆");
		}
		else if (gamer.recordRe == 'd') {
    
    //按右键 

			++bullet[3].bullet_x;
			goto_XY(bullet[3].bullet_x, bullet[3].bullet_y);
			hide_cursor();
			printf("◆");
		}
	}

}


/*发射子弹*/
void Bullet_XY()
{
    
    

	if (bullet[gamer.bullet - 1].breaker == 1 && bullet[gamer.bullet - 1].flag == 0) {
    
    //子弹发射位置只能记录一次,直到撞上墙壁 
		/*子弹的初始发射方向*/
		if (gamer.recordRe == 'w') {
    
    
			bullet[gamer.bullet - 1].bullet_x = gamer.gamer_x;
			bullet[gamer.bullet - 1].bullet_y = gamer.gamer_y - 1;
		}
		else if (gamer.recordRe == 's') {
    
    
			bullet[gamer.bullet - 1].bullet_x = gamer.gamer_x;
			bullet[gamer.bullet - 1].bullet_y = gamer.gamer_y + 1;
		}
		else if (gamer.recordRe == 'a') {
    
    
			bullet[gamer.bullet - 1].bullet_y = gamer.gamer_y;
			bullet[gamer.bullet - 1].bullet_x = gamer.gamer_x - 1;
		}
		else if (gamer.recordRe == 'd') {
    
    
			bullet[gamer.bullet - 1].bullet_y = gamer.gamer_y;
			bullet[gamer.bullet - 1].bullet_x = gamer.gamer_x + 1;
		}
		bullet[gamer.bullet - 1].flag = 1;//保证下次不记录 
	}
	/*子弹前进*/
	BulletGo();
}

/*判断苹果是否被吃*/
int AppleEated()
{
    
    
	if (gamer.gamer_x == appletree.appletree_xPre && gamer.gamer_y == appletree.appletree_yPre) {
    
    
		gamer.death += appletree.health;//回血 
		appletree.flag = 1;//被吃 
		return 1;
	}
	else {
    
    
		return 0;
	}

}

/*苹果树*/
void Appletree()
{
    
    
	srand((unsigned)time(NULL));//提供种子    
	if (appletree.appletime >= 0 && appletree.appletime <= 75) {
    
    
		//苹果树出现时间段
		if (appletree.flag == 1) {
    
    
			appletree.appletree_x = rand() % 94 + 2;
			appletree.appletree_y = rand() % 45 + 1;
			appletree.appletime = 76;
			appletree.flag = 0;
		}
		else {
    
    
			goto_XY(appletree.appletree_xPre, appletree.appletree_yPre);
			hide_cursor();
			printf("●");
			goto_XY(appletree.appletree_xPre, appletree.appletree_yPre + 1);
			printf("│");
			//保证食物出现的位置为偶数
			while (appletree.appletree_xPre % 2 != 0) {
    
    
				appletree.appletree_xPre = rand() % 94 + 2;
				appletree.appletree_yPre = rand() % 45 + 1;
				goto_XY(appletree.appletree_xPre, appletree.appletree_yPre);
				hide_cursor();
				printf("●");
				goto_XY(appletree.appletree_xPre, appletree.appletree_yPre + 1);
				printf("│");
			}
		}

	}
	else if (appletree.appletime > 75 && appletree.appletime <= 100) {
    
    
		//苹果树消失时间段 
		if (appletree.appletree_x != 0 && appletree.appletree_y != 0) {
    
    
			//如果苹果树坐标为0,则不保存 
			appletree.appletree_xPre = appletree.appletree_x;
			appletree.appletree_yPre = appletree.appletree_y;
		}

		appletree.appletree_x = 0;
		appletree.appletree_y = 0;
		goto_XY(appletree.appletree_x, appletree.appletree_y);
	}
	else {
    
    //其他时间段 
		appletree.appletime = 0;
	}

}


/*食物*/
void Food()
{
    
    


	srand((unsigned)time(NULL));//提供种子

	goto_XY(food1.food_x, food1.food_y);//对应食物位置 
	hide_cursor();
	//保证食物出现的位置为偶数
	while (food1.food_x % 2 != 0) {
    
    
		food1.food_x = rand() % 94 + 2;
		food1.food_y = rand() % 45 + 1;
		goto_XY(food1.food_x, food1.food_y);//对应食物位置 
	}
	printf("▲");

	//保证食物出现的位置为偶数
	goto_XY(food2.food_x, food2.food_y);//对应食物位置 
	hide_cursor();
	while (food2.food_x % 2 != 0) {
    
    
		food2.food_x = rand() % 94 + 2;
		food2.food_y = rand() % 45 + 1;
		goto_XY(food2.food_x, food2.food_y);//对应食物位置 
	}
	printf("▲");

	//保证食物出现的位置为偶数
	goto_XY(food3.food_x, food3.food_y);//对应食物位置
	hide_cursor();
	while (food3.food_x % 2 != 0) {
    
    
		food3.food_x = rand() % 94 + 2;
		food3.food_y = rand() % 45 + 1;
		goto_XY(food3.food_x, food3.food_y);//对应食物位置 
	}
	printf("▲");

	goto_XY(food4.food_x, food4.food_y);//对应食物位置
	hide_cursor();
	//保证食物出现的位置为偶数
	while (food4.food_x % 2 != 0) {
    
    
		food4.food_x = rand() % 94 + 2;
		food4.food_y = rand() % 45 + 1;
		goto_XY(food4.food_x, food4.food_y);//对应食物位置 
	}
	printf("▲");

	goto_XY(food5.food_x, food5.food_y);//对应食物位置
	hide_cursor();
	//保证食物出现的位置为偶数
	while (food5.food_x % 2 != 0) {
    
    
		food5.food_x = rand() % 94 + 2;
		food5.food_y = rand() % 45 + 1;
		goto_XY(food5.food_x, food5.food_y);//对应食物位置 
	}
	printf("▲");

	goto_XY(food6.food_x, food6.food_y);//对应食物位置
	hide_cursor();
	//保证食物出现的位置为偶数
	while (food6.food_x % 2 != 0) {
    
    
		food6.food_x = rand() % 94 + 2;
		food6.food_y = rand() % 45 + 1;
		goto_XY(food6.food_x, food6.food_y);//对应食物位置 
	}
	printf("▲");

}
/*判断食物是否被吃 */
int FoodEated()
{
    
    
	if (gamer.gamer_x == food1.food_x && gamer.gamer_y == food1.food_y) {
    
    
		food1.food_x = rand() % 94 + 2;
		food1.food_y = rand() % 45 + 1;
		Food();
		return 1;
	}
	else if (gamer.gamer_x == food2.food_x && gamer.gamer_y == food2.food_y) {
    
    
		food2.food_x = rand() % 94 + 2;
		food2.food_y = rand() % 45 + 1;
		Food();
		return 1;
	}
	else if (gamer.gamer_x == food3.food_x && gamer.gamer_y == food3.food_y) {
    
    
		food3.food_x = rand() % 94 + 2;
		food3.food_y = rand() % 45 + 1;
		Food();
		return 1;
	}
	else if (gamer.gamer_x == food4.food_x && gamer.gamer_y == food4.food_y) {
    
    
		food4.food_x = rand() % 94 + 2;
		food4.food_y = rand() % 45 + 1;
		Food();
		return 1;
	}
	else if (gamer.gamer_x == food5.food_x && gamer.gamer_y == food5.food_y) {
    
    
		food5.food_x = rand() % 94 + 2;
		food5.food_y = rand() % 45 + 1;
		Food();
		return 1;
	}
	else if (gamer.gamer_x == food6.food_x && gamer.gamer_y == food6.food_y) {
    
    
		food6.food_x = rand() % 94 + 2;
		food6.food_y = rand() % 45 + 1;
		Food();
		return 1;
	}
	else {
    
    
		return 0;
	}

}

/*打印怪物*/
void PrintMonster()
{
    
    

	if ((monster1.monster_y <= 46 && monster1.monster_y >= 1) && monster1.monster_x < 2)
	{
    
    //碰到左墙 
		monster1.monster_x = 96;
		goto_XY(monster1.monster_x, monster1.monster_y);
		hide_cursor();
		printf("▉");
	}
	else if ((monster1.monster_y <= 46 && monster1.monster_y >= 1) && monster1.monster_x > 96) {
    
    
		//碰到右墙 
		monster1.monster_x = 2;
		goto_XY(monster1.monster_x, monster1.monster_y);
		hide_cursor();
		printf("▉");
	}
	else if ((monster1.monster_x >= 2 && monster1.monster_x <= 96) && monster1.monster_y > 46) {
    
    
		//碰到下墙	    
		monster1.monster_y = 1;
		goto_XY(monster1.monster_x, monster1.monster_y);
		hide_cursor();
		printf("▉");
	}
	else if ((monster1.monster_x >= 2 && monster1.monster_x <= 96) && monster1.monster_y < 1) {
    
    
		//碰到上墙	    
		monster1.monster_y = 46;
		goto_XY(monster1.monster_x, monster1.monster_y);
		hide_cursor();
		printf("▉");
	}


	if ((monster2.monster_y <= 46 && monster2.monster_y >= 1) && monster2.monster_x < 2)
	{
    
    //碰到左墙 
		monster2.monster_x = 96;
		goto_XY(monster2.monster_x, monster2.monster_y);
		hide_cursor();
		printf("▉");
	}
	else if ((monster2.monster_y <= 46 && monster2.monster_y >= 1) && monster2.monster_x > 96) {
    
    
		//碰到右墙 
		monster2.monster_x = 2;
		goto_XY(monster2.monster_x, monster2.monster_y);
		hide_cursor();
		printf("▉");
	}
	else if ((monster2.monster_x >= 2 && monster2.monster_x <= 96) && monster2.monster_y > 46) {
    
    
		//碰到下墙	    
		monster2.monster_y = 1;
		goto_XY(monster2.monster_x, monster2.monster_y);
		hide_cursor();
		printf("▉");
	}
	else if ((monster2.monster_x >= 2 && monster2.monster_x <= 96) && monster2.monster_y < 1) {
    
    
		//碰到上墙	    
		monster2.monster_y = 46;
		goto_XY(monster2.monster_x, monster2.monster_y);
		hide_cursor();
		printf("▉");
	}


	if ((monster3.monster_y <= 46 && monster3.monster_y >= 1) && monster3.monster_x < 2)
	{
    
    //碰到左墙 
		monster3.monster_x = 96;
		hide_cursor();
		goto_XY(monster3.monster_x, monster3.monster_y);
		printf("▉");
	}
	else if ((monster3.monster_y <= 46 && monster3.monster_y >= 1) && monster3.monster_x > 96) {
    
    
		//碰到右墙 
		monster3.monster_x = 2;
		hide_cursor();
		goto_XY(monster3.monster_x, monster3.monster_y);
		printf("▉");
	}
	else if ((monster3.monster_x >= 2 && monster3.monster_x <= 96) && monster3.monster_y > 46) {
    
    
		//碰到下墙	    
		monster3.monster_y = 1;
		hide_cursor();
		goto_XY(monster3.monster_x, monster3.monster_y);
		printf("▉");
	}
	else if ((monster3.monster_x >= 2 && monster3.monster_x <= 96) && monster3.monster_y < 1) {
    
    
		//碰到上墙	    
		monster3.monster_y = 46;
		hide_cursor();
		goto_XY(monster3.monster_x, monster3.monster_y);
		printf("▉");
	}


	if ((monster4.monster_y <= 46 && monster4.monster_y >= 1) && monster4.monster_x < 2)
	{
    
    //碰到左墙 
		monster4.monster_x = 96;
		hide_cursor();
		goto_XY(monster4.monster_x, monster4.monster_y);
		printf("▉");
	}
	else if ((monster4.monster_y <= 46 && monster4.monster_y >= 1) && monster4.monster_x > 96) {
    
    
		//碰到右墙 
		monster4.monster_x = 2;
		hide_cursor();
		goto_XY(monster4.monster_x, monster4.monster_y);
		printf("▉");
	}
	else if ((monster4.monster_x >= 2 && monster4.monster_x <= 96) && monster4.monster_y > 46) {
    
    
		//碰到下墙	    
		monster4.monster_y = 1;
		hide_cursor();
		goto_XY(monster4.monster_x, monster4.monster_y);
		printf("▉");
	}
	else if ((monster4.monster_x >= 2 && monster4.monster_x <= 96) && monster4.monster_y < 1) {
    
    
		//碰到上墙	    
		monster4.monster_y = 46;
		hide_cursor();
		goto_XY(monster4.monster_x, monster4.monster_y);
		printf("▉");
	}

	if ((gamer.gamer_x == monster1.monster_x) && (gamer.gamer_y == monster1.monster_y)) {
    
    
		//碰到怪物1
		gamer.gamer_x = 22;
		gamer.gamer_y = 20;
		--gamer.score;
		--gamer.death;
		gamer.flag = 1;
		if (gamer.score <= 0)
			gamer.score = 0;
		GameOver();
		hide_cursor();
		goto_XY(gamer.gamer_x, gamer.gamer_y);
		printf("▉");
	}
	else if ((gamer.gamer_x == monster2.monster_x) && (gamer.gamer_y == monster2.monster_y)) {
    
    
		//碰到怪物2
		gamer.gamer_x = 22;
		gamer.gamer_y = 20;
		--gamer.score;
		--gamer.death;
		gamer.flag = 2;
		if (gamer.score <= 0)
			gamer.score = 0;
		GameOver();
		hide_cursor();
		goto_XY(gamer.gamer_x, gamer.gamer_y);
		printf("▉");
	}
	else if ((gamer.gamer_x == monster3.monster_x) && (gamer.gamer_y == monster3.monster_y)) {
    
    
		//碰到怪物3
		gamer.gamer_x = 22;
		gamer.gamer_y = 20;
		--gamer.score;
		--gamer.death;
		gamer.flag = 3;
		if (gamer.score <= 0)
			gamer.score = 0;
		GameOver();
		hide_cursor();
		goto_XY(gamer.gamer_x, gamer.gamer_y);
		printf("▉");
	}
	else if ((gamer.gamer_x == monster4.monster_x) && (gamer.gamer_y == monster4.monster_y)) {
    
    
		//碰到怪物4
		gamer.gamer_x = 22;
		gamer.gamer_y = 20;
		--gamer.score;
		--gamer.death;
		gamer.flag = 4;
		if (gamer.score <= 0)
			gamer.score = 0;
		GameOver();
		hide_cursor();
		goto_XY(gamer.gamer_x, gamer.gamer_y);
		printf("▉");
	}
	else {
    
    
		//正常情况
		hide_cursor();
		goto_XY(monster1.monster_x, monster1.monster_y);
		printf("▉");

		hide_cursor();
		goto_XY(monster2.monster_x, monster2.monster_y);
		printf("▉");

		hide_cursor();
		goto_XY(monster3.monster_x, monster3.monster_y);
		printf("▉");

		hide_cursor();
		goto_XY(monster4.monster_x, monster4.monster_y);
		printf("▉");
	}

}
/*怪物搜索玩家*/
int MonsterIndex()
{
    
    
	int flag = 0;
	//怪物1 
	if (monster1.monster_x == gamer.gamer_x && monster1.monster_y > gamer.gamer_y) {
    
    
		//怪物位置在我方正下方 
		--monster1.monster_y;
		PrintMonster();
		flag = 1;
	}
	else if (monster1.monster_x == gamer.gamer_x && monster1.monster_y < gamer.gamer_y) {
    
    
		//怪物位置在我方正上方 
		++monster1.monster_y;
		PrintMonster();
		flag = 1;
	}
	else if (monster1.monster_y == gamer.gamer_y && monster1.monster_x > gamer.gamer_x) {
    
    
		//怪物位置在我方正右方 
		monster1.monster_x -= -2;
		PrintMonster();
		flag = 1;
	}
	else if (monster1.monster_y == gamer.gamer_y && monster1.monster_x < gamer.gamer_x) {
    
    
		//怪物位置在我方正左方 
		monster1.monster_x += 2;
		PrintMonster();
		flag = 1;
	}
	//怪物2		
	if (monster2.monster_x == gamer.gamer_x && monster2.monster_y > gamer.gamer_y) {
    
    
		//怪物位置在我方正下方 
		--monster2.monster_y;
		PrintMonster();
		flag = 1;
	}
	else if (monster2.monster_x == gamer.gamer_x && monster2.monster_y < gamer.gamer_y) {
    
    
		//怪物位置在我方正上方 
		++monster2.monster_y;
		PrintMonster();
		flag = 1;
	}
	else if (monster2.monster_y == gamer.gamer_y && monster2.monster_x > gamer.gamer_x) {
    
    
		//怪物位置在我方正右方 
		monster2.monster_x -= 2;
		PrintMonster();
		flag = 1;
	}
	else if (monster2.monster_y == gamer.gamer_y && monster2.monster_x < gamer.gamer_x) {
    
    
		//怪物位置在我方正左方 
		monster2.monster_x += 2;
		PrintMonster();
		flag = 1;
	}
	//怪物3	
	if (monster3.monster_x == gamer.gamer_x && monster3.monster_y > gamer.gamer_y) {
    
    
		//怪物位置在我方正下方 
		--monster3.monster_y;
		PrintMonster();
		flag = 1;
	}
	else if (monster3.monster_x == gamer.gamer_x && monster3.monster_y < gamer.gamer_y) {
    
    
		//怪物位置在我方正上方 
		++monster3.monster_y;
		PrintMonster();
		flag = 1;
	}
	else if (monster3.monster_y == gamer.gamer_y && monster3.monster_x > gamer.gamer_x) {
    
    
		//怪物位置在我方正右方 
		monster3.monster_x -= 2;
		PrintMonster();
		flag = 1;
	}
	else if (monster3.monster_y == gamer.gamer_y && monster3.monster_x < gamer.gamer_x) {
    
    
		//怪物位置在我方正左方 
		monster3.monster_x += 2;
		PrintMonster();
		flag = 1;
	}
	//怪物4	
	if (monster4.monster_x == gamer.gamer_x && monster4.monster_y > gamer.gamer_y) {
    
    
		//怪物位置在我方正下方 
		--monster4.monster_y;
		PrintMonster();
		flag = 1;
	}
	else if (monster4.monster_x == gamer.gamer_x && monster4.monster_y < gamer.gamer_y) {
    
    
		//怪物位置在我方正上方 
		++monster4.monster_y;
		PrintMonster();
		flag = 1;
	}
	else if (monster4.monster_y == gamer.gamer_y && monster4.monster_x > gamer.gamer_x) {
    
    
		//怪物位置在我方正右方 
		monster4.monster_x -= 2;
		PrintMonster();
		flag = 1;
	}
	else if (monster4.monster_y == gamer.gamer_y && monster4.monster_x < gamer.gamer_x) {
    
    
		//怪物位置在我方正左方 
		monster4.monster_x += 2;
		PrintMonster();
		flag = 1;
	}

	if (flag == 0) {
    
    
		return 1;
	}
	else {
    
    
		return 0;
	}

}


/*移动怪物*/
void MonsterMovement()
{
    
    

	srand((unsigned)time(NULL));


	if (MonsterIndex()) {
    
    

		int direction1 = rand() % 7;//四个方向 0表示左 1表示右 2表示上 3表示下 其余不动 		
		if (direction1 == 0) {
    
          //向左移动 
			monster1.monster_x -= 2;
		}
		else if (direction1 == 1) {
    
    //向右移动 
			monster1.monster_x += 2;
		}
		else if (direction1 == 2) {
    
    //向上移动 
			monster1.monster_y -= 1;
		}
		else if (direction1 == 3) {
    
    //向下移动 
			monster1.monster_y += 1;
		}
		PrintMonster();

		int direction2 = rand() % 7;//四个方向 0表示左 1表示右 2表示上 3表示下 
		if (direction2 == 0) {
    
     //向左移动 
			monster2.monster_x -= 2;
		}
		else if (direction2 == 1) {
    
    //向右移动 
			monster2.monster_x += 2;
		}
		else if (direction2 == 2) {
    
    //向上移动 
			monster2.monster_y -= 1;
		}
		else if (direction2 == 3) {
    
    //向下移动 
			monster2.monster_y += 1;
		}
		PrintMonster();

		int direction3 = rand() % 7;//四个方向 0表示左 1表示右 2表示上 3表示下 
		if (direction3 == 0) {
    
     //向左移动 
			monster3.monster_x -= 2;
		}
		else if (direction3 == 1) {
    
    //向右移动 
			monster3.monster_x += 2;
		}
		else if (direction3 == 2) {
    
    //向上移动 
			monster3.monster_y -= 1;
		}
		else if (direction3 == 3) {
    
    //向下移动 
			monster3.monster_y += 1;
		}
		PrintMonster();


		int direction4 = rand() % 7;//四个方向 0表示左 1表示右 2表示上 3表示下 
		if (direction4 == 0) {
    
     //向左移动 
			monster4.monster_x -= 2;
		}
		else if (direction4 == 1) {
    
    //向右移动 
			monster4.monster_x += 2;
		}
		else if (direction4 == 2) {
    
    //向上移动 
			monster4.monster_y -= 1;
		}
		else if (direction4 == 3) {
    
    //向下移动 
			monster4.monster_y += 1;
		}
		PrintMonster();

	}

}

/*怪物初始位置*/
void Monster()
{
    
    

	srand((unsigned)time(NULL));//提供种子
	monster1.monster_x = rand() % 94 + 2;
	monster1.monster_y = rand() % 45 + 1;
	hide_cursor();
	goto_XY(monster1.monster_x, monster1.monster_y);//对应怪物位置 
	 //保证怪物出现的位置为偶数
	while (monster1.monster_x % 2 != 0) {
    
    
		monster1.monster_x = rand() % 94 + 2;
		monster1.monster_y = rand() % 45 + 1;
		goto_XY(monster1.monster_x, monster1.monster_y);//对应怪物位置 
	}
	printf("▉");

	srand((unsigned)time(NULL));//提供种子
	monster2.monster_x = rand() % 94 + 2;
	monster2.monster_y = rand() % 45 + 1;
	hide_cursor();
	goto_XY(monster2.monster_x, monster2.monster_y);//对应怪物位置 
	 //保证怪物出现的位置为偶数
	while (monster2.monster_x % 2 != 0) {
    
    
		monster2.monster_x = rand() % 94 + 2;
		monster2.monster_y = rand() % 45 + 1;
		goto_XY(monster2.monster_x, monster2.monster_y);//对应怪物位置 
	}
	printf("▉");

	srand((unsigned)time(NULL));//提供种子
	monster3.monster_x = rand() % 94 + 2;
	monster3.monster_y = rand() % 45 + 1;
	hide_cursor();
	goto_XY(monster3.monster_x, monster3.monster_y);//对应怪物位置 
	 //保证怪物出现的位置为偶数
	while (monster3.monster_x % 2 != 0) {
    
    
		monster3.monster_x = rand() % 94 + 2;
		monster3.monster_y = rand() % 45 + 1;
		goto_XY(monster3.monster_x, monster3.monster_y);//对应怪物位置 
	}
	printf("▉");

	srand((unsigned)time(NULL));//提供种子
	monster4.monster_x = rand() % 94 + 2;
	monster4.monster_y = rand() % 45 + 1;
	hide_cursor();
	goto_XY(monster4.monster_x, monster4.monster_y);//对应怪物位置 
	 //保证怪物出现的位置为偶数
	while (monster4.monster_x % 2 != 0) {
    
    
		monster4.monster_x = rand() % 94 + 2;
		monster4.monster_y = rand() % 45 + 1;
		goto_XY(monster4.monster_x, monster4.monster_y);//对应怪物位置 
	}
	printf("▉");

}


/*打印玩家*/
void PrintGamer()
{
    
    

	if ((gamer.gamer_y <= 46 && gamer.gamer_y >= 1) && gamer.gamer_x < 2)
	{
    
    //碰到左墙 
		gamer.gamer_x = 96;
		hide_cursor();
		goto_XY(gamer.gamer_x, gamer.gamer_y);
		printf("▉");
	}
	else if ((gamer.gamer_y <= 46 && gamer.gamer_y >= 1) && gamer.gamer_x > 96) {
    
    
		//碰到右墙 
		gamer.gamer_x = 2;
		hide_cursor();
		goto_XY(gamer.gamer_x, gamer.gamer_y);
		printf("▉");
	}
	else if ((gamer.gamer_x >= 2 && gamer.gamer_x <= 96) && gamer.gamer_y > 46) {
    
    
		//碰到下墙	    
		gamer.gamer_y = 1;
		hide_cursor();
		goto_XY(gamer.gamer_x, gamer.gamer_y);
		printf("▉");
	}
	else if ((gamer.gamer_x >= 2 && gamer.gamer_x <= 96) && gamer.gamer_y < 1) {
    
    
		//碰到上墙	    
		gamer.gamer_y = 46;
		hide_cursor();
		goto_XY(gamer.gamer_x, gamer.gamer_y);
		printf("▉");
	}
	else {
    
    
		//正常情况	
		hide_cursor();
		goto_XY(gamer.gamer_x, gamer.gamer_y);
		printf("▉");
	}

}

void Judgement(char ch)
{
    
    
	int bulletnum = gamer.bullet; //1~4号子弹 
	if (bulletnum >= 4) {
    
    
		bulletnum = 0;
	}
	if (ch == 'w' && bullet[bulletnum].flag == 0) {
    
    
		gamer.recordRe = 'w';
	}
	else if (ch == 's' && bullet[bulletnum].flag == 0) {
    
    
		gamer.recordRe = 's';
	}
	else if (ch == 'a' && bullet[bulletnum].flag == 0) {
    
    
		gamer.recordRe = 'a';
	}
	else if (ch == 'd' && bullet[bulletnum].flag == 0) {
    
    
		gamer.recordRe = 'd';
	}

}
//根据不同情况,打开发射不同子弹的开关 
void BulletState()
{
    
    
	if (gamer.bullet >= 5) {
    
    
		gamer.bullet = 1;
	}
	bullet[gamer.bullet - 1].breaker = 1;
}

void Move()
{
    
    

	//左右范围在2~96且为偶数,上下范围在1~46

				//无按键的处理
	if (_kbhit())
	{
    
    
		//有按键接受
		fflush(stdin);
		char key = _getch();
		switch (key)
		{
    
    
		case 'd':gamer.gamer_x += 2; Judgement('d'); break;
		case 's':++gamer.gamer_y;  Judgement('s'); break;
		case 'a':gamer.gamer_x -= 2; Judgement('a'); break;
		case 'w':--gamer.gamer_y;  Judgement('w'); break;
		case ' ':++gamer.bullet; BulletState(); Bullet_XY();  break;
		}
	}
	/*重新显示刷新后的对象*/
	PrintGamer();//打印玩家

	goto_XY(food1.food_x, food1.food_y);//对应食物位置 
	printf("▲");
	goto_XY(food2.food_x, food2.food_y);//对应食物位置
	printf("▲");
	goto_XY(food3.food_x, food3.food_y);//对应食物位置
	printf("▲");
	goto_XY(food4.food_x, food4.food_y);//对应食物位置
	printf("▲");
	goto_XY(food5.food_x, food5.food_y);//对应食物位置
	printf("▲");
	goto_XY(food6.food_x, food6.food_y);//对应食物位置
	printf("▲");

}

int main()
{
    
    
	int g, i, ch;

	//显示场景 
	Show();
	//显示玩家初始位置 
	goto_XY(gamer.gamer_x, gamer.gamer_y);
	printf("▉");
	//显示怪物初始位置 
	Monster();

	while (1) {
    
    

		system("cls");//清屏 

		Show();//打印场景 

		PrintGamer();//打印玩家 

		Food();//打印食物 

		Appletree(); //打印苹果树

		MonsterMovement();//打印怪物 

		BulletGo();

		Move();

		ch = IsDeathBullet(0);
		ch = IsDeathBullet(1);
		ch = IsDeathBullet(2);
		ch = IsDeathBullet(3);

		if (FoodEated())//判断是否吃到食物
			++gamer.score;  //分数增加 
		if (AppleEated())
			appletree.appletime = 76;//时间重置至消失时 

		GameOver();//判断是否结束游戏 

		appletree.appletime++;

		Sleep(100);
	}

}


猜你喜欢

转载自blog.csdn.net/qq_52001969/article/details/113744659