- ·上一篇文章:利用栈实现迷宫的求解
- ·下一篇文章:双向链表
用c做的简单的坦克大战小游戏
DrawPlay(j,i);
for(k=0;k<5;k++)
Playone.fire[k].direction=-1;/*5颗子弹的方向都为-1,表示不存在*/
}
else if(map[i][j]==9)
{
amy[0].x=1;amy[0].y=1;amy[0].direction=amy[0].directiontwo=3;/*第一个敌人*/
amy[0].color=12;
DrawAmy(j,i,0);
}
}
for(i=1;i<5;i++)/*敌人都没出现*/
amy[i].direction=amy[i].fire.direction=-1;
outtextxy(210,450,"2003.10.1 milo_zy");
settextstyle(0,0,2);/*首次输出得分*/
setcolor(9);
outtextxy(525,80,"Score");
setcolor(YELLOW);
outtextxy(550,115,"0");
}
void far interrupt NewInt9(void)
{
unsigned char ScanCode,temp;
ScanCode=inportb(0x60);
temp=inportb(0x61);
outportb(0x61,temp | 0x80);
outportb(0x61,temp & 0x7f);
if(ScanCode&0x80)
{
ScanCode&=0x7f;
key_state[ScanCode]=0;
}
else
{
key_pressed[ScanCode]=1;
}
outportb(0x20,0x20);
}
void InstallKeyboard(void)
{
int i;
for(i=0;i<128;i++)
key_state[i]=key_pressed[i]=0;
OldInt9Handler=getvect(9); /*中断向量值*/
setvect(9,NewInt9); /*中断程序NewInt9地址存入指定的中断向量表中INT 09H*/
}
void ShutDownKeyboard(void)
{
setvect(9,OldInt9Handler);
}
int GetKey(int ScanCode)
{
int res;
res=key_state[ScanCode]|key_pressed[ScanCode];
key_pressed[ScanCode]=0;
return res;
}
void GameOver()/*游戏失败*/
{
setcolor(0);
setfillstyle(SOLID_FILL,0);/*把老家给去除*/
fillellipse(100+9*20,50+18*20,9,9);
nosound();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(150,5,"GAME OVER");
while(1)
{
if(GetKey(KEY_ESC))
break;
}
}
void GamePlay()/*玩游戏的过程*/
{
int i,j,lose=0;/*lose是1的时候表示失败*/
int t=0;
randomize();
while(1)
{
for(i=0;i<5;i++)/*画敌人的子弹*/
{
if(amy[i].fire.direction>0)
putpixel(100+amy[i].fire.y*20,50+amy[i].fire.x*20,11);
}
for(i=0;i<=4;i++)/*画玩家子弹*/
{
if(Playone.fire[i].direction>0)/*大于0表示玩家子弹存在*/
putpixel(100+Playone.fire[i].y*20,50+Playone.fire[i].x*20,11);
}
TimeDelay(500000);/*关键的时间改动*/
for(i=0;i<5;i++)/*去敌人的子弹*/
{
if(amy[i].fire.direction>0)
putpixel(100+amy[i].fire.y*20,50+amy[i].fire.x*20,0);
}
for(i=0;i<=4;i++)/*去玩家除子弹*/
{
if(Playone.fire[i].direction>0)
putpixel(100+Playone.fire[i].y*20,50+Playone.fire[i].x*20,0);
}
for(i=0;i<=4;i++)/*玩家子弹位置的变化*/
{
if(Playone.fire[i].direction<0)
continue;
if(Playone.fire[i].direction==1)
{Playone.fire[i].x--;Playone.fire[i].y=Playone.fire[i].y;}
else if(Playone.fire[i].direction==2)
{Playone.fire[i].y++;Playone.fire[i].y=Playone.fire[i].y;}
else if(Playone.fire[i].direction==3)
{Playone.fire[i].x++;Playone.fire[i].y=Playone.fire[i].y;}
else if(Playone.fire[i].direction==4)
{Playone.fire[i].y--;Playone.fire[i].y=Playone.fire[i].y;}
/*打到石头或者砖头的情况下减少子弹*/
if(map[Playone.fire[i].x][Playone.fire[i].y]==1)/*打到石头*/
Playone.fire[i].direction=-1;/*子弹消失*/
if(map[Playone.fire[i].x][Playone.fire[i].y]==2)/*打到砖头*/
{
Playone.fire[i].direction=-1;
DrawBlack(Playone.fire[i].y,Playone.fire[i].x);/*砖头打掉*/
map[Playone.fire[i].x][Playone.fire[i].y]=0;/*被打掉的地方变成可走的地方*/
}
if(map[Playone.fire[i].x][Playone.fire[i].y]==5)/*自己打到老家*/
{lose=1;break;}
for(j=0;j<5;j++)
{
if(amy[j].direction<0)/*不存在的不判断*/
continue;
if(amy[j].x==Playone.fire[i].x&&amy[j].y==Playone.fire[i].y)/*打中敌人*/
{
Playone.fire[i].direction=-1;
DrawBlack(Playone.fire[i].y,Playone.fire[i].x);
map[Playone.fire[i].x][Playone.fire[i].y]=0;/*被打掉的地方变成可走的地方*/
amy[j].fire.direction=amy[j].direction=-1;/*这个敌人消失*/
Score();/*输出得分*/
}
}
}
for(i=0;i<5;i++)/*敌人子弹位置的变化*/
{
if(amy[i].direction<0||amy[i].fire.direction<0)
continue;
if(amy[i].fire.direction==1)
{amy[i].fire.x--;amy[i].fire.y=amy[i].fire.y;}
else if(amy[i].fire.direction==2)
{amy[i].fire.y++;amy[i].fire.x=amy[i].fire.x;}
else if(amy[i].fire.direction==3)
{amy[i].fire.x++;amy[i].fire.y=amy[i].fire.y;}
else if(amy[i].fire.direction==4)
{amy[i].fire.y--;amy[i].fire.x=amy[i].fire.x;}
/*打到石头或者砖头的情况下减少子弹*/
if(map[amy[i].fire.x][amy[i].fire.y]==1)/*打到石头*/
amy[i].fire.direction=-1;/*子弹消失*/
if(map[amy[i].fire.x][amy[i].fire.y]==2)/*打到砖头*/
{
amy[i].fire.direction=-1;
DrawBlack(amy[i].fire.y,amy[i].fire.x);/*砖头打掉*/
map[amy[i].fire.x][amy[i].fire.y]=0;/*被打掉的地方变成可走的地方*/
}
if(map[amy[i].fire.x][amy[i].fire.y]==5)/*敌人打到老家*/
{lose=1;break;}
if(amy[i].fire.x==Playone.x&&amy[i].fire.y==Playone.y)/*打中玩家*/
{
for(j=0;j<5;j++)
Playone.fire[j].direction=-1;/*玩家子弹都消失*/
amy[i].fire.direction=-1;
DrawBlack(amy[i].fire.y,amy[i].fire.x);
map[amy[i].fire.x][amy[i].fire.y]=0;/*被打掉的地方变成可走的地方*/
lose=1;break;/*好人被打掉后就失败*/
}
}
nosound();
for(i=0;i<5;i++)/*敌人方向随机的改变*/
{
if(amy[i].direction<0)
continue;
w

