项目: flappy bird

目录

  • 一、项目描述和最终项目展示
  • 二、实现下落的小鸟
  • 三、显示小鸟和障碍物
  • 四、障碍物移动
  • 五、循环移动多个障碍物

一、项目描述和最终项目展示

通过按空格来控制小鸟的高度,来通过障碍物。

项目: flappy bird_第1张图片

二、实现下落的小鸟

代码如下:

#include
#include
#include
#include

//全局变量
int high,width;//游戏画面大小
int bird_x,bird_y;//小鸟的坐标
int bar1_y,bar1_xDown,bar1_xTop;//障碍物

void gotoxy(int x,int y)//将光标移动到(x,y)位置
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(handle,pos);
}

void startup()//数据的初始化
{
	high = 15;
	width = 20;
	bird_x = 0;
	bird_y = width/3;
}

void show()//显示画面
{
	gotoxy(0,0);//光标移动到原点位置,以下重画清屏
	int i,j;

	for(i=0;i<high;i++)
	{
		for(j=0;j<width;j++)
		{
			if((i == bird_x)&&(j == bird_y))
				printf("@");//输出小鸟
			else
				printf(" ");//输出空格
		}
		printf("\n");
	}
}

void updateWithoutInput()//与用户输入无关的更新
{
	bird_x++;
	Sleep(150);
}

void updateWithInput()//与用户输入有关的更新
{
	char input;
	if(kbhit())//判断是否有输入
	{
		input = getch();//根据用户得不同输入来移动
		if(input == ' ')
			bird_x =bird_x -2;
	}
}
int main()
{
	startup();//数据的初始化
	while(1)
	{
		show();//显示画面
		updateWithoutInput();//与用户输入无关的更新
		updateWithInput();//与用户输入有关的更新
	}
}

效果图如下:

三、显示小鸟和障碍物

项目: flappy bird_第2张图片

代码如下:

#include
#include
#include
#include

//全局变量
int high,width;//游戏画面大小
int bird_x,bird_y;//小鸟的坐标
int bar1_y,bar1_xDown,bar1_xTop;//障碍物

void gotoxy(int x,int y)//将光标移动到(x,y)位置
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(handle,pos);
}

void startup()//数据的初始化
{
	high = 15;
	width = 20;
	bird_x = 0;
	bird_y = width/3;
	bar1_y=width/2;
	bar1_xDown = high/3;
	bar1_xTop = high/2;
}

void show()//显示画面
{
	gotoxy(0,0);//光标移动到原点位置,以下重画清屏
	int i,j;

	for(i=0;i<high;i++)
	{
		for(j=0;j<width;j++)
		{
			if((i == bird_x)&&(j == bird_y))
				printf("@");//输出小鸟
			else if( (j == bar1_y) && ((i<bar1_xDown) || (i>bar1_xTop)))
				printf("*");
			else
				printf(" ");//输出空格
		}
		printf("\n");
	}
}

void updateWithoutInput()//与用户输入无关的更新
{
	bird_x++;
	Sleep(150);
}

void updateWithInput()//与用户输入有关的更新
{
	char input;
	if(kbhit())//判断是否有输入
	{
		input = getch();//根据用户得不同输入来移动
		if(input == ' ')
			bird_x =bird_x -2;
	}
}
int main()
{
	startup();//数据的初始化
	while(1)
	{
		show();//显示画面
		updateWithoutInput();//与用户输入无关的更新
		updateWithInput();//与用户输入有关的更新
	}
}

效果图如下:
项目: flappy bird_第3张图片

四、障碍物移动

代码如下:

#include
#include
#include
#include

//全局变量
int high,width;//游戏画面大小
int bird_x,bird_y;//小鸟的坐标
int bar1_y,bar1_xDown,bar1_xTop;//障碍物
int score;//得分,经过障碍物的个数

void gotoxy(int x,int y)//将光标移动到(x,y)位置
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(handle,pos);
}

void startup()//数据的初始化
{
	high = 15;
	width = 20;
	bird_x = high/2;
	bird_y = width/3;
	bar1_y=width;
	bar1_xDown = high/3;
	bar1_xTop = high/2;
	score=0;
}

void show()//显示画面
{
	gotoxy(0,0);//光标移动到原点位置,以下重画清屏
	int i,j;

	for(i=0;i<high;i++)
	{
		for(j=0;j<width;j++)
		{
			if((i == bird_x)&&(j == bird_y))
				printf("@");//输出小鸟
			else if( (j == bar1_y) && ((i<bar1_xDown) || (i>bar1_xTop)))
				printf("*");
			else
				printf(" ");//输出空格
		}
		printf("\n");
	}
	printf("得分: %d\n",score);
}

