📄 god.c
字号:
renovate() //重新载入10架敌机
{
int i;//代表着敌机的个数
for(i=0;i<=6;i++) //随机确定敌机的坐标位置
{
live[i]=1;//在刷新屏幕的时候,要赋予敌机的生命
movej[i]=random(2); //初始化敌机飞行的速度
dijiix[i]=18;
dijijy[i]=random(5)*4+random(3);//随机确定敌机的坐标位置
initdiji(dijiix[i],dijijy[i]);//初始化敌机
}
}
gameover() //游戏结束信息提示
{
settextstyle(0,0,2);
setcolor(12);
outtextxy(200,200,"Game Over!!!");
setcolor(4);
outtextxy(300,280,"Press R or Q!");
}
int qhzd(key)
{
if(key==KEYTAB)
{ if(zdys==3)zdys=0;
else zdys++;
}
zdts(zdys);
}
zdts(int zdys)
{ int fp;
if((fp=open(zdtstu[zdys],O_RDONLY|O_BINARY))==-1)
printf("Cannot find file y=%d",y);
tuxiang(352,456,fp);
close(fp);
}
int kaishi()
{ int aj,fp,temp=1;
int n;
while(1)
{
if((fp=open(beijing[flag],O_RDONLY|O_BINARY))==-1)
printf("Cannot find file %d",y);
tuxiang(0*32,0*24,fp);
close(fp);
aj=mykeyscan();
if(aj==KEYW||aj==KEYS8)
flag--;
else if(aj==KEYS||aj==KEYS5||aj==KEYS2)
flag++;
if(flag<1)flag=3;
if(flag>3)flag=1;
if(aj==KEYENTER)break;
if(temp!=flag)
{
if((fp=open(beijing[0],O_RDONLY|O_BINARY))==-1)
{
puts("Cannot find file " "bmp" ".");
}
tuxiang(0,0,fp);
close(fp);
}
temp=flag;
}
return aj;
}
int help()
{ int fp;
if((fp=open(startph[0],O_RDONLY|O_BINARY))==-1)
{
puts("Cannot find file " "bmp" ".");
}
tuxiang(0,0,fp);
close(fp);
while(!kbhit())
tuichu=mykeyscan();
}
int protect()
{ int fp;
if((fp=open(startph[2],O_RDONLY|O_BINARY))==-1)
{
puts("Cannot find file " "bmp" ".");
}
tuxiang(0,0,fp);
close(fp);
delay(10000);
tuichu=1;
return tuichu;
}
shengmingzhi(int x,int y)
{ int fp;
if((fp=open("bmp\\jiji.bmp",O_RDONLY|O_BINARY))==-1)
{
puts("Cannot find file " "bmp" ".");
}
tuxiang(x,y,fp);
close(fp);
}
main()
{ int k=1;
int lifetc=0;
int key,ikey;
int iflag;
int i,ii;
int ibkey;
int islive=1;
int n=0;//代表打死的飞机个数
int oldix,oldjy; //记录玩家走过的坐标
randomize();
initgraph1(); //初始化图形模式
againstart:
ikey=kaishi();
while(1)
{
if(ikey==KEYENTER&&flag==1)
{
goto come;
}
else if(ikey==KEYENTER&&flag==2)
{
help();
break;
}
else if(ikey==KEYENTER&&flag==4)
{
protect();
}
else if(ikey==KEYENTER&&flag==3)
lifetc=1;
k=0;
break;
}
if(tuichu==KEYENTER)
goto againstart;
come :
repeat:
if(k==1)
{
initditu();//初始化玩家地图
for(i=0;i<=life-1;i++)
shengmingzhi(24*i+160,456);
initwjfj(ix,jy); //载入玩家飞机
renovate();//重新载入10架敌机
}
while(1) //进入游戏
{
if(lifetc==1)
break;
// SetTimer(newhandler); /* 修改时钟中断 */
oldix=ix;//获得玩家飞机的飞行轨迹
oldjy=jy;
for(i=0;i<=9;i++)
{
olddijiix[i]=dijiix[i];//获得敌机的飞行轨迹
olddijijy[i]=dijijy[i];
if(dijiix[i]>1) dijiix[i]-=movej[i];//将敌机的坐标进行修改
}
for(i=0;i<=9;i++)
{
if(movej[i]==0)continue;//如果某架敌机的飞行速度是0,则不必擦除
chawjfj(&olddijiix[i],&olddijijy[i]);//擦敌机
}
key=movewjfj(); //控制玩家的飞机飞行
// wjxue(life);
qhzd(key);
if(key==KEYESC)break;
for(i=0;i<=9;i++)
{
if((oldix==dijiix[i])&&(oldjy==dijijy[i]))//此时是玩家飞机和敌机碰撞
{
baozhaxiaoguo(2,dijiix[i],dijijy[i]);
delay(100000);
dijiix[i]=19;
dijijy[i]=19;
chawjfj(&dijiix[i],&dijijy[i]); //擦爆炸效果
chawjfj(&olddijiix[i],&olddijijy[i]); //擦敌机图片
// isover=1;
ix=1;
jy=10;
life--;
if(life==0)
{
isover=1;
jieshu();
}
else goto repeat;
while(!kbhit());//只要玩家没有按键,便一直将游戏结束提示面画停留
ibkey=mykeyscan();
break;
}
}
if(isover)//在游戏结束的时候,对具体按键进行不同响应
{
if(ibkey==KEYR)
{
if(life==0)
life=3;
ix=1;
jy=10;
isover=0;
ibkey='\0'; //ikey在接收并响应了玩家的选择后,一定要将其值置为空,否则是会一直重新开始游戏
goto repeat;//如果玩家在游戏结束时按的是r则重新开始游戏
break;}
}
if(isover) break;
kill:
if(key==KEYSPACE) //当玩家发射子弹时的代码
{
zdix=oldix; //先保留原玩家飞机的坐标
zdjy=oldjy;
while(1)
{
initfszd(zdix,zdjy,zdys);//载入玩家发射的子弹
delay(1000); for(i=0;i<=9;i++)
{
if((zdix==dijiix[i])&&(dijijy[i]==zdjy))
{
n++;
baozhaxiaoguo(1,dijiix[i],dijijy[i]);//说明此时是玩家子弹和敌机碰撞
dijiix[i]=19;
dijijy[i]=19;
delay(1000000);//爆炸效果延时
live[i]=0;
chawjfj(&dijiix[i],&dijijy[i]);//擦爆炸效果图
chawjfj(&olddijiix[i],&olddijijy[i]);
goto kill;
}
if(n==5) //当玩家打落五架敌机时,这时便将敌机的位置重新布局,即重新产生10架飞机
{
n=0;//重新归零
for(i=0;i<=9;i++) //擦除原有没有被打落的飞机和已经打落的飞机
chawjfj(&dijiix[i],&dijijy[i]);
initwjfj(ix,jy); //载入玩家飞机
renovate(); //重新载入10架敌机
}
}
chawjfj(&oldzdix,&oldzdjy); //擦除玩家发射的子弹
if(zdix==20)break; //如果玩家子弹已经过界,则不再进行飞行效果显示
}
}
chawjfj(&oldix,&oldjy);//擦玩家飞机
delay(20000);
for(i=0;i<=9;i++) //此功能是实现敌机飞过一定边界时,产生新一屏的敌机
{
if(dijiix[i]==1||dijijy[i]==19)
{
for(i=0;i<=9;i++) //擦除原有没有被打落的飞机和已经打落的飞机
chawjfj(&olddijiix[i],&olddijijy[i]);
renovate();//重新载入10架敌机
break;
}
}
delay(100000);
initwjfj(ix,jy); //将玩家飞机移动到新的位置
for(i=0;i<=9;i++)//在移动敌机的时候,要判断敌机是否还有生命
{
if(!live[i])continue;
if(dijiix[i]<1)continue;
initdiji(dijiix[i],dijijy[i]);//将敌机移动到新的位置
}
delay(10000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -