?? 簡單彈力球游戲.txt
字號:
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#define R 4 /*球半徑*/
struct box
{ int x;
int y;
int color;
}a[6][14];
int Keystate;
int MouseExist;
int MouseButton;
int MouseX;
int MouseY=400;
int dx=1,dy=1; /*計算球的反彈*/
int sizex=18,sizey=10; /*box的寬度和長度*/
void draw(int x,int y) /* x, y為左上角坐標sizex,sizey為長和寬*/
{
int sizx=sizex-1;
int sizy=sizey-1;
setcolor(15);/*這里最好用白色*/
line(x,y,x+sizx-1,y);
line(x,y+1,x+sizx-2,y+1);
line(x,y,x,y+sizy-1);
line(x+1,y,x+1,y+sizy-2);
setcolor(8);/*這里最好用深灰色*/
line(x+1,y+sizy,x+sizx,y+sizy);
line(x+2,y+sizy-1,x+sizx,y+sizy-1);
line(x+sizx-1,y+1,x+sizx-1,y+sizy);
line(x+sizx,y+2,x+sizx,y+sizy);
setcolor(7);/*這里最好用灰色*/
putpixel(x,y+sizy,3);
putpixel(x+1,y+sizy-1,3);
putpixel(x+sizx,y,3);
putpixel(x+sizx-1,y+1,3);
setfillstyle(1, 7);/*這里最好用灰色,設置填充模式*/
bar(x+2,y+2,x+sizx-2,y+sizy-2);
}
void picture() /*畫box*/
{ int i,j;
setcolor(15);
rectangle(99,49,413,451);
for(i=0;i<6;i++)
for(j=0;j<14;j++)
{ a[i][j].color=0;
a[i][j].x=104+j*22;
a[i][j].y=54+i*14;
draw(104+j*22,54+i*14);
}
sizex=50,sizey=5;
}
/*鼠標光標顯示*/
void MouseOn(int x,int y)
{
draw(x,y);
}
/*隱藏鼠標*/
void MouseOff()
{
int x,y;
x=MouseX;
y=MouseY;
setfillstyle(1,0);
bar(x,y,x+sizex,y+sizey);
}
/*鼠標是否加載
MouseExist:1=加載
0=未加載
MouseButton:鼠標按鍵數目 */
void MouseLoad()
{
_AX=0x00;
geninterrupt(0x33);
MouseExist=_AX;
MouseButton=_BX;
}
/*鼠標狀態值初始化*/
void MouseReset()
{
_AX=0x00;
geninterrupt(0x33);
}
/*設置鼠標左右邊界
lx:左邊界
gx:右邊界 */
void MouseSetX(int lx,int rx)
{
_CX=lx;
_DX=rx;
_AX=0x07;
geninterrupt(0x33);
}
/*設置鼠標上下邊界
uy:上邊界
dy:下邊界 */
void MouseSetY(int uy,int dy)
{
_CX=uy;
_DX=dy;
_AX=0x08;
geninterrupt(0x33);
}
/*設置鼠標當前位置
x:橫向坐標
y:縱向坐標 */
void MouseSetXY(int x,int y)
{
_CX=x;
_DX=y;
_AX=0x04;
geninterrupt(0x33);
}
/*設置鼠標速度(缺省值:vx=8,vy=1)
值越大速度越慢 */
void MouseSpeed(int vx,int vy)
{
_CX=vx;
_DX=vy;
_AX=0x0f;
geninterrupt(0x33);
}
/*獲取鼠標當前位置*/
void MouseGetXY()
{
_AX=0x03;
geninterrupt(0x33);
MouseX=_CX;
MouseY=_DX;
}
void MouseStatus()/*鼠標按鍵情況*/
{
int x;
int status;
status=0;/*默認鼠標沒又移動*/
x=MouseX;
if(x==MouseX&&status==0) /*鼠標沒動*/
{
MouseGetXY();
if(MouseX!=x)
if(MouseX+50<413)
status=1;
}
if(status)/*移動情況才重新顯示鼠標*/
{
setfillstyle(1,0);
bar(x,MouseY,x+sizex,MouseY+sizey);
MouseOn(MouseX,MouseY);/*新位置顯示*/
}
}
void Move()
{int ballX; /*球的圓心*/
int ballY=MouseY-R;
int i,j,t=0;
randomize();
while(ballX=random(409))
if(ballX>=105 && ballX<=408)
break;
while(kbhit)
{
MouseStatus();
if(ballY<=(58-R)) /*碰上反彈*/
dy*=(-1);
if(ballX>=(413-R)||ballX<=(108-R)) /*碰左右反彈*/
dx*=(-1);
setcolor(YELLOW);
circle(ballX+=dx,ballY-=dy,R-1);
delay(2500);
setcolor(0);
circle(ballX,ballY,R-1);
for(i=0;i<6;i++)
for(j=0;j<14;j++) /*判斷是否傳記撞擊box*/
if(t<84&&a[i][j].color==0 && ballX>=a[i][j].x && ballX<=a[i][j].x+18
&& ballY>=a[i][j].y && ballY<=a[i][j].y+10)
{t++;
dy*=(-1);
a[i][j].color=1;
setfillstyle(1,0);
bar(a[i][j].x,a[i][j].y,a[i][j].x+18,a[i][j].y+10);
}
if(ballX==MouseX||ballX==MouseX-1||ballX==MouseX-2&&ballX==(MouseX+50+2)||ballX==(MouseX+50+1)||ballX==(MouseX+50)) /*碰板反彈*/
if(ballY>=(MouseY-R))
{ dx*=(-1);
dy*=(-1); /*原路返回*/
}
if(ballX>MouseX && ballX<(MouseX+50)) /*碰板反彈*/
if(ballY>=(MouseY-R))
dy*=(-1);
if(t==84)
{ sleep(1);
cleardevice();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(100,200,"Win");sleep(1);
break;
}
if(ballY>MouseY)
{ sleep(1);
cleardevice();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(100,200,"Game Over");sleep(1);
break;
}
}
}
void main()
{int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
picture();
MouseSetX(100,362); /*設置鼠標移動的范圍*/
MouseSetY(MouseY,MouseY); /*鼠標只能左右移動*/
MouseSetXY(150,MouseY); /*鼠標的初始位置*/
MouseOn(MouseX,MouseY); /*第一次顯示鼠標*/
Move();
closegraph();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -