/*
日期: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
今日推荐
周排行