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

📄 简单潜艇大战.cpp

📁 简单潜艇大战是一个很有意思的游戏
💻 CPP
字号:
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#include <graphics.h>
#define KEY_ESC 0x01
#define KEY_SPACE 0x39
#define KEY_LEFT 0x4b
#define KEY_RIGHT 0x4d
int speed=10000;
char key_state[128],key_pressed[128];
int score=0;
char scorestr[10];
struct Fire
{
 int x;
 int y;
 int start;
}amyfire[6];
struct Play
{
 int x;
 int y;
 struct Fire fire[6];
 life;
}play;
struct Amy
{
 int x;
 int y;
 int speed;
 int color;
 int direction;
 life;
}amy[6];
void InitGraph(void);
void CloseGraph(void);
void GamePlay(void);
void DrawPlay(void);
void DrawAmy(int i);
void DrawFire(int x,int y,int n);
void DrawAmyFire(int x,int y,int n);
void DrawBlack(int x,int y,int color);
void PrScore();
int GetKey(int ScanCode);
void interrupt far (*OldInt9Handler)();
void far interrupt NewInt9();
void InstallKeyboard();
void ShutDownKeyboard();
void main(void)
{
 InitGraph();
 GamePlay();
 CloseGraph();
}
void InitGraph(void)
{
 int gd=DETECT,gm;
 initgraph(&gd,&gm,"c:\\tc");
 cleardevice();
 InstallKeyboard();
}
void DrawPlay(void)
{
 setfillstyle(SOLID_FILL,6);
 bar(play.x-20,play.y-10,play.x+20,play.y);
 setfillstyle(SOLID_FILL,4);
 bar(play.x-20,play.y-10,play.x-10,play.y);
}
void DrawAmy(int i)
{
 setfillstyle(SOLID_FILL,amy[i].color);
 bar(amy[i].x-20,amy[i].y-10,amy[i].x+20,amy[i].y);
 setfillstyle(SOLID_FILL,GREEN);
 if(amy[i].direction==1)
 bar(amy[i].x-20,amy[i].y-10,amy[i].x-10,amy[i].y);
 else
 bar(amy[i].x+10,amy[i].y-10,amy[i].x+20,amy[i].y);
}
void DrawBlack(int x,int y,int color)
{
 setfillstyle(SOLID_FILL,color);
 bar(x-20,y-10,x+20,y);
}
void DrawFire(int x,int y,int n)
{
 if(n==0)
 setfillstyle(SOLID_FILL,BLUE);
 else
 setfillstyle(SOLID_FILL,0);
 setcolor(BLUE);
 fillellipse(x,y,5,5);
}
void DrawAmyFire(int x,int y,int n)
{
 if(n==0)
 setfillstyle(SOLID_FILL,BLUE);
 else
 setfillstyle(SOLID_FILL,YELLOW);
 setcolor(BLUE);
 fillellipse(x,y,3,3);
}
void PrScore()
{
 setfillstyle(SOLID_FILL,8);
 bar(30,0,200,40);
 setcolor(11);
 settextstyle(0,0,2);
 sprintf(scorestr,"%d",score);
 outtextxy(30,20,scorestr);
}
void GamePlay(void)
{
 int i,j;
 setfillstyle(SOLID_FILL,BLUE);
 bar(0,100,640,480);
 setfillstyle(SOLID_FILL,8);
 bar(0,0,640,99);
 play.x=200;play.y=99;
 for(i=0;i<6;i++)
 {
 play.fire[i].start=0;
 amyfire[i].start=0;
 amy[i].life=0;
 }
 play.life=1;
 DrawPlay();
 PrScore();
 randomize();
 while(1)
 {
   for(i=0;i<6;i++)
   {
    if(play.fire[i].start==1)
    {
     DrawFire(play.fire[i].x,play.fire[i].y,0);
     play.fire[i].y+=3;
     DrawFire(play.fire[i].x,play.fire[i].y,1);
     for(j=0;j<6;j++)         if(play.fire[i].x>(amy[j].x-22)&&play.fire[i].x<(amy[j].x+22)&&play.fire[i].y>(amy[j].y-14)&&play.fire[i].y<amy[j].y+5)/*击中敌人*/
      {
       play.fire[i].start=0;
       amy[j].life=0;
       score+=10;
       DrawFire(play.fire[i].x,play.fire[i].y,0);
       DrawBlack(amy[j].x,amy[j].y,BLUE);
       PrScore();
      }
     if(play.fire[i].y>480)
     {
      play.fire[i].start=0;
      DrawFire(play.fire[i].x,play.fire[i].y,0);
     }
    }
   }
  for(i=0;i<6;i++)
  {
   if(amy[i].life==1&&amy[i].color<14&&amyfire[i].start==0)
   {
    amyfire[i].start=1;
    amyfire[i].x=amy[i].x;
    amyfire[i].y=amy[i].y-10;
   }
  }
  for(i=0;i<6;i++)
  {
   if(amyfire[i].start==1)
   {
   DrawAmyFire(amyfire[i].x,amyfire[i].y,0);
   amyfire[i].y-=2;
   DrawAmyFire(amyfire[i].x,amyfire[i].y,1);
   }
   if(amyfire[i].x>(play.x-14)&&amyfire[i].x<(play.x+14)&&(amyfire[i].y+3)<100)
   {
    play.life=0;
    amyfire[i].start=0;
    DrawAmyFire(amyfire[i].x,amyfire[i].y,0);
    DrawBlack(play.x,play.y,8);
    break;
   }
   if(amyfire[i].y<96)
   {
   amyfire[i].start=0;
   setfillstyle(SOLID_FILL,8);
   setcolor(8);
   fillellipse(amyfire[i].x,amyfire[i].y,3,3);
   }
  }
  delay(speed);
  if(play.life!=1)
  break;
  for(i=0;i<6;i++)
  {
   if(amy[i].life==0)
   {
    amy[i].life=1;
    amy[i].color=rand()%4+10;
    amy[i].y=rand()%300+130;
    amy[i].speed=2+rand()%10;
    amy[i].direction=rand()%2;
    if(amy[i].direction==0)
    amy[i].x=-20;
    else
    amy[i].x=660;
    break;
   }
  }
  if(GetKey(KEY_ESC))
  break;
  if(GetKey(KEY_SPACE))
  {
   for(i=0;i<6;i++)
   if(play.fire[i].start==0)
   {
    play.fire[i].x=play.x;
    play.fire[i].y=105;
    play.fire[i].start=1;
    break;
   }
  }
  if(GetKey(K 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -