Discuz! Board

 找回密码
 立即注册
查看: 322|回复: 0

小鸟飞飞

[复制链接]

27

主题

29

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
14147
发表于 2023-3-4 14:35:27 | 显示全部楼层 |阅读模式
[C++] 纯文本查看 复制代码
#include<bits/stdc++.h>
#include <graphics.h> //包含EGE的头文件
#include<time.h>
using namespace std;

int width=500;
int height=600;
int num;
int count1;
char ch;
int wallk=50;
int wallc=150;
int score;

struct ballon
{
	float x;//ball.x坐标
    float y;//ball.y坐标
    float vx;//ball.x向速度
    float vy;//ball.y向速度
    int radius;//半径
    float g;
}ball;

struct wallon
{
	int xl;
	int yl;
	int xr;
	int yr;
	int vx;
}wall;

void  start()
{
	srand(time(0));//随机种子函数     
	
	wall.xl=width-wallk;
	wall.yl=0;
	wall.yr=rand()%150+100;
	wall.xr=width;
	wall.vx=-3;
	
    ball.x=100;
    ball.y=300;
    ball.vx=0;
    ball.vy=0;
    ball.radius=rand()%5+10;
    ball.g=0.2;
    count1=1;
     
    initgraph(width, height);               //初始化图形界面
    setcolor(RED);  //设置画图线为红色
    setbkcolor(WHITE);//设置背景颜色为白色
    setfillcolor(BLUE);//设置填充颜色为红色
    setfont(25,0,"幼圆");//(字体高度,字体宽度(为0即为自适应),字形)设置字体为25,幼圆字体
    setbkmode(TRANSPARENT); //设置文字背景色为透明(默认为有背景色)
}

void update()//数据更新
{
    ball.vy=ball.vy+ball.g;
	//ball.vx=ball.vx+ball.g;
	ball.y=ball.y+ball.vy;
	ball.x=ball.x+ball.vx;
	if(ball.y>=height-ball.radius)
	{
		ball.y=height-ball.radius;
		ball.vy=-ball.vy;
	}
	else if(ball.y<=ball.radius)
	{
		ball.y=ball.radius;
		ball.vy=-ball.vy;
	}
	if(ball.x>=width-ball.radius)
	{
		ball.x=width-ball.radius;
		ball.vx=-ball.vx;
	}
	else if(ball.x<=ball.radius)
	{
		ball.x=ball.radius;
		ball.vx=-ball.vx;
	}
	
	wall.xl=wall.xl+wall.vx;
	wall.xr=wall.xr+wall.vx;
	if(wall.xr<=0)
	{
		wall.xr=width;
		wall.xl=width-wallk;
		wall.yr=rand()%250+100;
		score++;
	}
	
	
    if(kbhit())
    {
		ch=getch();
    	if(ch==' ')
        {
            ball.vy=-5;
        } 
    }   
}

void drawball()//画球 
{
	//xyprintf(20,20,"病人数量:%d",count1);//格式化输出文字
	fillellipse(ball.x, ball.y, ball.radius, ball.radius); //画一个实心圆
	
	bar(wall.xl,wall.yl,wall.xr,wall.yr);
	bar(wall.xl,wallc+wall.yr,wall.xr,height);
	
	xyprintf(10,35,"得分:%d",score);
	
	Sleep(10);
	cleardevice();
}

bool gameover()
{
	if(ball.x>wall.xl&&ball.x<wall.xr)
	{
		if((ball.y-ball.radius<wall.yr)||(ball.y+ball.radius>wall.yr+wallc))
		{
			return true;
		}
	}
	return false;
}

int main()
{
	start();
    while(1)
    {
    	update();
        drawball();
        if(gameover())
        {
        	break;
		}
    }
    setfont(100,0,"楷体");
    xyprintf(150,200,"GAME");//格式化输出文字
    xyprintf(150,300,"OVER");//格式化输出文字
    getch();
     
    return 0;
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-2-13 05:06 , Processed in 0.050990 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表