📄 潜艇大轮船.c
字号:
#include "graphics.h"
#include "stdlib.h"
#include "dos.h"
#define L1 1000
#define L2 L1/2
#define L4 L1/4
#define A 523
#define S 587
#define D 659
#define F 698
#define G 784
#define H 880
#define J 988
#define Z 262
#define X 294
#define C 330
#define V 349
#define B 392
#define N 440
#define M 494
#define Q 1047
#define W 1175
#define E 1319
#define R 1397
#define T 2568
#define Y 1760
#define U 1976
#define S_MAX 10
#define B_MAX 5
#define MAXX getmaxx()
#define MAXY getmaxy()
#define L 0
#define R 1
#define TURE 1
#define FALSE 0
struct {int x,y,s,way;int step;}ship[S_MAX];
struct {int x,y;}player;
struct {int x,y,s;}b[B_MAX];
struct {int x,y,s;}bomb[S_MAX];
void *p1,*p2;
int i=0;int *s;void interrupt (*old_int9)();void interrupt new_int9();
int HZ[]={D,D,G,W,W,W,Q,Q,G,F,F,F,D,D,D,D,F,G,H,H,H,G,G,G,D,D,G,W,W,W,
Q,Q,G,F,F,F,D,D,G,G,H,J,Q,Q,Q,Q,Q,W,G,G,J,H,G,D,D,G,Q,Q,Q,H,H,Q,
J,J,J,G,G,G,D,D,G,W,W,W,Q,Q,G,F,F,F,D,D,G,G,H,J,Q,Q,Q,Q,Q,Q,0,0};
void init()
{int i;int ts;
for(i=0;i<S_MAX;i++)
{ts=random(10);
if(ts>5) {ship.way=L;ship.x=0;ship.y=random(MAXY-150)+50;}
else {ship.way=R;ship.x=MAXX;ship.y=random(MAXY-150)+50;}
ship.s=TURE;ship.step=random(6)+1;
bomb.s=FALSE;
}
for(i=0;i<B_MAX;i++)
b.s=FALSE;
player.x=MAXX/2;player.y=MAXY-60;
}
void show(int status)
{int i;
for(i=0;i<S_MAX;i++)
{if(ship.s) putimage(ship.x,ship.y,p1,status);
if(bomb.s) {putpixel(bomb.x,bomb.y,random(14)+1);
putpixel(bomb.x+1,bomb.y,random(14)+1);
putpixel(bomb.x,bomb.y+1,random(14)+1);
putpixel(bomb.x+1,bomb.y+1,random(14)+1);}
}
for(i=0;i<B_MAX;i++)
if(b.s)
if(status==COPY_PUT) {putpixel(b.x,b.y,YELLOW);
putpixel(b.x+1,b.y,YELLOW);
putpixel(b.x,b.y-1,YELLOW);
putpixel(b.x+1,b.y-1,YELLOW); }
else putpixel(b.x,b.y,BLACK);
putimage(player.x,player.y,p2,status);
}
int judge(char c)
{switch(c)
{case 'a':
case 'd':
case 'q':
case 'j':return 1;
default :return 0;}
}
void genb()
{int i;
for(i=0;i<B_MAX;i++)
if(!b.s) {b.s=TURE;b.x=player.x+20;b.y=player.y;
break;}
}
void gens()
{int i;
for(i=0;i<S_MAX;i++)
if(!ship.s)
if(random(5000)>4900)
{ship.s=TURE;ship.step=random(6)+1;
if(random(10)>5)
{ship.way=L;ship.x=0;ship.y=random(MAXY-150)+50;}
else {ship.way=R;ship.x=MAXX;ship.y=random(MAXY-150)+50;}
}
}
process(char c)
{switch(c)
{case 'a':if(player.x>1) player.x-=5;break;
case 'd':if(player.y<MAXX-42) player.x+=5;break;
case 'j':genb();break;
case 'q':exit(0);
}
}
void updata()
{int i;
for(i=0;i<S_MAX;i++)
{if(ship.s)
if(ship.x>MAXX||ship.x<0) ship.s=FALSE;
else if(ship.way==L) ship.x+=ship.step;
else ship.x-=ship.step;
if(bomb.s)
if(bomb.y>MAXY) bomb.s=FALSE;
else bomb.y+=6;}
for(i=0;i<B_MAX;i++)
if(b.s)
if(b.y>0) b.y-=7;
else b.s=FALSE;
}
drop_bomb()
{int i;
for(i=0;i<S_MAX;i++)
if(ship.s)
if(!bomb.s)
if(random(1000)>950) {bomb.s=TURE;bomb.x=ship.x+20;bomb.y=ship.y+10;}
}
int pouch()
{int i,j;
for(i=0;i<S_MAX;i++)
if(ship.s)
for(j=0;j<B_MAX;j++)
if(b[j].x-ship.x<40&&b[j].x-ship.x>0&&b[j].y-ship.y<10&&b[j].y-ship.y>0)
{ship.s=FALSE;b[j].s=FALSE;break;}
for(i=0;i<S_MAX;i++)
if(bomb.s)
if(bomb.x-player.x>0&&bomb.x-player.x<40&&bomb.y-player.y>0&&bomb.y-player.y<10)
return 0;
return 1;
}
play(int *ms)
{s=ms;
old_int9=getvect(0x1c);
setvect(0x1c,new_int9);}
void interrupt new_int9()
{static int count=0; int tt=0;
count++;
if(s!=0)
{tt=L2*18.2/1000;
if(count<tt)
sound(s);
else {tt=0;count=0;i++;}
}
(*old_int9)();
}
main()
{char c;
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"");
setcolor(BLUE);
line(0,0,40,0);
line(40,0,30,10);
line(30,10,10,10);
line(10,10,0,0);
setfillstyle(SOLID_FILL,RED);
floodfill(10,2,BLUE);
p1=malloc(imagesize(0,0,40,10));
getimage(0,0,40,10,p1);
cleardevice();
arc(5,5,90,270,5);
line(5,0,35,0);
arc(35,5,-90,90,5);
line(35,10,5,10);
setfillstyle(SOLID_FILL,YELLOW);
floodfill(20,5,BLUE);
p2=malloc(imagesize(0,0,40,10));
getimage(0,0,40,10,p2);
init();
setactivepage(0);
cleardevice();
show(COPY_PUT);
play(HZ);
while(1)
{setvisualpage(0);
delay(15000);
c=0;
while(bioskey(1)) c=bioskey(0);
if(judge(c)) process(c);
updata();if(!pouch()) break;
gens();drop_bomb();
setactivepage(0);cleardevice();if(!HZ) i=0;
show(COPY_PUT);
}
outtextxy(MAXX/2-40,MAXY/2-20,"game over");
nosound();
setvect(0x1c,*old_int9);
getch();
closegraph();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -