標籤

2018年1月12日 星期五

Unity小試身手-警察抓小偷

Date: 20180112
Version: 1

主要內容為在一個棋盤格式的地圖中,警察要在棋格上移動,找出小偷躲藏的地方。












規格:
Unity: Unity 2017.3.0f3 (64-bit)
Asset: Fungus
Android SDK:Android 6.0 API 23, Android Tool 25.0.0
JDK:jdk-8u77-windows-x64 (jdk1.8.0_77)

學習平台:
1. fungus詢問平台
https://muut.com/fungus#!/

2. 陳間時光 youtube
https://www.youtube.com/channel/UCXWxqnjzo4q6NhQiLhQFk7g


學習記錄:
collider -> clickable -> flowchart(can use object click action)
rigibody->collider->other.trigger(script needed)

Scripting > execute lua
-----------------------------------------------
local thief = getvar(flowchart, "Thief")
if (thief.value == 1)
then
thief.value = 2
--print(thief.value)
--return(thief.value)
end
----------------------------------------------
說明:
--註解
getvar 取得在flowchart中的fungus變數名稱"Thief"
local 只給fungus使用
thief.value = 2 將thief物件中的數值value改為2,此時fungus中的Thief會變為2
print(thief.value) 會在debug.log列印出來,除錯用
return(thief.value) 將thief.value回傳給Return Variable
Return Variable 要回傳的fungus變數,可為<None>
有return(...),Return(<None>),沒有回傳變數,故回傳值回傳後就不見了,程式正常
有return(...),Return(...),將回傳值回傳給回傳變數,程式正常
沒有return(...),Return(<None>),沒有回傳值,也沒有回傳變數,程式正常
沒有return(...),Return(...),沒有回傳值,有回傳變數,回傳失敗,程式error
lua if 結構式為: if () then {} elseif () then {} else {} end
lua 且(and )、或(or),不是&&或是||



遊戲步驟:決策 > 移動

決策說明:(三者擇一)
1. 調查:可得知與之相連的棋格是否有小偷,return 有無小偷。
2. 部署:在原地點佈下警力,小偷不會進入此區域,但有持續時間/次數之限制。
2. 技能:可使用角色技能。

移動說明:選擇與之相連的棋格進行移動,return 有無小偷。
1. 有小偷:逮捕,遊戲結束,按照步數進行獎懲。
2. 無小偷:進行循環。

初始:
設定警察、小偷位置
1. 設定警察位置,九宮格共9個位置(set police.random = 1-9)
2. 設定小偷位置,不能與警察同格(set thief.random = 1-9,  while (thief == police){set thief.random = 1-9})

流程:
警察(決策>移動) > 判斷(抓住與否) > 小偷(移動)

決策:
調查:
1. 警察四周可移動之位置,確認是否有小偷,若有則回傳對話框saydialog,if (police == thief or police == thief ){},使用lua撰寫。

部署:
1. 鎖定位置,讓小偷無法進入,但不影響警察進出。

警察移動:
1. 判斷自身位置(九種位置)(if police == 1-9)(9種){依照自身位置給出方向(角2、邊3、心4,上下左右(menudialog)}(24種)
    1-1. 判斷周遭狀況(部署)
2. 連至相對應的block(move to 1-9)(step++)(set police = 1-9)

判斷:
1. 若警察和小偷的位置一樣,則跳出對話後,給出兩種選擇"重新開始"、"結束遊戲"。

小偷移動:
1. 判斷警察和小偷位置後,使用if功能,確認出小偷可以移動之方向,若距離一樣,則使用隨機給出方向。
2. 使用lua。

目前會暫停這項計畫,發覺這遊戲好像沒這麼好玩,需要重新思考一下,可能會繼續卡牌遊戲的設計吧!

2018年1月1日 星期一

桌遊設定-2

Date: 20180101
Version: 1

主要還是延續桌遊設定-1的主題內容,但時間已隔許久,所以決定重開一章來繼續撰寫。

出生開始就邁入死亡 = 結構化-->失序化 = 不斷熵增的過程,而唯一的出入就是進化 = 就在讓自身再次結構化 = 達到熵減的結果。

所以遊戲剛開始有一個固定熵值,隨著遊戲時間進行,熵值會不斷增加,最後到達閾值,遊戲結束,因此,遊戲目的就是讓對方熵增加快(熵值增加,隨遊戲時間進行、讓對方受傷),讓自身熵減(熵值降低,結構化=創造招喚物)。

利用招怪的方式,降低熵值,換句話說,也就是用熵值來進行招喚,故招喚物死亡後,也就是失序化,熵增。

熵值等於能量,能量可轉換為攻擊力、防禦力、效果、生命值,這四種是卡牌遊戲共有的,但四種太多了,困難度提高,因此需要降低複雜度,也就是說,需要把好幾種變為一種,以降低複雜度。

防禦力用來抵銷攻擊力,可以併入效果或生命值,剩攻擊力、效果、生命值,效果無法併入其他,剩攻擊力和生命值,兩者是否可以合併?生命值也就是體質,體質越好所蘊含的生命力更高,那是否體質越好的人,其攻擊能力越強呢?體質越好的人,其支撐這個身體的能量需要越多,來包括維持血液循環、神經反應、肌肉強度、肺活量...等,根據E=mc^2,能量越高,質量(體質)越高,再經由F=ma,也就是力(攻擊力)越高,因此,得出攻擊力和生命值是可以相容的,同理,當受傷時,生命值下降,體質降低,攻擊力也會跟著下滑,故兩者為正比。

最後結果為,能量 = 效果+ (攻擊力 = 生命值),之後也會按照此規則進行設計。

遊戲背景設定:
在各種的計算之下,唯一得到的答案都是宇宙寂滅,所有的一切都將在宇宙大磨盤前化為虛無,於是乎在這樣的情境下,各種族不斷的嘗試各種超脫之路,期望自身可以擺脫那永恆的夢靨。
在各種超脫之路上,各種族專研各種降低熵值的方法,來達到永恆超脫的境界,而玩家扮演的就是各個種族,每個種族都有其專研的超脫之路,正所謂死道友,不死貧道,不需要跑第一,只要跑得比別人快就行了,各玩家就是在比拚誰能活到最後,誰擁有最多的時間來完善和專研超脫之路。

遊戲模式採類似「魔幻卡牌」的遊戲機制,完全不考慮牌運,也就是說一開始就可以使用所有的卡片,也因此卡片數量因展示空間有限,目前考慮為極數9來做一個規範,所以一個種族有9張牌可以使用。

再來是戰鬥部分,根據牛頓第三運動定律「作用力與反作用力」,攻擊別人時,力也會同時作用到自己身上,所以決不會有這回合我打你一拳,然後計算傷害,下回合你再打我一拳,然後再計算傷害,傷害是同時的。

而傷害結算就是,(攻擊力=生命值)互減,即A.attack-B.attack和B.attack-A.attack,戰鬥是同時發生的,不會有我先打在換你打的狀況發生,雙方攻擊力互減後,若攻擊力<=0,則滅亡,熵值則回復。再來是abs(A.attack-B.attack)的值是否要加到被消滅方的熵值上呢?這就要考慮到熵值的定義了,到底是個體熵值,還是種族熵值?若是個體熵值,則玩家本身就是個體,個體不會在招喚其他個體;若是種族熵值,則種族會招喚出個體,期望個體當中會有一個可以達成超脫,因而帶動整個種族達成超脫。

從上述得知,故熵值為種族熵值,因此,個體進行戰鬥損傷後產生abs(A.attack-B.attack)值,並不會影響到種族的發展。種族熵值預設為100,起始為50。

每一回後結束後,熵值會自動上升X值(5 or 10),如同生命隨著時間慢慢步向死亡一般。

再來就是攻擊對象,有兩種可以選擇,1)可以自由選擇攻擊對象,例如遊戲王,2)只能攻擊對格怪獸,例如魔幻卡牌。(尚未決定)

