操作说明:W,S,A,D分别代表上下左右,方向键也能控制左右;空格键代表开火,当子弹击中靶子,即销毁靶子,然后在随机位置产生新的靶子。
#include <iostream>
#include <conio.h>
#include <time.h>
#include<stdlib.h>
#include <windows.h>
using namespace std;
const int N = 23;
const int M = 60;
//地图边界
char map[N][M];//地图数组
void delayed(int n)//延时函数
{
for(int i = 0; i < n ; i++)
for(int j = 0; j < 10240; j++)
;
}
static void SetPos(int x, int y)//清屏函数
{
COORD point = { x, y };//光标要设置的位置x,y
HANDLE HOutput = GetStdHandle(STD_OUTPUT_HANDLE);//使用GetStdHandle(STD_OUTPUT_HANDLE)来获取标准输出的句柄
SetConsoleCursorPosition(HOutput, point);//设置光标位置
}
void print()//打印二维数组map
{
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
cout << map[i][j];
cout << endl;
}
}
//产生靶子函数
void target(int &isKilled,int &t)
{
if(isKilled)//isKilled为真,则靶子已被击毁,则需产生新的靶子
{
//随机产生靶子
srand((unsigned)time(NULL));//随机数种子
t = rand() % (M - 3) + 3; //产生随机数函数
isKilled = 0;//已经产生靶子,isKilled为假
}
map[1][t] = '@';//靶子位置
}
void Fly(int &x,int &y)
{
//画飞机形状,开心怎么画就怎么画
map[x][y] = 'A';//飞机头
for(int i = y-2;i < y+3;i++)
map[x+1][i] = 'A';
map[x+2][y-1] = 'I';
map[x+2][y+1] = 'I';
}
void Key(int &x,int &y,int &isFire)
{
char input;
if(kbhit())//有按键按下
{
input = getch();
if(input == 'a' || input == 75)//75是左移键盘值,a键也是左移
if(y > 2 )//边界
y--;
if(input == 'd' || input == 77)
if(y < M - 3)
y++;
if(input == 'w' || input == 72)
if(x > 2 )
x--;
if(input == 's' || input == 80)
if(x < N - 3)
x++;
if(input == ' ')//空格代表开火
isFire = 1;
}
}
void init()//初始化地图
{
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
if(i == 0 || i == N - 1 || j == 0 || j == M - 1)
map[i][j] = '#';//边界
else
map[i][j] = ' ';//中间
}
}
//攻击靶子函数
void Fire(int t,int x,int y,int &isFire,int &isKilled)
{
if(isFire)//为真即开火
{
for(int i = 1; i < x ; i++ )//从飞机头到靶子
map[i][y] = 'o';//子弹
if(y == t)//飞机头与靶子在同一直线
isKilled = 1;//靶子被击毁
isFire = 0;//停火
}
}
int main()
{
int iskilled = 1;//标记靶子状态
int isFire = 0;//开火标记
int x = N - 4, y = 10;//飞机头初始位置
int t = 10;//靶子位置标记
while(1)
{
// system("cls");//清屏函数
SetPos(0,0);//清屏函数,屏幕抖动不会太明显
init();//初始化地图
target(iskilled,t);//产生靶子函数
Key(x,y,isFire);//获取键值函数
Fly(x,y);//画飞机函数
Fire(t,x,y,isFire,iskilled);//攻击靶子函数
print();//打印函数
delayed(1000);//延时函数
}
return 0;
}