iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
1
自我挑戰組

卡牌連線遊戲開發經驗分享系列 第 11

#11 用事件模式實作回合制-1

一般在玩回合制遊戲,玩家必須等到對面玩家或電腦結束後才能行動
由於這部份沒辦法由程式主動控制,所以我們需要透過事件的方式運作

本篇會分別以 python 先說明如何實作事件機制?
提醒:這部份需要對 Thread 有一定程度了解,本篇只會概略解釋,詳細請參照官方文件 or 網路教學
Thread 內有提供 Event 讓我們實作簡單的事件機制

Event 只有四個功能:

  1. is_set() 回傳事件是否啟動?
  2. set() 啟動事件,等待事件的人會開始動作
  3. wait(timeout=None) 進入等待狀態,直到 set() 執行。類似除錯中斷點的概念
  4. clear() 重設事件,wait() 的人會進入等待,直到 set()

事件分為兩個部份:

  1. 發送事件的一端:通常由「介面」那邊執行 事件.set()
  2. 處理事件的一端:通常叫做 Handler ,執行 事件.wait() 後續接處理事件的操作,本身是 while True 迴圈

事件有兩類:

  1. 無參數,像是 onclick() 通常就代表按下按鈕,並沒有其他訊息
  2. 有參數,threading.Event 沒有提供此功能,需要自己額外實作

首先我們要實作玩家操作的這一端,會需要以下事件的幫助:
角標代表事件發送的方向,向左代表由遊戲主控端送到玩家,向右代表玩家送到給主控端

  1. 更新遊戲狀態 <
  2. 玩家回合開始 <
  3. 玩家行動 >
  4. 玩家回合結束 <

玩家端的部份:

  1. updateHandler(msg)
  2. turnStartHandler()
  3. action(msg)
  4. turnEndHandler()

系統端的部份:

  1. update(msg)
  2. turnStart(playerID)
  3. actionHandler(msg)
  4. turnEnd(playerID)

明天會再繼續更詳細的實作,謝謝收看!


上一篇
#10 遊戲架構規劃 - 以《爐石戰記》為例
下一篇
#12 研究筆記:事件、佇列、信號 in Python
系列文
卡牌連線遊戲開發經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言