控制台飞机大战代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void move()
{
if (bulletDirc == 'w' || bulletDirc == 'W')
{
bulletPos.y -=2;
}
if (bulletDirc == 's' || bulletDirc == 'S')
{
bulletPos.y +=2;
}
if (bulletDirc == 'a' || bulletDirc == 'A')
planeBody[0]=pos0;
planeBody[1]=pos1;
planeBody[2]=pos2;
planeBody[3]=pos3;
planeBody[4]=pos4;
planeBody[5]=pos5;
planeBody[6]=pos6;
planeBody[7]=pos7;
planeBody[8]=pos8;
//节点,表示飞机或子弹
class pos
{
public:
pos(int a = 0,int b = 0):x(a),y(b){}
pos(const pos &b) {x=b.x,y=b.y;}
public:
bool operator==(pos a) const
{
return x==a.x && y==a.y;
{
offset temp1(0,-1);
oset = temp1;
}
if ((c == 's' || c=='S' ) && planeBody[4].y <= M-4)
{
offset temp2(0,1);
oset = temp2;
}
if ((c == 'a' || c=='A' ) && planeBody[4].x >= 3)
#include "plane.h"
#include "pos.h"
#include <IOSTREAM>
using namespace std;
#ifndef _BULLET_
#define _BULLET_
//前置声明
class plane ;
//子弹
class bullet
{
public:
//子弹移动
cout << " ";
gotoXY(p32+planeBody[8] );
cout << " ";
}
}
if (planeDirc == 'd' || planeDirc == 'D')
{
gotoXY(planeBody[2]);
cout << " ";
gotoXY(planeBody[3]);
cout << " ";
gotoXY(planeBody[8]);
cout << " ";
if (planeBody[4].x > 2)
{
pos p40(-1,0),p41(-1,0),p42(-1,0);
gotoXY(p40+planeBody[0]);
cout << " ";
gotoXY(p42 + planeBody[6]);
return true;
return false;
}
//子弹的显示
void display( plane &p) const
{
gotoXY(bulletPos);
cout << "⊙";
pos temp=bulletPos;
//清除痕迹
if (bulletPos != p.planeBody[4])
if (planeBody[4].y > 2)
{
pos p20(0,-1),p22(0,-1);
gotoXY(p20 + planeBody[0]);
cout << " ";
gotoXY( p22+planeBody[2]);
cout << " ";
}
}
if (planeDirc == 'a' || planeDirc == 'A')
////////plane.h
#include "pos.h"
#include <algorithm>
#include <IOSTREAM>
using namespace std;
//??
#define M 23
extern void gotoXY(pos s);
#ifndef _PLANE_
#define _PLANE_
{
offset temp3(-1,0);
oset = temp3;
}
if ((c == 'd' || c=='D' ) && planeBody[4].x <= M-4)
{
offset temp4(1,0);
oset = temp4;
}
SetPlanePos(oset);
}
}
//根据随机数,飞机移动(随机数为0-3四种情况,即四个方向)
//完全没什么优化的程序,中间数据一大堆....
//背景宽度
#define M 23
//初始化背景
void initWall()
{
int wall[M][M]={{0}};
cout << " ";
}
}
}
//设置飞机位置
void SetPlanePos(offset a)
{
for(int b=0;b<9;b++)
{
planeBody[b].x +=a.x;
planeBody[b].y +=a.y;
}
}
public:
//根据中心位置生成飞机
plane(pos p)
{
pos pos0(p.x-1,p.y-1),pos1(p.x,p.y-1),pos2(p.x+1,p.y-1),pos3(p.x-1,p.y),pos4(p.x,p.y),pos5(p.x+1,p.y),pos6(p.x-1,p.y+1),pos7(p.x,p.y+1),pos8(p.x+1,p.y+1);
planeDirc = 'w';
}
~plane()
{
}
public:
//机身
pos planeBody[9];
//飞机朝向(W,S,A,D)
char planeDirc;
};
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bullet.h
~bullet(){}
public:
//子弹位置
pos bulletPos;
//子弹生成以后的方向(直至子弹消失前方向都是一定的)
char bulletDirc;
};
#endif
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////PFMain.cpp
{
temp.x +=2;
}
if (bulletDirc == 'd' || bulletDirc == 'D')
{
temp.x -=2;
}
gotoXY(temp);
cout << " ";
}
}Leabharlann Baidu
public:
//根据飞机生成子弹
bullet(plane &p):bulletPos(p.planeBody[4]),bulletDirc(p.planeDirc) {}
}
bool operator!=(pos a) const
{
return x!=a.x || y!=a.y;
}
pos operator+(pos a)
{
x += a.x;
y += a.y;
return *this;
}
pos &operator=(pos b)
{
x=b.x;
y=b.y;
return *this;
#include <IOSTREAM>
#include <algorithm>
#include <TIME.H>
#include <CONIO.H>
#include <WINDOWS.H>
#include "bullet.h"
#include "plane.h"
#include "pos.h"
using namespace std;
void move(int a)
{
if(a==0) move('w');
if(a==1) move('s');
if(a==2) move('a');
if(a==3) move('d');
}
//飞机显示,包括根据情况清除前一步显示的痕迹(需要手动清除)
void display() const
{
for (int a=0;a<9;a++)
{
if (bulletDirc == 'w' || bulletDirc == 'W')
{
temp.y +=2;
}
if (bulletDirc == 's' || bulletDirc == 'S')
{
temp.y -=2;
}
if (bulletDirc == 'a' || bulletDirc == 'A')
{
gotoXY(planeBody[0]);
cout << " ";
gotoXY(planeBody[5]);
cout << " ";
gotoXY(planeBody[6]);
cout << " ";
if (planeBody[4].x < M-3)
{
pos p30(1,0),p32(1,0);
gotoXY( p30+planeBody[2] );
}
public:
int x;
int y;
};
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////pos.h
#ifndef _POS_
#define _POS_
//飞机
class plane
{
public:
//偏移量
typedef pos offset;
//根据输入,飞机移动
void move(char c)
{
if (planeDirc != c)
planeDirc =c;
else
{
offset oset;
if ((c == 'w' || c=='W' ) && planeBody[4].y >= 3)
//思路很简单,按帧画图,然后通过循环每隔一段时间(sleep函数)更新帧
//每帧显示前,需要计算飞机与子弹的相互关系
//飞机用3*3位置数组表示,根据方向来确定显示怎么样的飞机样式
//而子弹则根据飞机生成
//实现的难度在于刷新痕迹,下一帧显示时需要更新上一帧留下的痕迹,否则上一帧的“残影”还在
//由于每帧数据量大,会发生闪屏现象,不知道咋整
cout << " ";
gotoXY(planeBody[7]);
cout << " ";
if (planeBody[4].y <= M-4)
{
//p会被改变
pos p10(0,1),p11(0,1),p12(0,1);
gotoXY(p10+planeBody[6]);
cout << " ";
gotoXY( p12+planeBody[8]);
//调试可以分步骤调试,比如第一步先显示飞机
{gotoXY(planeBody[a]);
cout << "■";}
if (planeDirc == 'w' || planeDirc == 'W')
{
gotoXY(planeBody[0]);
cout << " ";
gotoXY(planeBody[2]);
cout << " ";
}
}
if (planeDirc == 's' || planeDirc == 'S')
{
gotoXY(planeBody[1]);
cout << " ";
gotoXY(planeBody[6]);
cout << " ";
gotoXY(planeBody[8]);
cout << " ";
{
bulletPos.x -=2;
}
if (bulletDirc == 'd' || bulletDirc == 'D')
{
bulletPos.x +=2;
}
}
//子弹到达边界
bool OnBorder() const
{
if( bulletPos.x >= M-3 || bulletPos.x <= 2 || bulletPos.y >= M-3 || bulletPos.y <= 2 )
相关文档
最新文档