机器人大战c语言代码.docx
- 文档编号:7623858
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:8
- 大小:16.34KB
机器人大战c语言代码.docx
《机器人大战c语言代码.docx》由会员分享,可在线阅读,更多相关《机器人大战c语言代码.docx(8页珍藏版)》请在冰豆网上搜索。
机器人大战c语言代码
#include"graphics.h"
#include"bios.h"
#include"conio.h"
#include"stdlib.h"
#include"dos.h"
#defineUP0x4800
#defineDOWN0x5000
#defineLEFT0x4600
#defineRIGHT0x4d00
#defineESC0x0016
/*定义两种屏幕显示模式*/
#defineVGA2560x13
#defineTEXT0x03
intx,y,l,sxzy=0,zx=0,xx=5,yy=167;
intx1=5,y1=3,x3=0,y3=0,x4=0,y4=0;
intenemylife=10,playerlife=20;
intboard[100][170];
unsignedcharfar*VideoBuffer=(charfar*)0xA0000L;
/*设置屏幕显示模式*/
voidSetScreenMode(intmode){unionREGSinregs,outregs;
inregs.h.ah=0;
inregs.h.al=(unsignedchar)mode;
int86(0x10,&inregs,&outregs);}/*画垂直线函数*/
voidDrawVerticalLine(inty0,inty1,intx,unsignedintcolor){unsignedintaddress,n,temp;
address=320*y0+x;
for(n=0;n<=y1-y0;n++){if(y0>y1){temp=y1;
y1=y0;
y0=temp;}VideoBuffer[address]=color;
address+=320;}}
/*绘制水平线函数*/
voidDrawHorizontalLine(intx0,intx1,inty,unsignedintcolor){unsignedintaddress,n,temp;
address=320*y+x0;
for(n=0;n<=x1-x0;n++){if(x0>x1){temp=x1;
x1=x0;
x0=temp;}VideoBuffer[address]=color;
address+=1;}}
voidp_pixel(intx,inty,unsignedintcolor){VideoBuffer[y*320+x]=color;}/*绘制正方形函数*/
voidDrawSquare(intx,inty,intside,intcolor){DrawHorizontalLine(x,x+side,y,color);
DrawHorizontalLine(x,x+side,y+side,color);
DrawVerticalLine(y,y+side,x,color);
DrawVerticalLine(y,y+side,x+side,color);}/*绘制矩形函数*/
voidDrawRectangle(intx1,inty1,intx2,inty2,intcolor){DrawHorizontalLine(x1,x2,y1,color);
DrawHorizontalLine(x1,x2,y2,color);
DrawVerticalLine(y1,y2,x1,color);
DrawVerticalLine(y1,y2,x2,color);}/*绘制实心矩形函数*/
voidFillRectangle(intx1,inty1,intx2,inty2,intcolor){inti;
for(i=y1;i<=y2;i++)
DrawHorizontalLine(x1,x2,i,color);}/*每次出拳后,删除拳头*/
voidClearBox(){delay
(100);
DrawSquare(x3,y3,5,0);
DrawSquare(x3,y3-6,5,0);
x3=0;
y3=0;}/*绘制我方机器人*/
voidDrawPlayer(){intcas=0;
if(sxzy==18432)
/*如果按上键,就往上移动*/{yy-=5;
if(yy yy+=5; if(yy==12) yy=17;}if(sxzy==20480)/*如果按下键,就往下移动*/{yy+=5; if(yy==172) yy=167;}if(sxzy==19200)/*如果按左键,就往左移动*/{xx--; if(xx==-1) xx=0;}if(sxzy==19712)/*如果按右键,就往右移动*/{xx++; if(xx==13) xx=12;}sxzy=0; for(x=xx;x<5+xx;x++)/*给自己搭建骨架*/{if(x==xx)/*左手*/{y=167; board[x][yy]=1; if(zx==11386){board[x][yy-12]=3; board[x][yy-11]=3; if((yy-11 enemylife--; cas=1; zx=0;}x++;}if(x==xx+4)/*右手*/{y=167; board[x][yy]=1; if(zx==11640){board[x][yy-12]=3; board[x][yy-11]=3; if((yy-11 enemylife--; cas=2; zx=0;}break;}for(y=yy;y for(x=0;x<100;x++)/*开始往骨架上放‘肉’*/{l=1; for(y=0;y<170;y++) if(board[x][y]==1||board[x][y]==3){if(cas==1){board[x][yy-10]=1; board[x][yy]=0; cas=0;}if(cas==2){board[x+4][yy-10]=1; board[x+4][yy]=0; cas=0;}if(board[x][y]==3){x3=x+105+x*5; y3=y+l*5;}DrawSquare(x+105+x*5,y+l*5,5,3); l++;}} ClearBox();}/*搭建设对方骨架*/ voidDrawEnemySk(){intran,cas=0,p=0; delay (200); for(x=99;x>=0;x--){l=1; for(y=169;y>=0;y--) if(board[x][y]==2||board[x][y]==4){DrawSquare(x+105+x*5,35+y-l*5,5,0); l++; board[x][y]=0;}} ran=random (5); if(ran==0)/*往上走*/{y1-=5; if(y1==-2) y1=3;}if(ran==1){y1+=5; if(y1+30>yy)/*不允许超过我的机器人的身后*/ y1-=5; if(y1==158) /*往下走,如果超过外框,就减去一步,实际上是永远也不会超过*/ y1=153;}if(ran==2)/*往左走*/{x1--; if(x1==-1) x1=0;}if(ran==3)/*往右走*/{x1++; if(x1==13) x1=12;}if(ran==4){y1+=5; if(y1+30>yy) /*不允许超过我的机器人的身后*/ y1-=5; if(y1==158) /*往下走,如果超过外框,就减去一步,实际上是永远也不会超过*/ y1=153;}for(x=x1;x /*判断敌人是否靠近,如果是就出拳头*/{p=random (2); if(p==1){board[x][y1+15]=4; board[x][y1+16]=4; board[x][y1+17]=4; if((yy-11 playerlife--; cas=1;}p=0;}if(cas==1){board[x][y1+14]=2; cas=0;}else board[x][y1]=2; x++;}if(x==x1+4){if((y1+45>=yy)&&x<=xx+4){p=random (2); if(p==1){board[x][y1+15]=4; board[x][y1+16]=4; board[x][y1+17]=4; if((yy-11 playerlife--; cas=1;}p=0;}if(cas==1){board[x][y1+14]=2; cas=0;}else board[x][y1]=2; break;}for(y=y1;y+3>y1;y--){board[x][y]=2;}}}voidClearEnemyBox()/*删除对方拳头*/{delay (100); DrawSquare(x4,y4+12,5,0); DrawSquare(x4,y4+6,5,0); DrawSquare(x4,y4,5,0); x4=0; y4=0;}voidDrawEnemy()/*画出对方*/{intkey=0; while(key! =283&&enemylife>0&&playerlife>0){FillRectangle(250+enemylife,50,300,53,0); FillRectangle(250+playerlife,150,280,153,0); while(bioskey (1)==0){DrawEnemySk(); for(x=99;x>=0;x--){l=1; for(y=169;y>=0;y--) if(board[x][y]==2||board[x][y]==4){DrawSquare(x+105+x*5,35+y-l*5,5,3); if(board[x][y]==4){x4=x+105+x*5; y4=35+y-l*5;}l++;}} ClearEnemyBox();}key=bioskey (0); if(key==18432||key==20480||key==19200||key==19712||key==11386||key==11640){if(key==11386||key==11640) /*按键的判断*/ zx=key; else sxzy=key; key=0; for(x=0;x<100;x++){l=1; for(y=0;y<170;y++) if(board[x][y]==1||board[x][y]==3){DrawSquare(x+105+x*5,y+l*5,5,0); l++; board[x][y]=0;}} DrawPlayer();}}}intmain(){intx=0,y,i=1,key,c=0,p,k=0,e=1; intgdriver=DETECT,gmode; initgraph(&gdriver,&gmode,"e: \\tc"); cleardevice(); setcolor(RED); while(i){settextstyle(1,0,5); setwritemode(XOR_PUT); outtextxy(x,200,"Xman"); delay (10); outtextxy(x,200,"Xman"); x+=2; if(x>200) i=0;}outtextxy(x,200,"Xman"); while(! kbhit()){setcolor(c); outtextxy(x,200,"Xman"); c++; if(c>16) c=0;}settextstyle(0,0,1); setcolor(GREEN); outtextxy(300,300,"pleasepress's'tostart"); while(e){k=bioskey (0); if(k==8051) e=0;}board[99][169]=4; closegraph(); SetScreenMode(VGA256); /*绘制游戏区的边框*/ DrawRectangle(104,20,207,190,7); FillRectangle(250,50,250+enemylife,53,4); FillRectangle(250,150,250+playerlife,153,4); DrawPlayer(); DrawEnemy(); initgraph(&gdriver,&gmode,"e: \\tc"); if(enemylife==0){setcolor(WHITE); settextstyle(0,0,4); outtextxy(100,20,"YouWin! "); setcolor(GREEN); outtextxy(101,20,"YouWin! "); getch(); getch(); getch();}elseif(playerlife==0){setcolor(WHITE); settextstyle(0,0,4); outtextxy(100,20,"YouFailed! "); setcolor(GREEN); outtextxy(101,20,"YouFailed! "); getch(); getch(); getch();}getch(); closegraph(); SetScreenMode(TEXT); return0;}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器人大战 语言 代码