diff --git a/cmd/ws/main.go b/cmd/ws/main.go index a2fb5d7..ef76170 100644 --- a/cmd/ws/main.go +++ b/cmd/ws/main.go @@ -37,7 +37,7 @@ func main() { global.InitAfterGameExp(config.GetInt("AFTER_GAME_EXP")) // Get Turn Format - var tf map[int]logic.TurnInfo + var tf map[string]map[int]logic.TurnInfo err := config.UnmarshalKey("GAME_TURN_FORMAT", &tf) if err != nil { log.Fatal(err) diff --git a/config.yaml b/config.yaml index c817a9e..c0f7fbd 100644 --- a/config.yaml +++ b/config.yaml @@ -45,78 +45,311 @@ text_messages: # Game format GAME_TURN_FORMAT: - 1: - pick: false - player: 1 - 2: - pick: false - player: 2 - 3: - pick: false - player: 1 - 4: - pick: false - player: 2 - 5: - pick: false - player: 1 - 6: - pick: false - player: 2 - 7: - pick: true - player: 1 - 8: - pick: true - player: 2 - 9: - pick: true - player: 2 - 10: - pick: true - player: 1 - 11: - pick: true - player: 1 - 12: - pick: true - player: 2 - 13: - pick: true - player: 2 - 14: - pick: true - player: 1 - 15: - pick: false - player: 1 - 16: - pick: false - player: 2 - 17: - pick: true - player: 2 - 18: - pick: true - player: 1 - 19: - pick: true - player: 1 - 20: - pick: true - player: 2 - 21: - pick: true - player: 2 - 22: - pick: true - player: 1 - 23: - pick: true - player: 1 - 24: - pick: true - player: 2 + "4": + 1: + pick: false + player: 1 + 2: + pick: false + player: 2 + 3: + pick: false + player: 1 + 4: + pick: false + player: 2 + 5: + pick: false + player: 1 + 6: + pick: false + player: 2 + 7: + pick: true + player: 1 + 8: + pick: true + player: 2 + 9: + pick: true + player: 2 + 10: + pick: true + player: 1 + 11: + pick: true + player: 1 + 12: + pick: true + player: 2 + 13: + pick: true + player: 2 + 14: + pick: true + player: 1 + 15: + pick: false + player: 1 + 16: + pick: false + player: 2 + 17: + pick: true + player: 2 + 18: + pick: true + player: 1 + 19: + pick: true + player: 1 + 20: + pick: true + player: 2 + 21: + pick: true + player: 2 + 22: + pick: true + player: 1 + 23: + pick: true + player: 1 + 24: + pick: true + player: 2 + "3": + 1: + pick: false + player: 1 + 2: + pick: false + player: 2 + 3: + pick: false + player: 1 + 4: + pick: false + player: 2 + 5: + pick: true + player: 1 + 6: + pick: true + player: 2 + 7: + pick: true + player: 2 + 8: + pick: true + player: 1 + 9: + pick: true + player: 1 + 10: + pick: true + player: 2 + 11: + pick: true + player: 2 + 12: + pick: true + player: 1 + 13: + pick: false + player: 1 + 14: + pick: false + player: 2 + 15: + pick: true + player: 2 + 16: + pick: true + player: 1 + 17: + pick: true + player: 1 + 18: + pick: true + player: 2 + 19: + pick: true + player: 2 + 20: + pick: true + player: 1 + 21: + pick: true + player: 1 + 22: + pick: true + player: 2 + "2": + 1: + pick: false + player: 1 + 2: + pick: false + player: 2 + 3: + pick: true + player: 1 + 4: + pick: true + player: 2 + 5: + pick: true + player: 2 + 6: + pick: true + player: 1 + 7: + pick: true + player: 1 + 8: + pick: true + player: 2 + 9: + pick: true + player: 2 + 10: + pick: true + player: 1 + 11: + pick: false + player: 1 + 12: + pick: false + player: 2 + 13: + pick: true + player: 2 + 14: + pick: true + player: 1 + 15: + pick: true + player: 1 + 16: + pick: true + player: 2 + 17: + pick: true + player: 2 + 18: + pick: true + player: 1 + 19: + pick: true + player: 1 + 20: + pick: true + player: 2 + "1": + 1: + pick: false + player: 1 + 2: + pick: false + player: 2 + 3: + pick: true + player: 1 + 4: + pick: true + player: 2 + 5: + pick: true + player: 2 + 6: + pick: true + player: 1 + 7: + pick: true + player: 1 + 8: + pick: true + player: 2 + 9: + pick: true + player: 2 + 10: + pick: true + player: 1 + 11: + pick: true + player: 2 + 12: + pick: true + player: 1 + 13: + pick: true + player: 1 + 14: + pick: true + player: 2 + 15: + pick: true + player: 2 + 16: + pick: true + player: 1 + 17: + pick: true + player: 1 + 18: + pick: true + player: 2 + "0": + 1: + pick: true + player: 1 + 2: + pick: true + player: 2 + 3: + pick: true + player: 2 + 4: + pick: true + player: 1 + 5: + pick: true + player: 1 + 6: + pick: true + player: 2 + 7: + pick: true + player: 2 + 8: + pick: true + player: 1 + 9: + pick: true + player: 2 + 10: + pick: true + player: 1 + 11: + pick: true + player: 1 + 12: + pick: true + player: 2 + 13: + pick: true + player: 2 + 14: + pick: true + player: 1 + 15: + pick: true + player: 1 + 16: + pick: true + player: 2 # GAME Config diff --git a/internal/handler/game_conn.go b/internal/handler/game_conn.go index 73bd6fa..b0f7cfe 100644 --- a/internal/handler/game_conn.go +++ b/internal/handler/game_conn.go @@ -58,6 +58,7 @@ func (s *WebSocketHandler) appendPlayer(gs *logic.GameState, player *logic.Playe gs.Status = gstatus.PLAYING logic.ShufflePlayer(gs) gs.Turn = 1 + gs.Pick = logic.CheckIfPickTurn(gs) gs.PlayerTurn = logic.GetPlayerTurn(gs) gs.BPMapP1 = map[int]bool{0: false} gs.BPMapP2 = map[int]bool{0: false} diff --git a/internal/logic/game_logic.go b/internal/logic/game_logic.go index 5f3317f..24b1e5a 100644 --- a/internal/logic/game_logic.go +++ b/internal/logic/game_logic.go @@ -139,7 +139,7 @@ func (g *GameLogic) checkIfMoveValid(gs *GameState) error { func (g *GameLogic) banPickLogic(gs *GameState, mr *MoveRequest, pick bool) error { - if CheckIfPickTurn(gs.Turn) != pick { + if CheckIfPickTurn(gs) != pick { return errors.New(global.TextConfig["wrong_move"]) } @@ -161,11 +161,11 @@ func (g *GameLogic) bpCore(gs *GameState, hid int, pick bool) error { gs.Turn = gs.Turn + 1 ended := false - if _, ok := TurnFormat[gs.Turn]; !ok { + if !CheckIfTurnValid(gs) { gs.Status = gstatus.ENDED ended = true } else { - gs.Pick = CheckIfPickTurn(gs.Turn) + gs.Pick = CheckIfPickTurn(gs) } gs.PlayerTurn = GetPlayerTurn(gs) diff --git a/internal/logic/game_turn_logic.go b/internal/logic/game_turn_logic.go index 92ab2aa..6432c25 100644 --- a/internal/logic/game_turn_logic.go +++ b/internal/logic/game_turn_logic.go @@ -10,14 +10,17 @@ type TurnInfo struct { Pick bool `mapstructure:"pick"` } -var TurnFormat map[int]TurnInfo +var TurnFormat map[string]map[int]TurnInfo -func InitTurnFormat(tf map[int]TurnInfo) { +func InitTurnFormat(tf map[string]map[int]TurnInfo) { TurnFormat = tf } func GetPlayerTurn(gs *GameState) string { - turnInfo := TurnFormat[gs.Turn] + + turnFormat := gs.Settings.NumBan + + turnInfo := TurnFormat[turnFormat][gs.Turn] if turnInfo.Player != 1 { return gs.Player2.CID @@ -26,8 +29,22 @@ func GetPlayerTurn(gs *GameState) string { return gs.Player1.CID } -func CheckIfPickTurn(turn int) bool { - return TurnFormat[turn].Pick +func CheckIfPickTurn(gs *GameState) bool { + turnFormat := gs.Settings.NumBan + + return TurnFormat[turnFormat][gs.Turn].Pick +} + +func CheckIfTurnValid(gs *GameState) bool { + turnFormat := gs.Settings.NumBan + + _, ok := TurnFormat[turnFormat][gs.Turn] + return ok +} + +func GetTurnFormat(gs *GameState) map[int]TurnInfo { + turnFormat := gs.Settings.NumBan + return TurnFormat[turnFormat] } func ShufflePlayer(gs *GameState) { diff --git a/internal/test/entire_game_test.go b/internal/test/entire_game_test.go index 600b858..56980b6 100644 --- a/internal/test/entire_game_test.go +++ b/internal/test/entire_game_test.go @@ -38,9 +38,9 @@ func TestPlayEntireGame(t *testing.T) { moveSet := createMoveSet(t, p1Conn, p2Conn, gs) i := 1 - for i <= len(logic.TurnFormat) { + for i <= len(logic.GetTurnFormat(gs)) { printTestLog(fmt.Sprintf("Make Move Turn %d", i)) - moveSet.MakeTestMove(i) + moveSet.MakeTestMove(gs, i) time.Sleep(250 * time.Millisecond) i++ } diff --git a/internal/test/mashup_game_test.go b/internal/test/mashup_game_test.go index 0a9307e..79b70a3 100644 --- a/internal/test/mashup_game_test.go +++ b/internal/test/mashup_game_test.go @@ -59,9 +59,9 @@ func TestMashUp(t *testing.T) { i := 3 - for i <= len(logic.TurnFormat) { + for i <= len(logic.GetTurnFormat(gs)) { printTestLog(fmt.Sprintf("Make Move Turn %d", i)) - moveSet.MakeTestMove(i) + moveSet.MakeTestMove(gs, i) time.Sleep(250 * time.Millisecond) i++ } diff --git a/internal/test/test_moves.go b/internal/test/test_moves.go index e1cf09d..9b19ee3 100644 --- a/internal/test/test_moves.go +++ b/internal/test/test_moves.go @@ -25,8 +25,9 @@ func newMoveSet(t *testing.T, p1Conn *websocket.Conn, p2Conn *websocket.Conn) *M } } -func (m *MoveSet) MakeTestMove(moveIndex int) { - turnInfo, ok := logic.TurnFormat[moveIndex] +func (m *MoveSet) MakeTestMove(gs *logic.GameState, moveIndex int) { + turnFormat := gs.Settings.NumBan + turnInfo, ok := logic.TurnFormat[turnFormat][moveIndex] if !ok { m.t.Fatalf("invalid turn index!!") } diff --git a/internal/test/test_utils.go b/internal/test/test_utils.go index e890c82..7a0c40d 100644 --- a/internal/test/test_utils.go +++ b/internal/test/test_utils.go @@ -38,7 +38,7 @@ func initTestContext(t *testing.T) (*handler.WebSocketHandler, *redis.Client) { // Init After Game Expiration global.InitAfterGameExp(config.GetInt("AFTER_GAME_EXP")) - var tf map[int]logic.TurnInfo + var tf map[string]map[int]logic.TurnInfo err := config.UnmarshalKey("GAME_TURN_FORMAT", &tf) if err != nil { t.Error("Failed to load config")