iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
自我挑戰組

卡牌遊戲開發日記v2020系列 第 6

Day6 曾經的規則實作

//放一下之前實作過的內容,其實還缺很多東西

原始碼放在這裡[1]

程式碼稍微翻譯一下大概如下:

對手之前行動

# 處理蓋牌
if 對手之前行動==防禦 and 是攻擊(自身行動):
	自身行動=無作用行動
elif 對手之前行動==封印 and 是術式(自身行動):
	自身行動=無作用行動
elif 對手之前行動==封印 and 是攻擊(自身行動):
	傷害反彈=True

# 處理幻化效果
if 自身行動==幻化 and 屬於基礎規則(對手之前行動):
	自身行動=對手之前行動
else:
	自身行動=無作用行動

對象ID = 取得對象ID(玩家人數, 自身的玩家ID, 自身行動) # 為了兩人以上對戰的擴充
數值 = 計算行動數值(出牌, 自身行動) # 五流歸一需要對手手牌數量

效果函式 = 效果列表[自身行動] # 查表

if 是攻擊(自身行動):
	if 傷害反彈:
		數值 = 數值/2 # 小數點要消掉,在此省略
		傷害扣血(對手ID, 自身行動, 數值)
		傷害扣血(自身的玩家ID, 自身行動, 數值)
	else:
		傷害扣血(對手ID, 自身行動, 數值)
else:
	效果函式(對象ID, 數值)

更新玩家上回合行動(自身玩家ID, 自身行動)

當時寫到這的時候只有先確立邏輯,但是對應的數值資料還沒定義和串接,只是很模糊的用 PlyStat 和 env 代表。在當時的問題是沒辦法跑測試,只是概念,但沒辦法餵資料看程式邏輯對不對?在更後面是因為還要再塞更複雜的系統進來,覺得if-else的階層數會無止盡地長下去,程式很難維護,於是這作法就沒再繼續用了

老實說 if-else 的作法不是不行,寫的時候腦袋清楚也可以,所有的情況都有考慮到,也跑得起來。

這實作其實只差光芒和混沌的實作就能算完成了。光芒的部份跟遊戲流程有關,gameLoop那時候沒作出來。
混沌的話,要看對手牌、然後抽兩張,這些動作需要把整個遊戲環境資料弄起來。

後來我改了其他的寫法,目前還寫到一半[2]
前面東西交代完了,之後日誌的重心會比較轉往實作開發的部份

[1] pyCFE/t.effect.py at feat-randAction · outshaker/pyCFE
https://github.com/outshaker/pyCFE/blob/feat-randAction/t.effect.py

[2] pyCFE/t.rAction.py at feat-randAction · outshaker/pyCFE
https://github.com/outshaker/pyCFE/blob/feat-randAction/t.rAction.py


上一篇
Day5 小結: 目前規則
下一篇
Day7 改善傷害的處理過程
系列文
卡牌遊戲開發日記v202030

尚未有邦友留言

立即登入留言