C程序-飛機大戰簡單版

 操作說明:W,S,A,D分別代表上下左右,方向鍵也能控制左右;空格鍵代表開火,當子彈擊中靶子,即銷燬靶子,然後在隨機位置產生新的靶子。

#include <iostream>
#include <conio.h>
#include <time.h>
#include<stdlib.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++)
            ;
}

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");//清屏函數 

        init();//初始化地圖 

        target(iskilled,t);//產生靶子函數 

        Key(x,y,isFire);//獲取鍵值函數 

        Fly(x,y);//畫飛機函數 

        Fire(t,x,y,isFire,iskilled);//攻擊靶子函數 

        print();//打印函數 

        delayed(1000);//延時函數 
    }

    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章