等高人将此弹球游戏 添加开场画面 结束画面 难度选着 谢谢了
#include "graphics.h"#include "math.h"
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ESC 0x011b
int x,y,x1,y1,key,t1,t2,keyx,keylong,keymove,over=0,i,tt=0,fast;
int ballx[9]={53,103,263,120,236,390,410,450,600};
int bally[9]={158,239,120,113,30,313,120,263,231},ballz[9]={0};
float ls;
win()
{float lx,ly,ll;
for(i=0;i<9;i++)
{
if(ballz[i]==1)/*假如球体已经消失就不判定*/
continue;
lx=(float)(ballx[i]-x);
ly=(float)bally[i]-y;
ll=lx*lx+ly*ly;
ls=sqrt(ll);
if((int)ls<17)/*判定两球是否碰到*/
{tt++;/*记录消失几个球*/
fast-=50;/*速度加快*/
if(i%2==0)/*移动加快*/
keymove+=5;
else
{
setcolor(0);
rectangle(keyx,460,keyx+keylong,470);
keylong-=10;/*长条变短*/
setcolor(YELLOW);
rectangle(keyx,460,keyx+keylong,470);
}
ballz[i]=1;
setcolor(0);
circle(ballx[i],bally[i],10);
if(y<bally[i])
if(x<ballx[i])
{t1=-1;t2=-1;}
else
{t1=1;t2=-1;}
else
if(x<ballx[i])
{t1=-1;t2=1;}
else
{t1=1;t2=1;}
}
}
}
fungo() /*飞行小球运行的函数*/
{ x=100,y=50,keyx=200,keylong=100,keymove=15,fast=6000;
for(i=0;i<9;i++) /*循环9次绘制9个被撞击的圆圈*/
{
setcolor(i+1); /*设置圆圈的颜色,每个圆圈一种颜色*/
circle(ballx[i],bally[i],10); /*使用设置好的画球数组绘制被撞击的圆圈*/
}
sleep(1);
t1=t2=1;
while(1) /*执行循环*/
{
while(!kbhit()) /*从键盘上响应返回值,KBHIT()的返回值是0*/
{
setcolor(YELLOW); /*设置当球板的颜色 黄色*/
rectangle(keyx,460,keyx+keylong,470); /*设置矩形挡板,挡板长100*/
x1=x;
y1=y;
x+=t1;
y+=t2;
setcolor(4); /*设置颜色为红色*/
circle(x,y,6); /*绘制半径为6的运动小球*/
delay(fast);
setcolor(0); /*设置颜色*/
circle(x,y,6); /*绘制半径为6的圆圈*/
win();
if(tt==9)/*胜利*/
{
cleardevice(); /*清除屏幕显示,仅用于图形工作方式*/
over=1; /*生理和失败游戏都结束*/
setcolor(RED); /*设置颜色*/
settextstyle(0,0,4); /*设置图形模式下字符显示底字体、方向和大小*/
setusercharsize(3,1,3,1); /*图形模式下设置人一比例大小的字体显示*/
outtextxy(200,200," YOU WIN! "); /*图形模式下在x,y坐标位置显示一行字符串*/
break;
}
if(y>480)/*失败*/
{
cleardevice(); /*清除屏幕显示,仅用于图形工作方式*/
over=1; /*生理和失败游戏都结束*/
setcolor(RED);
settextstyle(0,0,4); /*设置图形模式下字符显示底字体、方向和大小*/
setusercharsize(3,1,3,1); /*图形模式下设置人一比例大小的字体显示*/
outtextxy(200,200,"GAME OVER"); /*图形模式下在x,y坐标位置显示一行字符串*/
break; /*在屏幕显示游戏结束*/
}
else if(x==11&&y==11)/*判定碰到东西*/
{t1=1;t2=1;}
else if(x==629&&y==11)
{t1=-1;t2=1;}
else if(x==11)
{
if(y<y1)
{t1=1;t2=-1;}
else
{t1=1;t2=1;}
}
else if(y==11)
{
if(x<x1)
{t1=-1;t2=1;}
else
{t1=1;t2=1;}
}
else if(x==629)
{
if(y1>y)
{t1=-1;t2=-1;}
else
{t1=-1;t2=1;}
}
else if(y==449)
{
if(x>=keyx&&x<=keyx+keylong)
{
if(x<(keyx+keylong/4))
{t1=-1;t2=-1;}
else if(x>=(keyx+keylong/4)&&x<(keyx+keylong/2))
{t1=-1;t2=-2;}
else if(x>=(keyx+keylong/2)&&x<(keyx+keylong/4*3))
{t1=1;t2=-2;}
else
{t1=1;t2=-1;}
}
}
}
if(over) /*如果游戏结束,则退出*/
break;
key=bioskey(0); /*读取键盘值(返回一个键盘值,如无键盘按下,一直等待)*/
setcolor(0); /*设置挡板前景颜色*/
rectangle(keyx,460,keyx+keylong,470); /*图形方式下,在屏幕上画一个矩形*/
if(key==ESC)
{cleardevice();break;} /*清除屏幕显示,仅用于图形工作方式*/
else if(key==LEFT)
keyx-=keymove;
else if(key==RIGHT)
keyx+=keymove;
}
}
main()
{int gd=DETECT,gr;
initgraph(&gd,&gr,"c:\\tc");
fungo();
getch();
sleep(1);
closegraph();
}