C程序-飞机大战简单版-游戏

 操作说明: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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值