?? dikongduizhan.c
字號:
/*江西理工大學*/
drawmat(jiang16S,16,320,400,8);
drawmat(xi16S,16,336,400,8);
drawmat(li16S,16,352,400,8);
drawmat(gong16S,16,368,400,8);
drawmat(da16S,16,384,400,8);
drawmat(xue16S,16,400,400,8);
/*電子信息科學與技術 專業*/
drawmat(dian16S,16,320,432,8);
drawmat(zi16S,16,336,432,8);
drawmat(xin16S,16,352,432,8);
drawmat(xi16S2,16,368,432,8);
drawmat(ke16S,16,384,432,8);
drawmat(xue16S,16,400,432,8);
drawmat(yu16S,16,416,432,8);
drawmat(ji16S,16,432,432,8);
drawmat(shu16S,16,448,432,8);
drawmat(zhuan16S,16,472,432,8);
drawmat(ye16S,16,486,432,8);
/*畫啟動坦克*/
setfillstyle(1,4);
bar(270,240,370,340);
setfillstyle(1,14);
bar(280,250,360,330);
setfillstyle(1,GREEN);
fillellipse(320,290,30,30);
setfillstyle(1,8);
fillellipse(320,290,20,20);
setfillstyle(1,8);
bar(310,180,330,300);
/*聲音*/
for(i=100;i<=500;i=i+100)
{
sound(i);
sleep(1);
nosound();
}
}
/*******************************************************************************
** 函數名稱:bkground
** 函數描述:畫天地環境
** 輸入參數:無
** 輸出參數:無
*******************************************************************************/
int bkground()
{
setfillstyle(1,1); /*draw sky*/
bar(50,0,640,130);
setfillstyle(1,3);
bar(50,130,640,320);
setfillstyle(1,14); /*draw land*/
bar(50,320,640,480);
}
/*******************************************************************************
** 函數名稱:grass
** 函數描述:畫草地
** 輸入參數:x,y
** 輸出參數:無
*******************************************************************************/
int grass(int x,int y)
{
setcolor(2);
line(x,y,x-3,y-5);
line(x,y,x+3,y-5);
line(x,y,x,y-8);
}
/*******************************************************************************
** 函數名稱:tree
** 函數描述:畫樹
** 輸入參數:x,y
** 輸出參數:無
*******************************************************************************/
int tree(int x,int y)
{
setfillstyle(1,6);
bar(x-5,y,x+5,y-50);
setfillstyle(1,2);
setcolor(2);
fillellipse(x,y-65,30,20);
fillellipse(x,y-85,18,25);
}
/*******************************************************************************
** 函數名稱:tank
** 函數描述:畫坦克
** 輸入參數:x,y
** 輸出參數:無
*******************************************************************************/
int tank(int fx,int x,int y)/*fx是方向參數,1代表left,0代表right*/
{ /*坦克length=50,height=70 */
int *earth;
int sizee;
if (tankstart==1) /*運行時地面環境處理*/
{
if(fx==1)
{putimage(x-15,y-45,earth,COPY_PUT);} /*還原空地,覆蓋坦克*/
else if (fx==0)
{putimage(x-35,y-45,earth,COPY_PUT);}
free(earth);
getimage(x-25,y-45,x+25,y+20,earth); /*更新存儲地面環境 */
}
if (tankstart==0) /*初始化坦克 */
{tankstart=1;
sizee=imagesize(x-25,y-45,x+25,y+20) ;
earth=malloc(sizee);
getimage(x-25,y-45,x+25,y+20,earth); /*初次存儲地面環境 */
}
/*畫坦克*/
setfillstyle(1,4);
bar(x-25,y-20,x+25,y+20);
setfillstyle(1,14);
bar(x-21,y-16,x+21,y+16);
setfillstyle(1,8);
fillellipse(x,y,10,10);
bar(x-4,y,x+4,y-45);
}
/*******************************************************************************
** 函數名稱:plmid
** 函數描述:畫中型飛機
** 輸入參數:x,y
** 輸出參數:無
*******************************************************************************/
int plmid(int x,int y,int show)
{ /*飛機length=78,height=60 */
int *plmid;
int sizep;
if (show==1)
{
if (planstart==0)
{
sizep=imagesize(x,y-30,x+78,y+30);
plmid=malloc(sizep);
getimage(x,y-30,x+78,y+30,plmid);/*初次環境存圖*/
planstart=1;
}
putimage(x+10,y-30,plmid,COPY_PUT); /*還原環境*/
free(plmid);
/*畫飛機*/
setcolor(LIGHTBLUE);
line(x,y,x+10,y-5); /* 機頭 */
line(x,y,x+10,y+5);
/*bar(x+10,y-5,x+70,y+5);機身,閃爍 */
rectangle(x+10,y-5,x+70,y+5);/*機身*/
line(x+30,y-5,x+49,y-30);/* 上機翼 */
line(x+49,y-30,x+60,y-30);
line(x+60,y-30,x+46,y-5);
line(x+33,y+3,x+55,y+30);/* 下機翼 */
line(x+55,y+30,x+65,y+30);
line(x+65,y+30,x+50,y+2);
line(x+70,y+5,x+78,y+15);/* 尾翼 */
line(x+78,y+15,x+78,y-15);
line(x+78,y-15,x+70,y-5);
}
}
/*******************************************************************************
** 函數名稱:plsml
** 函數描述:畫小型飛機
** 輸入參數:x,y
** 輸出參數:無
*******************************************************************************/
int plsmal(int x,int y,int show)
{
/*length=50,height=36*/
if (show==1)
{
setcolor(RED);
{line(x,y,x+50,y);/*前機身*/
line(x,y,x+16,y-10);
line(x+16,y-10,x+35,y);
line(x+35,y,x+50,y-15);/*后機身*/
line(x+50,y-15,x+50,y);
line(x+14,y-8,x+20,y-20);/*上機翼*/
line(x+20,y-20,x+28,y-20);
line(x+28,y-20,x+22,y-6);
line(x+12,y-3,x+20,y+16); /*下機翼*/
line(x+20,y+16,x+28,y+16);
line(x+28,y+16,x+20,y-3);
}
}
}
/*******************************************************************************
** 函數名稱:plsml
** 函數描述:畫小型飛機
** 輸入參數:x,y
** 輸出參數:無
*******************************************************************************/
int plbig(int x,int y,int show)
{
/*length=120,height=95*/
if (show==1)
{
setcolor(RED);
ellipse(x,y,0,360,40,15);/*前機身*/
line(x+40,y,x+65,y-30);/*后機身*/
line(x+65,y-30,x+80,y-30);
line(x+80,y-30,x+80,y);
line(x+80,y,x+40,y);
line(x-5,y,x+5,y+50);/*下機翼*/
line(x+5,y+50,x+20,y+50);
line(x+20,y+50,x+10,y);
line(x-3,y-15,x+3,y-45); /*上機翼*/
line(x+3,y-45,x+18,y-45);
line(x+18,y-45,x+15,y-14);
}
}
/*******************************************************************************
** 函數名稱:shot
** 函數描述:
** 輸入參數:x,y
** 輸出參數:無
*******************************************************************************/
int shot(int x,int y)
{ int *buf;
getimage(x-5,y-5,x+5,y+5,buf);
setcolor(8);setfillstyle(1,8);
fillellipse(x,y,4,5); delay(10000);
putimage(x-5,y-5,buf,COPY_PUT);
}
/*******************************************************************************
** 函數名稱:boom
** 函數描述:繪制飛機中彈后的爆炸效果
** 輸入參數:x,y
** 輸出參數:無
*******************************************************************************/
int boom(int x,int y)
{setcolor(RED);
circle(x+40,y,20);
pieslice(x+40,y,0,360,18);
line(x,y,x+80,y);
line(x+40,y-40,x+40,y+40);
line(x+20,y-30,x+60,y+30);
line(x+60,y-30,x+20,y+30);
}
/*******************************************************************************
** 函數名稱:drawmouse
** 函數描述:畫鼠標
** 輸入參數:x,y,fl
** 輸出參數:無
*******************************************************************************/
void drawmouse(int x,int y,int fl)
{
/*fl表示先后順序,即first/last,0表示先,1表示后*/
int *buf;
int size;
if(x>=630)
{y=630;}
if(y<10)/*防止鼠標到達屏幕上邊界時候出錯,以免程序異常退出*/
{x=10;}
else
{
size=imagesize(x,y-5,x+15,y+15);
buf=malloc(size);
if (first==0)
{
if(fl==0)
{delay(10000);
putimage(x,y-5,buf,COPY_PUT);
}
}
if(fl==1)
{
getimage(x,y-5,x+10,y+10,buf);
setcolor(RED);
setfillstyle(11,YELLOW);
bar(x,y,x+10,y+10);
line(x,y,x+5,y-5);
line(x+5,y-5,x+10,y);
line(x+5,y-5,x+5,y+7);
free(buf);
first=0;
}
}
}
/*******************************************************************************
** 函數名稱:main
** 函數描述:
** 輸入參數:無
** 輸出參數:無
*******************************************************************************/
main() /**/
{
union REGS regs; /*必須放在第一行*/
int mx,my;
int i,j; /*畫草地 循環參數 */
int is=1; /*shot連射控制參數*/
int k=0; /*公共公用循環參數*/
int xt,yt; /*tank 的x,y坐標 */
int xp=620,yp=40; /*plane的x,y坐標 */
int xs[20],ys[20]; /*shot 的x,y坐標 */
int key; /*鍵盤按鍵參數 */
initgr(); /* BGI初始化 */
startpicture(); /* 啟動界面 */
/*游戲程序主界面*/
bkground(); /*畫天地環境*/
for (i=53;i<640;i=i+10) /*畫草地 */
{for (j=330;j<=450;j=j+15)
{grass(i,j);}
}
tree(100,440); /*畫樹 */
tree(450,450);
tree(500,400);
xt=200;yt=400; /*????????????????????曾經導致錯誤退出?????????????????????????*/
/*操作游戲*/
while(1)
{
regs.x.ax=3; /*鼠標*/
int86(0x33,®s,®s);
drawmouse(mx,my,0);
mx=regs.x.cx;
my=regs.x.dx;
xp=xp-10; /*控制plan飛行*/
plmid(xp,yp,1);
if (xp<60)
{xp=630;}
if(kbhit()) /* keyboard-hit,當有鍵按下時,執行if內程序,沒有就繼續往下執行 */
{
key=bioskey(0);
if(ESC==key) {break; } /*退出程序*/
switch(key)
{
case LEFT: xt=xt-10;
if(xt<30)
{xt=30; }
tank(1,xt,yt);
break;
case RIGHT: xt=xt+10;
if(xt>610)
{xt=610;}
tank(0,xt,yt);
break;
case UP: if (is<20) /*判斷炮彈已使用數目,實現連射*/
{is=is+1;}
else
{is=0;}
xs[is]=xt; /*把炮彈放在坦克炮口處*/
ys[is]=yt-47;
shot(xs[is],ys[is]); /*發射炮彈,shot*/
break;
default:break;
}/*switch(key) end*/
}/*if(kbhit()) end*/
ys[is]=ys[is]-20; /*控制炮彈shot飛行*/
for(k=0;k<20;k++) /*判斷飛機是否中彈*/
{if ((xp-xs[is])<80&&(xp>xs[is])&&ys<70)
{boom(xs[is],ys[is]);}
}/*for(k) end*/
setbkcolor(LIGHTBLUE); /*鼠標*/
setcolor(BLUE);
drawmouse(mx,my,1);
delay(100000);
}/*while(1) end*/
getch(); /* 暫停一下,看看前面繪圖代碼的運行結果 */
closegr(); /* 恢復TEXT屏幕模式 */
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -