- Day 21 - 選職業(4/n)
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/
Games::DrawCommand
// 礦工抽牌行動GamesController
step
model 用來儲存遊戲(每一步)紀錄phase
,用來描述目前是哪個職業階段礦工
階段行動議員
階段行動建築
階段行動生產
階段行動交易
階段行動phase
,用來描述目前是哪個職業階段step
model 用來儲存遊戲(每一步)紀錄phase
,用來描述目前是哪個職業階段目前的 game_data 紀錄的資料
為了知道目前是哪個職業階段,加入 phase
來儲存
rails new migration add_phase_to_games phase:integer
# db/migrate/20240922155101_add_phase_to_games.rb
class AddPhaseToGames < ActiveRecord::Migration[7.2]
def change
add_column :games, :phase, :integer, null: false, default: 0 # 0: unknown, 1: choose_role, 2: builder, 3: producer, 4: trader, 5: prospector, 6: councillor, 7: game_over
end
end
game.rb
加上 enum 宣告# app/models/game.rb
class Game < ApplicationRecord
# ...
enum :phase, {
unknown: 0,
choose_role: 1,
builder: 2,
producer: 3,
trader: 4,
prospector: 5,
councillor: 6,
game_over: 7
}, suffix: true
# ...
end
start_new_game
class << self
def start_new_game(seed: nil, game: nil)
game ||= new(status: :playing, phase: :choose_role)
# ...
為了計算下一位玩家是誰,定義以下方法
turn_over
告訴遊戲玩家行動結束phase_over
告訴遊戲 xx 階段結束round_over
告訴遊戲回合結束notify_turn_begins
通知玩家輪到你了turn_over
告訴遊戲玩家行動結束game_data
加上 waiting_players
,儲存目前階段還沒輪過的玩家turn_over
時,如果
waiting_players
為空,表示階段結束 => 呼叫 phase_over
game.game_data[current_player_index] + 1 % PLAYER_SIZE
=> 呼叫 notify_turn_begins
phase_over
告訴遊戲 xx 階段結束有玩家擁有 12 棟建築
」game_over
round_over
+2
」=> 呼叫 notify_turn_begins
round_over
告訴遊戲回合結束+3
」=> 呼叫 notify_turn_begins
notify_turn_begins
通知玩家輪到你了目前實作的的功能
turn_over
step
model 用來儲存遊戲(每一步)紀錄phase
,用來描述目前是哪個職業階段礦工
階段行動議員
階段行動建築
階段行動生產
階段行動交易
階段行動step
model 用來儲存遊戲(每一步)紀錄以上不代表明天會做,如有雷同純屬巧合
SPT (Side Project Taiwan) 的宗旨是藉由Side Project開發來成就自我,透過持續學習和合作,共同推動技術和專業的發展。我們相信每一個參與者,無論是什麼專業,都能在這個社群中找到屬於自己的成長空間。
歡迎所有對Side Project開發有興趣的人加入我們,可以是有點子來找夥伴,也可以是來尋找有興趣的Side Project加入,邀請大家一同打造一個充滿活力且有意義的技術社群!
Discord頻道連結: https://sideproj.tw/dc