iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0

Current Sprint: 3. ???
repo: https://github.com/side-project-at-SPT/ithome-ironman-2024-san-juan
swagger docs: https://side-project-at-spt.github.io/ithome-ironman-2024-san-juan/

前情提要

完成了 遊戲開始 的階段

sprint 3

回顧一下遊戲流程:

  1. 遊戲開始
  2. 回合開始
  3. 起始玩家選擇職業
  4. 行動
  5. 下一位玩家行動
  6. 階段結束
  7. 下一位玩家選擇職業
  8. 階段結束
  9. 回合結束
  10. 遊戲結束

目前有的 api (使用者跟遊戲如何互動)

  1. query
    1. 所有遊戲 GET /api/v1/games
  2. command
    1. 開始遊戲 POST /api/v1/games
    2. 行動 POST /api/v1/games/{game_id}/play

為了方便在 swagger 上表現出不同行動 (相同路徑無法區分)

遊戲行動將使用下面的 api 命名方式:

  1. 選擇職業 POST /api/v1/games/{id}/roles/{role_name | role_id}
    1. roles: builder | producer | trader | councillor | prospector (or use 1-indexed)
    2. 成功:204
    3. 失敗:
      1. invalid params
      2. already taken
  2. 執行 回合開始 行動:
    1. 棄牌(以符合手牌上限) PUT /api/v1/games/{id}/hand
      1. payload: 要留在手上的卡片 id, ex: { "hand": ["01", "02", "03", "04", "05", "05", "09"] }
      2. 成功:204
      3. 失敗:
        1. 玩家手牌無法組成 payload
        2. payload.size > 玩家手牌上限
    2. 銀行行動:略
    3. 辦公大樓行動:略
  3. 執行 礦工 行動:
    1. (自動抽牌)
    2. 擁有金工坊玩家:(自動抽牌並展示、執行後續效果)
  4. 執行 議員 行動:(自動抽牌後選擇要留下的卡片) PUT /api/v1/games/{id}/keep-via-councillor
    1. payload: 要留在手上的卡片 id, ex: { "keep": ["01", "02"] }
    2. 成功:204
    3. 失敗:
      1. 抽出的卡片無法組成 payload
      2. 留下的卡片 > 1
    4. 城市建築效果:略
  5. 執行 建築師 行動:建造選擇的卡片並支付費用 POST /api/v1/games/{id}/build/{card_id}
    1. payload: 支付費用 { "hand": ["01", "02"] }
      1. { "goods": ["03", "04"] } (黑市 能力)
      2. { "crane": "01" } (起重機 能力)
    2. 成功:204
    3. 失敗:
      1. 選擇了手上沒有的卡片 (or 大教堂)
      2. 選擇了已擁有的城市建築
      3. 支付費用不足
      4. 支付組合不合法 (卡片不存在、未擁有黑市而消耗貨物、未擁有起重機而改建建築)
  6. 執行 製造商 行動:選擇要產生貨物 POST /api/v1/games/{id}/produce
    1. payload: 要生產的貨物 { "goods": ["01", "01"] }
    2. 成功:204
    3. 失敗:
      1. 場上的工廠不足以生產要求的貨物
      2. 選擇的貨物數超過可以生產的數量
  7. 執行 貿易商 行動:選擇工廠販賣貨物 POST /api/v1/games{id}/sell
    1. payload: 要賣掉的貨物 { "goods": ["01", "01"] }
    2. { "custom": "01" } (海關 能力)
    3. 成功:204
    4. 失敗:
      1. 場上的貨物不足以達到販賣要求
      2. 選擇的貨物數超過可以販賣的數量
  8. 遊戲計分:自動

遊戲狀態

當接受行動請求後,遊戲會會盡可能向前推進,直到

  1. 錯誤,提示玩家原因
  2. 下個需要玩家介入的行動

當目前行動玩家是 AI 時,自動執行行動,直到下個需要玩家介入的行動為止

先不做 ws 通知遊戲狀態變更
由 client polling 遊戲狀態

遊戲事件紀錄

  1. api 呼叫時紀錄
  2. 系統對遊戲狀態造成改變時紀錄
  3. AI 自動動作時紀錄

也就是會有

  1. 建立遊戲事件
  2. 回合開始事件
  3. 輪到xx玩家事件
  4. 選擇職業事件
  5. 執行職業行動事件 (包含礦工)(展示價格卡)
    1. 抽牌
    2. 棄牌
    3. 建造
    4. 生產
    5. 放置於卡片下方
    6. 展示
  6. 職業階段結束事件
  7. 回合結束事件 (更換起始玩家)
  8. 遊戲結束條件達成事件
  9. 遊戲結束事件

收工.

小結

有人有興趣參與前端嗎 /images/emoticon/emoticon61.gif

明天要做什麼

  • 選擇 sprint 3 的範圍

以上不代表明天會做,如有雷同純屬巧合


工商服務

SPT (Side Project Taiwan) 的宗旨是藉由Side Project開發來成就自我,透過持續學習和合作,共同推動技術和專業的發展。我們相信每一個參與者,無論是什麼專業,都能在這個社群中找到屬於自己的成長空間。

歡迎所有對Side Project開發有興趣的人加入我們,可以是有點子來找夥伴,也可以是來尋找有興趣的Side Project加入,邀請大家一同打造一個充滿活力且有意義的技術社群!

Discord頻道連結: https://sideproj.tw/dc


上一篇
Day 14 - S2: 遊戲開始 done.
下一篇
Day 16 - 實作工廠卡片的資料
系列文
透過實作網頁遊戲練習網站工程師的基本素養,以 San Juan(聖胡安) 為例。30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言