C語言改寫的飛機小遊戲
#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);//菜單函數
int scr[22][N]={0},pl=9,width=25,speed=3,density=30,score=0,death=0;//全局變量:界面、我機初始位、界面寬度(從24到25)、敵機速度、敵機密度、得分、死亡
main(void)
{
menu();
int i=0,j=0;
scr[21][pl]=1;
scr[0][5]=3;
while(1)
{
if(kbhit())
switch(getch())//控制左右移動和進入菜單
{
case 'a':case 'A':
if(pl>0)
scr[21][pl]=0,scr[21][--pl]=1;
break;
case 'd':case 'D':
if(pl<width-2)
scr[21][pl]=0,scr[21][++pl]=1;
break;
case 'w':case 'W':
scr[20][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("\6"); //輸出敵機符號(把敵機改成==)
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("製作者:150809212--計科2--張曉峯");
}
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");//如果子彈與敵機位置相同則加10分
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[20][pl]==3&&a[21][pl]==1)//如果敵機與自己飛機位置相同都等於一則死亡
death++;
}
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 控制我機左右飛行,W 發射子彈\n 設置:請按Esc\n 開始遊戲:任意鍵\n by yan_xu");
if(getch()==27)
setting();
}
通過c語言編寫一個射擊類的打飛機小遊戲,可以通過鍵盤來進行遊戲,操作方法是“a”“d”“w”或者“←”“↑”“→”來控制,擊中敵機可獲得積分,被敵機撞中死亡一次,每次遊戲有3次生還機會,遊戲結束後可選擇是否重新開始遊戲。。。
這個遊戲是我對一個小遊戲進行的改造升級版,改變了飛機的外觀與敵機的外觀,使得遊戲看起來更加的舒適;另外增添了設置函數,使得可以對遊戲進行設置,改變遊戲大小,調整飛機運行速度等等,使遊戲更加的人性化。。。
編寫出c語言代碼,運行程序,並調試程序,最終實現遊戲的功能。本程序主要包含遊戲控制函數、設置是否繼續遊戲函數、輸出函數、子彈移動函數、敵機移動函數、設置函數、菜單函數等7個主要函數,包含了不同的功能,對原來的程序作出了很大的改進,用到的主要語句有getche語句、for語句、while語句、printf語句、switch語句等等,添加了顏色函數,實現了諸多功能。可以在頁面上顯示製作人的主要信息等等。。。
本次改編遊戲是本人第一次進行遊戲改編,有很多的缺點與不足,只是改編了基本的我機形狀與敵機形狀,和飛機所發射的子彈形狀,是遊戲看起來更加美觀,但具體的一些函數還是欠缺練習,有很多的地方都不是很明白,希望這些課能夠再講解的深入一點,讓我們更加了解一些函數,使我們對這一門更加有興趣。
張曉峯150809212