坐等 高人 帮忙完成弹球游戏源代码
#include "graphics.h"#include "math.h"
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ESC 0x011b
#include "stdio.h"
#include "conio.h" /*所需的头文件*/
int on; /*声明具有开关作用的全局变量*/
static int score; /*声明静态的记分器变量*/
/* 定义开始界面函数*/
int open()
{
setviewport(100,100,500,380,1); /*设置图形窗口区域*/
setcolor(RED); /*设置作图色*/
rectangle(0,0,399,279); /*以矩形填充所设的图形窗口区域*/
setfillstyle(SOLID_FILL,7); /*设置填充方式*/
floodfill(60,60,6); /*设置填充范围*/
setcolor(8);
settextstyle(0,0,3); /*文本字体设置*/
outtextxy(80,80,"COME ON BOY"); /*输出文本内容*/
settextstyle(0,0,1);
outtextxy(100,180,"by lcx");
settextstyle(0,0,1);
outtextxy(120,240,"Press any key to continue......");
}
/*定义退出界面函数*/
int quitwindow()
{
char s[100]; /*声明用于存放字符串的数组*/
setviewport(100,150,540,420,1);
setcolor(YELLOW);
rectangle(0,0,439,279);
setfillstyle(SOLID_FILL,7);
floodfill(50,50,14);
setcolor(12);
settextstyle(0,0,8);
outtextxy(120,80,"End");
settextstyle(0,0,2);
outtextxy(120,200,"quit? Y/N");
sprintf(s,"Your score is:%d",score);/*格式化输出记分器的值*/
outtextxy(120,180,s);
on=1; /*初始化开关变量*/
}
main()
{
int gdriver,gmode;
gdriver=DETECT; /*设置图形适配器*/
gmode=VGA; /*设置图形模式*/
registerbgidriver(EGAVGA_driver); /*建立独立图形运行程序*/
initgraph(&gdriver,&gmode,""); /*图形系统初试化*/
setbkcolor(14);
open(); /*调用开始界面函数*/
getch(); /*暂停*/
while(1) /*此大循环体控制游戏的反复重新进行*/
{
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;
}
}
if(a=='y'&&on==1) /*是否退出游戏*/
{break;}
if(a=='n'&&on==1)
{ continue;}
}
closegraph();
getch();
}