【c語言】小程式遊戲——飛機遊戲(三)
阿新 • • 發佈:2018-12-14
接下來,我們需要在進行以下操作:
1.在程式裡面新增敵機
2.為敵機新增基本屬性
————————————————————————————————————————
NO.1在程式裡面新增敵機
國際慣例,我們需要對敵機的位置設定一個初始值
int enemy_x = 0;
int enemy_y = weight/2;
其中敵機的Y軸座標根據之前的部落格設定為weight的一半,當然,你也可以自己隨意設定任何位置
初始化之後,我們就可以在把敵機顯示在視窗上
for(int i=0;i<height;i++) { for(int j=0;j<weight;j++) { if((i == enemy_x) && (j == enemy_y)) printf("O"); else printf(" "); } printf("\n"); }
編譯結果可以看出,我們的敵機“O”出現在飛機的正上方
第一步非常地簡單,我們很快就把敵機給顯示出來了
—————————————————————————————————————————————————————
然而,簡單地把敵機顯示出來並不能為我們帶來遊戲的體驗,我們還需要在鐳射打中敵機時,我們的敵機需要消失,才能顯示出這個遊戲的意義
—————————————————————————————————————————————————————
No.2 為敵機新增基本屬性
Step1:敵機消失機制
我們可以設定為,當鐳射的座標位置和敵機的座標位置恰好相等時,敵機和鐳射都置於視窗座標軸外
根據這種設想,我們可以新增以下程式碼,並實驗是否可行
if((bullet_x == enemy_x) && (bullet_y == enemy_y))
{
enemy_x = enemy_y = -1;
bullet_x = bullet_y = -1;
}
編譯結果可知,當鐳射發射到敵機位置時,敵機和鐳射都消失了,敵機初步設定完成
Step2:敵機隨機生成
當敵機被消滅時,我們還需要不斷地補充敵機,才能讓遊戲繼續下去
這時我們可以使用隨機函式rand()來讓敵機的位置隨機確定,使得根據遊戲性
但如果我們在使用隨機函式時,之前確定的位置便不能再用,所以,我們對鐳射消滅敵機時的位置進行重新調整
if((bullet_x == enemy_x) && (bullet_y == enemy_y))
{
enemy_x = 0;
enemy_y = rand() % weight;
bullet_x = bullet_y = -1;
}
實驗結果可知,當敵機被消滅時,程式會隨機在某個位置再次生成敵機,以確保遊戲性
Step3:敵機下落
如果敵機只是簡單地固定於某個位置時,我們的難度將不是很大,所以,我們需要給敵機新增一個下落的屬性,使得遊戲難度增加
而在設定下落時,我們需要知道,當敵機下落到超出遊戲視窗範圍時,我們應該怎麼辦
在這裡,我們可以設定:當敵機超出視窗範圍時,敵機位置重新恢復到初始化狀態,程式再次生成新的敵機
所以應當新增以下程式碼
if(enemy_x > height)
{
enemy_x = 0;
enemy_y = rand() % weight;
}
else
{
enemy_x ++;
}
編譯結果可以看到,效果和我們想象中的差不多,但是有點不一樣:下落速度過快
這樣的結果會讓飛機還沒到達規定的位置,敵機就已經下落出視窗
為此,我們還需要對敵機的下落速度進行限制
if(enemy_x > height)
{
enemy_x = 0;
enemy_y = rand() % weight;
}
else
{
static int speed = 0;
if(speed < 7)
speed ++ ;
if(speed == 7)
{
enemy_x ++;
speed = 0;
}
}
從編譯效果,敵機下落速度有明顯的降低
————————————————————————————————————————————————————