飞翔的小鸟

/*
	日期:2019年3月3日
	项目:飞翔的小鸟 
*/
#include<stdio.h>
#define MAX 100
#include<stdlib.h>
#include<conio.h>
#include<windows.h>

int width, high;	//游戏边界
int bird_x, bird_y; //小鸟坐标
int bar_x, bar_y, bar_yDown, bar_yTop; //障碍物
int bar1_x, bar3_y, bar1_yDown, bar1_yTop; //障碍物
int bar2_x, bar2_y, bar2_yDown, bar2_yTop; //障碍物
int bar3_x, bar1_y, bar3_yDown, bar3_yTop; //障碍物
int map[MAX][MAX];
int score;
void start()	//初始化数据 
{
	score = 0;
	width = 100;
	high = 20;
	
	bird_x = 2;
	bird_y = high/2;
	
	bar_x = width/5; 
	bar_y = rand()%high;
	bar_yDown = bar_y+2;
	bar_yTop = bar_y-1;
	
	bar1_x = (2*width)/5;
	bar1_y = rand()%high;
	bar1_yDown = bar1_y+2;
	bar1_yTop = bar1_y-1;
	
	bar2_x = (3*width)/5;
	bar2_y = rand()%high;
	bar2_yDown = bar2_y+2;
	bar2_yTop = bar2_y-1;	
}
void hidCursor()	//隐藏光标 
{
	CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };	//头文件windows.h 
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
} 
void gotoxy(int x, int y)	//调整光标位置 
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(handle, pos);
}
/*1表示小鸟 2表示右边框 3表示下边框 4表示障碍物 5表示空隙 6表示窗体*/
void startMap()	//初始化地图 
{	
	for(int i=0; i<=high; i++)
	{
		for(int j=0; j<=width; j++)
		{
			map[i][j] = 6;
		}
	}
	map[bird_y][bird_x] = 1;
	for(int i=0; i<=high; i++)
	{
		map[i][width] = 2;
	}
	for(int i=0; i<width; i++)
	{
		map[high][i] = 3;
	}
	for(int i=0; i<high; i++)
	{
		map[i][bar_x] = 4;
	}
	for(int i=bar_yTop; i<=bar_yDown; i++)
	{
		map[i][bar_x] = 5;
	}
	
	for(int i=0; i<high; i++)
	{
		map[i][bar1_x] = 4;
	}
	for(int i=bar1_yTop; i<=bar1_yDown; i++)
	{
		map[i][bar1_x] = 5;
	}
	
	for(int i=0; i<high; i++)
	{
		map[i][bar2_x] = 4;
	}
	for(int i=bar2_yTop; i<=bar2_yDown; i++)
	{
		map[i][bar2_x] = 5;
	}
	 
}
void show()	//展示 
{
	Sleep(50); 
	gotoxy(0, 0);
	for(int i=0; i<=high; i++)
	{
		for(int j=0; j<=width; j++)
		{
			if(map[i][j] == 1)
				printf("@");
			if(map[i][j] == 2)
				printf("|");
			if(map[i][j] == 3)
				printf("_");
			if(map[i][j] == 4)
				printf("*");
			if(map[i][j] == 5)
				printf(" ");
			if(map[i][j] == 6)
				printf(" ");				
		}
		printf("\n");
	}
	printf("\n*****	飞翔的小鸟	*****\n");
	printf("目前的分:%d",score);
	printf("操作说明:空格表示跳跃\n");
	printf("得分规则:跳跃着障碍物记一分\n");
}
void updateWithoutInput()//与输入无关更新 
{	
	bird_y++; 
	/*	障碍移动	*/
	bar_x--;
	bar1_x--;
	bar2_x--;
	bar3_x--;
	/*	障碍移动到左端后	*/ 
	if(bar_x == 0)
	{
		bar_x = width-1;
		bar_y = rand()%high;	
	}
	if(bar1_x == 0)
	{
		bar1_x = width-1;
		bar1_y = rand()%high;	
	}
	if(bar2_x == 0)
	{
		bar2_x = width-1;
		bar2_y = rand()%high;	
	}
	/*	撞到障碍时	*/
	for(int i=bar_yTop; i<=bar_yDown; i++)
	{
		if((bird_x==bar_x) && (bird_y!=i))
		{
			printf("\a");
			//system("pause");
			//printf("最终得分:%d",score);
		}
	}
	for(int i=bar1_yTop; i<=bar1_yDown; i++)
	{
		if((bird_x==bar1_x) && (bird_y!=i))
		{
			printf("\a");
		//	system("pause");
		//	printf("最终得分:%d",score);
		}
	}
	for(int i=bar2_yTop; i<=bar2_yDown; i++)
	{
		if((bird_x==bar2_x) && (bird_y!=i))
		{
			printf("\a");
		//	system("pause");
		//	printf("最终得分:%d",score);
		}
	}
	if(bird_y==high)
	{
		printf("\a");
	//	system("pause");
	//	printf("最终得分:%d",score);
	}
	if(bird_y==0)
	{
		bird_y++;
	}

	
	/*	穿越障碍	*/
	for(int i=bar_yTop; i<=bar_yDown; i++)
	{
		if((bird_x==bar_x) && (bird_y==i))
		{
			score++;
			bird_x++;  
		}
	}
	for(int i=bar1_yTop; i<=bar1_yDown; i++)
	{
		if((bird_x==bar1_x) && (bird_y==i))
		{
			score++;
			bird_x++;  
		}
	}
	for(int i=bar2_yTop; i<=bar2_yDown; i++)
	{
		if((bird_x==bar2_x) && (bird_y==i))
		{
			score++;
			bird_x++;  
		}
	}
}
void updateWithInput()//与输入相关的更新 
{
	char input;
	while(kbhit())
	{
		input = getch();
		if(input == ' ')
			bird_y= bird_y-2;
	}
	
}
int main(void)
{
	start();
	while(1)
	{
		hidCursor();
		startMap();
		show();
		updateWithoutInput();
		updateWithInput();
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/weixin_43415275/article/details/88087074