飛機遊戲(修改版)及其結構分析

來源:互聯網
上載者:User

標籤:include   遊戲   


#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <time.h>

#define N 35

void print(int[][N]);//輸出函數

void movebul(int[][N]);//子彈移動函數

void movepla(int[][N]);//敵機移動函數

void setting(void);//設定函數

void menu(void);//菜單函數

void oper(void);//操作函數

//全域變數:

int scr[22][N] = { 0 };    //介面數組

int pl = 9, x = 21;    //我機初始位置

int width = 24, speed = 3, density = 10, score = 0, death = 0;    // 敵機速度、敵機密度、得分、死亡

int main(void)

{

menu();

oper();

}


void oper()

{

int i = 0, j = 0;

scr[x][pl] = 1;    //初始化我機位置和敵機位置

scr[0][5] = 3;

scr[8][4] = 3;

scr[2][7] = 3;

scr[5][4] = 3;

scr[6][4] = 3;

//初始化完畢

while (1)

{

if (_kbhit())

switch (_getch())//控制左右移動和進入菜單

{

case ‘a‘:case ‘A‘:

if (pl > 0)

scr[x][pl] = 0, scr[x][--pl] = 1;

break;

case ‘d‘:case ‘D‘:

if (pl < width - 2)

scr[x][pl] = 0, scr[x][++pl] = 1;

break;

case ‘q‘:case ‘Q‘:

if (x>0)

scr[x][pl] = 0, scr[--x][pl] = 1;

break;

case ‘e‘:case ‘E‘:

if (x < 21)

scr[x][pl] = 0, scr[++x][pl] = 1;

break;

case ‘w‘:case ‘W‘:

scr[x - 1][pl] = 2;

break;

case 27:

setting();

break;

}

if (++j%density == 0)//控制生產敵機的速度

{

j = 0; srand(time(NULL));

scr[0][rand() % width] = 3;

}

if (++i%speed == 0)//控制敵機移動速度,相對於子彈移動速度

movepla(scr);

movebul(scr);


print(scr);

if (i == 30000)

i = 0;//以免i 越界

}

}

void print(int a[][N])

{

system("cls");

int i, j;

for (i = 0; i<22; i++)

{

a[i][width - 1] = 4;

for (j = 0; j<width; j++)

{

if (a[i][j] == 0)

printf(" ");

if (a[i][j] == 1)

printf("\5");//輸出我機的符號

if (a[i][j] == 2)

printf(".");//子彈

if (a[i][j] == 3)

printf("\3"); //輸出敵機符號

if (a[i][j] == 4)

printf("|");

if (i == 0 && j == width - 1)

printf("得分:%d", score);//右上方顯示得分

if (i == 1 && j == width - 1)

printf("死亡:%d", death);

if (i == 2 && j == width - 1)

printf("設定:Esc");

if (i == 3 && j == width - 1)

printf("Copyright:ssd");

}

printf("\n");

}

}

void movebul(int a[][N])

{

int i, j;

for (i = 0; i<22; i++)

for (j = 0; j<width; j++)

{

if (i == 0 && a[i][j] == 2)

a[i][j] = 0;

if (a[i][j] == 2)

{

if (a[i - 1][j] == 3)

score += 10, printf("\7");

a[i][j] = 0, a[i - 1][j] = 2;

}

}

}

void movepla(int a[][N])

{

int i, j;

for (i = 21; i >= 0; i--)//從最後一行往上是為了避免把敵機直接衝出數組。

for (j = 0; j<width; j++)

{

if (i == 21 && a[i][j] == 3)

a[i][j] = 0;//底行賦值0 以免越界。

if (a[i][j] == 3) {

a[i][j] = 0;

a[i + 1][j] = 3;

if (a[i + 1][j] == 1) {

death++;a[i][j]=0;

}


}

}

}

void setting(void)

{

int sw = 0, i, j;

system("cls");

do {

sw = 0; printf("\n 遊戲介面的大小:1.大2.小>> ");

switch (_getche())

{

case ‘1‘:

width = 34;

break;

case ‘2‘:

width = 24;

break;

default:

printf("\n 錯誤,請重新選擇...\n");

sw = 1;

}

} while (sw);

do

{

sw = 0;

printf("\n 請選擇敵機密度:1.大2.中3.小>> ");

switch (_getche())

{

case ‘0‘:

density = 10;

break;

case ‘1‘:

density = 20;

break;

case ‘2‘:

density = 30;

break;

case ‘3‘:

density = 40;

break;

default:

printf("\n 錯誤,請重新選擇...\n");

sw = 1;

}

} while (sw);

do

{

sw = 0;

printf("\n 敵機的飛行速度:1.快2.中3.慢>> ");

switch (_getche())

{

case ‘1‘:

speed = 2;

break;

case ‘2‘:

speed = 3;

break;

case ‘3‘:

speed = 4;

break;

default:

printf("\n 錯誤,請重新選擇...\n");

sw = 1;

}

} while (sw);

for (i = 0; i<22; i++)

for (j = 0; j<45; j++)

scr[i][j] = 0;

scr[21][pl = 9] = 1;

printf("\n 按任意鍵儲存...");

_getch();

}

void menu(void)

{

printf("說明:按A D 控制我機左右飛行,QE控制我機上下飛行,W 發射子彈\n 設定:請按Esc\n 開始遊戲:任意鍵\n                               by yan_xu");

if (_getch() == 27)

setting();

修改方面如下:

  1. 增加敵機數量

  2. 加快敵機產生速度

  3. 飛機能夠上下移動

程式碼分析:

1.首先定義函數

2.定義函數類型,螢幕寬度,速度,敵機密度,得分,死亡int scr[22][N]={0},pl=9,width=24,speed=3,density=30,score=0,death=0; 此程式用到整形int.
3.控制飛機的移動座標:輸入A:飛機在x軸向左移動一格 。輸入D: 飛機在x軸向右移動一格,輸入Q:飛機在y軸上移一格,輸入E:飛機在y軸下移一格,w是出子彈的位置,初始位置在飛機位置y軸上減少一格。
4.加分死亡規則:如果子彈的座標和敵機的座標y值相同,x值相差一則子彈擊中敵機,加分。反之敵機座標和我機的座標y值相同,x值相差一則我機死亡。
5.臨界位置:座標地區有限規定不能超出螢幕大小。
6.設定介面大小飛機速度,敵機密度以及控制方向的鍵。

學號:150206210 

本文出自 “11639407” 部落格,謝絕轉載!

飛機遊戲(修改版)及其結構分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.