void updateWithoutInput()//与用户输入无关的更新
{
	bird_x++;
	bar1_y--;
	if( bird_y == bar1_y )
	{
		if( (bird_x >= bar1_xDown)&& (bird_x<=bar1_xTop) )
			score++;
		else
		{
			printf("游戏失败\n");
			system("pause");
			exit(0);
		}
	}
	Sleep(150);
}

void updateWithInput()//与用户输入有关的更新
{
	char input;
	if(kbhit())//判断是否有输入
	{
		input = getch();//根据用户得不同输入来移动
		if(input == ' ')
			bird_x =bird_x -2;
	}
}
int main()
{
	startup();//数据的初始化
	while(1)
	{
		show();//显示画面
		updateWithoutInput();//与用户输入无关的更新
		updateWithInput();//与用户输入有关的更新
	}
}

效果图如下:

五、循环移动多个障碍物

代码如下:

#include
#include
#include
#include

//全局变量
int high,width;//游戏画面大小
int bird_x,bird_y;//小鸟的坐标
int bar1_y,bar1_xDown,bar1_xTop;//障碍物1
int bar2_y,bar2_xDown,bar2_xTop;//障碍物2
int score;//得分,经过障碍物的个数

void gotoxy(int x,int y)//将光标移动到(x,y)位置
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(handle,pos);
}

void startup()//数据的初始化
{
	high = 15;
	width = 50;
	bird_x = high/2;
	bird_y = width/3;
	bar1_y=width-20;
	bar1_xDown = high/3;
	bar1_xTop = high/2;
	bar2_y=width-1;
	bar2_xDown = high/3;
	bar2_xTop = high/2;
	score=0;
	system("color 09");
	system("title 游戏中");
}

void show()//显示画面
{
	gotoxy(0,0);//光标移动到原点位置,以下重画清屏
	int i,j;

	for(i=0;i<=high;i++)
	{
		for(j=0;j<width;j++)
		{
			if((i == bird_x)&&(j == bird_y))
				printf("@");//输出小鸟
			else if( (j == bar1_y) && ((i<bar1_xDown) || (i>bar1_xTop && i<high)))
				//输出挡板1
				printf("*");
			else if( (j == bar2_y) && ((i<bar2_xDown) || (i>bar2_xTop && i<high)))
				//输出挡板2
				printf("*");
			else if( i == high)
				printf("-");
			else
				printf(" ");//输出空格
		}
		printf("\n");
	}
	printf("得分: %d\n",score);
}

void updateWithoutInput()//与用户输入无关的更新
{
	bird_x++;
	bar1_y--;
	bar2_y--;
	if( bird_y == bar1_y )
	{
		if( (bird_x >= bar1_xDown)&& (bird_x<=bar1_xTop))
			score++;
		else
		{
			printf("游戏失败\n");
			system("pause");
			exit(0);
		}
	}
	if( bird_y == bar2_y )
	{
		if( (bird_x >= bar2_xDown)&& (bird_x<=bar2_xTop))
			score++;
		else
		{
			printf("游戏失败\n");
			system("pause");
			exit(0);
		}
	}
	if( bird_x==0 || bird_x == high )//挨着底部或顶部,游戏结束
	{
			printf("游戏失败\n");
			system("pause");
			exit(0);
	}
	if(bar1_y<=0)
	{
		bar1_y=width;
		int temp = rand()%(int)(high*0.8);
		bar1_xDown = temp-high/10;
		bar1_xTop = temp+high/10; 
	}
	if(bar2_y<=0)
	{
		bar2_y=width;
		int temp = rand()%(int)(high*0.8);
		bar2_xDown = temp-high/10;
		bar2_xTop = temp+high/10; 
	}
	Sleep(150);
}

void updateWithInput()//与用户输入有关的更新
{
	char input;
	if(kbhit())//判断是否有输入
	{
		input = getch();//根据用户得不同输入来移动
		if(input == ' ')
			bird_x =bird_x -2;
	}
}
int main()
{
	startup();//数据的初始化
	while(1)
	{
		show();//显示画面
		updateWithoutInput();//与用户输入无关的更新
		updateWithInput();//与用户输入有关的更新
	}
}

效果图如下:
项目: flappy bird_第4张图片

你可能感兴趣的:(C语言游戏开发,c++,游戏,C语言)