再來是場上怪獸數量為3。

下怪的方式,因平常的遊戲是你一回合我一回合,是輪流放怪出來,所以後放的會看到先放的怪獸資訊,因而選擇相對應的怪獸,那是否需要當雙方都按下確認後,雙方才能看到對方選擇的怪獸。(尚未決定)(資訊透明的程度)

攻擊階段,是否可以選擇不攻擊?因攻擊後,勝利方生命值減少,下回合一定會被打死,如此循環,結果就會是第一個戰敗的會輸,但雙方都選擇不攻擊,這遊戲就不好玩了,沒有積極度。

再來是如果雙方同時進行攻擊,若其中一方有兩隻怪,一方只有一隻的情況下,要同時進行攻擊,A方,選擇A.1打B.1,因B.1血較少,而B方,選擇B.2打A.1,這樣B.2會活下來,對方會空場,且B.1可以直接攻擊玩家(先不論可不可以攻擊玩家),這樣的情況下,雙方的選擇步一樣時該如何處理?若換成一方動完換另一方動,就不會有上述的狀況發生。

在上述的討論中,發現就牛頓第三運動定律而言,真正重要的是攻擊別人即是攻擊自己,因此,重點要放在攻擊對手後自己也同時會受到傷害,與互相輪流放置攻擊或同時放置攻擊並無相關,是屬於另一個議題,再來是受到傷害的來源是 1)對象的攻擊力,還是 2)自身的攻擊力。

1)對象的攻擊力
考慮到作用力與反作用力,故當自身攻擊時,就會受到對方攻擊力的攻擊力,因此兩者相減小於等於零時死亡,這也符合攻擊力=生命值的設定,再來就是當攻擊對方後,傷害溢出值abs(A.attack-B.attack),因前項考慮後為個體損傷不影響種族,故傷害溢出值無實際作用,除非種族特色/效果所致,接著是攻擊結果,A為己方,B為對方時,共會有XX種狀況如下:
若A.attack > B.attack,A.attack=A.attack-B.attack>0,A存活,B.attack-A.attack<0,B死亡。
若A.attack = B.attack,A.attack-B.attack=0,A死亡,B.attack-A.attack=0,B死亡。
若A.attack < B.attack,A.attack-B.attack<0,A死亡,B.attack=B.attack-A.attack>0,B存活。

2)自身的攻擊力
考慮到作用力與反作用力,故當自身攻擊時,就會受到等同自身攻擊力的攻擊力,因此兩者相減為零,自身會死亡,這也符合攻擊力=生命值的設定,再來就是當攻擊對方後,傷害溢出值abs(A.attack-B.attack),因前項考慮後為個體損傷不影響種族,故傷害溢出值無實際作用,除非種族特色/效果所致,接著是攻擊結果,A為己方,B為對方時,共會有兩種狀況如下:
若A.attack >= B.attack,A死亡,B死亡。
若A.attack < B.attack,A死亡,B存活且B.attack  = B.attack-A.attack。

會產生自身若攻擊比對方低,就不會攻擊對方的現象,所以是否強制雙方進行攻擊,但這樣子就會產生強弱強弱的循環,所以這時種族特色/效果的點就會出現,如何突破輪迴,就是要依靠種族特色/效果。


種族特色: