Unity版本憤怒的小鳥設計與實現

2021-09-25 23:40:07 字數 3208 閱讀 4821

物理向的小遊戲,首先我們需要知道這個元件:springjoint,也就是2d彈簧元件,很有意思的元件,做ui的時候可以用來實現那種繩子吊著木牌懸掛的感覺。

這是這個小遊戲實現的核心之一。

哦,對了,還有這個元件:linerender元件,也就是劃線的元件,其實主要就是用到了它的setposition方法。

細心可以發現,這裡面包含了,「豬的死亡」,「鳥的發射」,「換鳥操作」,還有遊戲輸贏邏輯判斷。

using system.collections;

using system.collections.generic;

using unityengine;

/**/

namespace jumpagent

set}

public rigidbody2d rb

set}

private void awake()

private void onmousedown()

private void onmouseup()

void update()

linerender();}}

/// /// 控制小鳥飛翔

///

private void fly()

/// /// 劃線的實現

///

private void linerender()

/// /// 這裡我沒有採用直接銷毀遊戲物體,取而代之的是將其隱藏起來.

///

public void dohidethis()

public void hidethis()

}//類

}//命名空間

這個豬的指令碼主要是控制豬的受傷(根據碰撞時的速度來判斷傷害,傷害處理機制,我封裝了乙個指令碼),其實這個豬的指令碼可以泛用的,比如就是說可以用到我們的障礙物身上,小鳥撞擊障礙物,會進行同樣的傷害判定,還可以通過修改不同障礙物的生命值來控制實現不同障礙物的不同特性,不過在這裡我並沒有進行泛用,雖說可以泛用,但是只是95%**一樣,豬比障礙物多了個死亡沒死亡的bool判斷值,這在下面的gamemanager指令碼裡解釋。

using system.collections;

using system.collections.generic;

using unityengine;

/**/

namespace jumpagent

//豬(障礙物)與鳥的碰撞檢測,

private void oncollisionenter2d(collision2d collision)

if (collision.relativevelocity.magnitude > minspeed && collision.relativevelocity.magnitude < maxspeed)}}

//豬的傷害判定指令碼

private void pigdeathjudge(float damage)

if (hp <= 50 && hp > 0)

}private void pigdestory()

}//類

}//命名空間

裡面有:換鳥操作,和兩個分別管理豬,鳥的集合,也就是說我們判斷輸贏,就只需要維護我們的這兩個集合就好啦。

using system.collections;

using system.collections.generic;

using unityengine;

using system;

/**/

namespace jumpagent

private void start()

/// /// 遊戲輸贏判斷

///

///

private ienumerator gamewinorlosejudgment()

}// debug.log("現在豬的數量為:" + pigalivecount);

if (pigalivecount == 0)

else//反之則開始判斷小鳥的飛出數量

//在這裡可以考慮一下延時

yield return new waitforseconds(1);

//遍歷小鳥陣列,如果小鳥飛出的數量等於小鳥原來集合的count的話

foreach (birds item in birds)

}debug.log("小鳥數量為" + (birds.count - birdflyedcount) + "/" + birds.count);

if ((birds.count - birdflyedcount) == 0)//如果剩餘的小鳥數量(所有鳥的數量減去已經飛出的小鳥的數量==0)

else//反之則為遊戲進行中}}

/// /// 換鳥操作

///

public void birdsalternate()}}

/// /// 初始化豬和鳥的集合

///

public void allfindpigandbird()

for (int i = 0; i < gopig.length; i++)

//把小鳥的birds元件都先禁用

for (int i = 0; i < birds.count; i++)

}}//類

}//命名空間

首先我們不能就是說,有多少關就做多少個場景,然後在選關介面做一堆button,然後點哪個就跳哪個場景,那樣是不可取的,除去會讓遊戲變得很大之外,而且如果那樣的話,上面寫的這堆自動判斷輸贏,自動查詢鳥和豬以及自動換鳥的這些操作就沒有任何意義了。

那麼該如何實現呢?我們要做的僅僅是做出不同的障礙物組合,然後把他們放到prefabs資料夾,然後根據每個關卡(為每個關卡設定列舉)的列舉數,來在地圖相應的位置(位置要先定義好)來載入你需要的鳥和障礙物即可,只要你把你需要的障礙物和鳥加到遊戲場景中,遊戲就會自動執行。

憤怒的小鳥

對於每兩隻豬,只要他們的橫座標不一樣,就會有一條經過原點的二次函式y ax2 bx同時經過這兩隻豬,那麼這時就是解二元一次方程的時候了,設第一只豬的座標為 x1,y1 第二隻豬的座標為 x2,y2 y1 ax1 2 bx 1 y2 ax2 2 bx 2 化為 b y 1 ax 12x1 y2 ax2...

憤怒的小鳥

qaq 狀壓dp 1表示小鳥打掉了,0表示沒打掉。dp s 表示到s狀態最少需要幾步。怎麼列舉a,b。因為c 0,只需兩隻豬即可確定一條曲線。boom i j 表示i豬和j豬確定的曲線可以打掉的豬。關於轉移 列舉狀態s中第一只沒有打掉的小豬,固定i,列舉j即可 注意初始化 include inclu...

憤怒的小鳥

憤怒的小鳥 這道題目不是一道sb的狀壓嗎。我們設f i f i f i 表示射擊狀態是i ii,最少用了多少直線。i ii的第j jj位為1 11表示射擊這個位置。然後對於每個直線跑揹包。時間複雜度 o t n22n o tn 22 n o tn22 n 但是其實有更快做法,限制i ii只能被包含最...