⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 潜艇大轮船.c

📁 轮船随机发射子弹
💻 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 + -