📄 简单潜艇大战.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 + -