[C++] 纯文本查看 复制代码 # include<bits/stdc++.h>
#include <graphics.h>
#include <math.h>
#include<time.h> //包含随机数,时间函数 //包含EGE的头文件
using namespace std;
int score=0;//分数
int pass=200;//通道宽度
int wall_width=50; //宽度
char ch;
int width =600;
int height =600;
int num;
int count1,time_count=0;
struct ballon
{
float x;//ball.x坐标
float y;//ball.y坐标
float vx;//ball.x向速度
float g;
float vy;//ball.y向速度
int radius;//半径
}ball;
struct wallon
{
float xl,yl;//左上角的坐标
float xr,yr;//右下角的坐标
float vx;//速度
}wall;
float ranx(int min,int max)//随机数产生min到max之间的随机数
{
return min+rand()%(max-min);
}
void start()//初始化
{
srand(time(0));//随机种子函数
ball.x=400 ;//x坐标
ball.y=300 ;//y坐标
ball.vx=0;//x向速度
ball.g=0.2;
ball.vy=0;//y向速度
ball.radius =5;//半径
wall.xl=width-wall_width;
wall.yl=0;
wall.xr=width;
wall.yr=ranx(100,300 );
wall.vx=2;
initgraph(width, height); //初始化图形界面
setcolor(RED); //设置画图线为红色
setbkcolor(WHITE);//设置背景颜色为白色
setfillcolor(RED);//设置填充颜色为红色
setfont(25,0,"幼圆");//(字体高度,字体宽度(为0即为自适应),字形)设置字体为25,幼圆字体
setbkmode(TRANSPARENT); //设置文字背景色为透明(默认为有背景色)
}
void update()//数据更新
{
//墙体更新
wall.xl-=wall.vx;
wall.xr=wall.xl+wall_width;
if(wall.xr<0)
{
score++;
wall.xl=width-wall_width;
wall.yl=0;
wall.xr=width;
wall.yr=ranx(100,300 );
}
//球体更新
ball.vy+=ball.g;
ball.y+=ball.vy;
ball.x+=ball.vx;
if(ball.y>=height-ball.radius)
{
ball.y=height-ball.radius;
ball.vy=-ball.vy;
}
if(ball.y<=ball.radius)
{
ball.vy=-ball.vy;
}
if(ball.x>=width-ball.radius)
{
ball.x=width-ball.radius ;
ball.vx=-ball.vx;
}
if(ball.x<=ball.radius)
{
ball.vx=-ball.vx;
}
// 按键响应
if(kbhit())
{
ch = getch();
if(ch==' ')
{
ball.vy=-8;
}
}
}
bool is_near()//判断球体两点之间的距离
{
if((ball.x>=wall.xl)&&(ball.x<=wall.xr))
{
if((ball.y<(wall.yr+ball.radius))||(ball.y>(wall.yr+pass-ball.radius)))
return true;
else
return false;
}
return false;
}
void draw()
{
fillellipse(ball.x, ball.y, ball.radius, ball.radius); //画一个实心圆
bar(wall.xl, wall.yl, wall.xr, wall.yr);
bar(wall.xl, wall.yr+pass, wall.xr, height);
xyprintf(20,20," 得分:%d",score);//格式化输出文字
//xyprintf(20,60,"耗时:%d",time_count);//格式化输出文字
Sleep(10);
cleardevice();
}
int main()
{
a:start();
while(1)
{
update();
draw();
if(is_near() )
{
break;
}
}
goto a;
getch();
return 0;
} |