Skip to content

Commit

Permalink
[修正] 遊戲邏輯調整
Browse files Browse the repository at this point in the history
  • Loading branch information
yockwang committed Dec 30, 2023
1 parent ca46e5e commit 0b51a4b
Show file tree
Hide file tree
Showing 7 changed files with 63 additions and 52 deletions.
2 changes: 1 addition & 1 deletion backend/domain/spell.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@ def cast_magic_1(self, game, player) -> tuple:
:param game: 目前遊戲狀態,從資料庫取出
:param player: 施法玩家
"""
damage = roll_dice()

for p in game.players:
if p != player:
damage = roll_dice()
p.update_HP(-damage)
return "fire_dragon", damage

Expand Down
4 changes: 2 additions & 2 deletions backend/service/game_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,8 +189,8 @@ def end_round(self, game_id: str, player_id: str) -> None:
for p in game.players:
if p.get_HP() > 0:
if len(p.secret_spells) > 0:
# 持有秘密魔法石,在額外加1分
p.update_score(1)
# 持有秘密魔法石,有幾個加幾分
p.update_score(len(p.secret_spells))

self.game_repository.update_game(game)
self.start_new_round(game_id)
Expand Down
31 changes: 21 additions & 10 deletions backend/tests/integration/happy_path/test_happy_path_round1.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ def mock_roll_dice():
# 洗牌 B列
game.players[0].spells = ["Magic 3", "Magic 3", "Magic 5", "Magic 7", "Magic 8"]
game.players[1].spells = ["Magic 5", "Magic 5", "Magic 7", "Magic 8", "Magic 8"]
game.players[2].spells = ["Magic 4", "Magic 5", "Magic 5", "Magic 6", "Magic 8"]
game.players[3].spells = ["Magic 4", "Magic 6", "Magic 6", "Magic 7", "Magic 8"]
game.players[2].spells = ["Magic 4", "Magic 4", "Magic 5", "Magic 6", "Magic 8"]
game.players[3].spells = ["Magic 5", "Magic 6", "Magic 6", "Magic 7", "Magic 8"]
game.players[4].spells = ["Magic 2", "Magic 6", "Magic 7", "Magic 7", "Magic 8"]

game.secret_warehouse = ["Magic 2", "Magic 3", "Magic 7", "Magic 8"]
Expand Down Expand Up @@ -102,28 +102,39 @@ def mock_roll_dice():
assert len(game.secret_warehouse) == 3
assert len(game.ladder) == 4

# C補充手牌5 J列
# C施法4 J列
assert game.current_player == 2
assert game.turn == 3
game_service.cast_spell(game_id, "C", "Magic 4")
game = game_service.game_repository.get_game_by_id(game_id)
assert len(game.find_player_by_id("C").spells) == 3
assert game.find_player_by_id("C").secret_spells[1] == "Magic 7"
assert len(game.secret_warehouse) == 2
assert len(game.ladder) == 5

# C補充手牌5 K列
assert game.current_player == 2
assert game_service.end_turn(game_id, "C")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("C").spells[4] == "Magic 1"
assert len(game.warehouse) == 3
assert game.find_player_by_id("C").spells[3] == "Magic 1"
assert game.find_player_by_id("C").spells[4] == "Magic 6"
assert len(game.warehouse) == 2

# D施法5 K列
# D施法5 L列
assert game.current_player == 3
assert game.turn == 4
game_service.cast_spell(game_id, "D", "Magic 5")
game_service.cast_spell(game_id, "D", "Magic 3")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("D").get_HP() == 5

# E施法5 L列
# E施法5 M列
assert game.current_player == 4
assert game.turn == 5
game_service.cast_spell(game_id, "E", "Magic 5")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("E").get_HP() == 4

# A施法1, 因為玩家A自殺, 自動進入結算 M列
# A施法1, 因為玩家A自殺, 自動進入結算 N列
assert game.current_player == 0
assert game.turn == 6
game_service.cast_spell(game_id, "A", "Magic 1")
Expand All @@ -132,6 +143,6 @@ def mock_roll_dice():
assert player.get_HP() == 6
assert game.find_player_by_id("A").score == 0
assert game.find_player_by_id("B").score == 1
assert game.find_player_by_id("C").score == 2
assert game.find_player_by_id("C").score == 3
assert game.find_player_by_id("D").score == 1
assert game.find_player_by_id("E").score == 1
32 changes: 16 additions & 16 deletions backend/tests/integration/happy_path/test_happy_path_round2.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@


def test_happy_path_round2(game_service, five_player_game, monkeypatch):
dice_results = [1, 2, 3, 1]
dice_results = [1]

def mock_roll_dice():
result = dice_results.pop(0)
Expand All @@ -21,12 +21,12 @@ def mock_roll_dice():

game = game_service.game_repository.get_game_by_id(game_id)

# 洗牌 O列
# 洗牌 P列
assert game.turn == 1
game.round = 2
game.players[0].score = 0
game.players[1].score = 1
game.players[2].score = 2
game.players[2].score = 3
game.players[3].score = 1
game.players[4].score = 1
game.players[0].spells = ["Magic 4", "Magic 6", "Magic 7", "Magic 7", "Magic 7"]
Expand All @@ -48,56 +48,56 @@ def mock_roll_dice():

game_service.game_repository.update_game(game)

# A施法5 P列
# A施法5 Q列
assert game.round == 2
assert game.current_player == 0
game_service.cast_spell(game_id, "A", "Magic 5")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("A").get_HP() == 5

# B施法1 Q列
# B施法1 R列
assert game.current_player == 1
assert game.turn == 2
game_service.cast_spell(game_id, "B", "Magic 1")
game = game_service.game_repository.get_game_by_id(game_id)
assert len(game.find_player_by_id("B").spells) == 4
assert game.find_player_by_id("A").get_HP() == 4
assert game.find_player_by_id("C").get_HP() == 4
assert game.find_player_by_id("D").get_HP() == 3
assert game.find_player_by_id("C").get_HP() == 5
assert game.find_player_by_id("D").get_HP() == 5
assert game.find_player_by_id("E").get_HP() == 5
assert len(game.ladder) == 1

# B施法2 R列
# B施法2 S列
game_service.cast_spell(game_id, "B", "Magic 2")
game = game_service.game_repository.get_game_by_id(game_id)
assert len(game.find_player_by_id("B").spells) == 3
assert game.find_player_by_id("A").get_HP() == 3
assert game.find_player_by_id("C").get_HP() == 3
assert game.find_player_by_id("D").get_HP() == 2
assert game.find_player_by_id("C").get_HP() == 4
assert game.find_player_by_id("D").get_HP() == 4
assert game.find_player_by_id("E").get_HP() == 4
assert len(game.ladder) == 2

# B施法5 S列
# B施法5 T列
game_service.cast_spell(game_id, "B", "Magic 5")
game = game_service.game_repository.get_game_by_id(game_id)
assert len(game.find_player_by_id("B").spells) == 2
assert game.find_player_by_id("A").get_HP() == 2
assert game.find_player_by_id("C").get_HP() == 2
assert game.find_player_by_id("C").get_HP() == 3
assert len(game.ladder) == 3

# B施法5 T列
# B施法5 U列
game_service.cast_spell(game_id, "B", "Magic 5")
game = game_service.game_repository.get_game_by_id(game_id)
assert len(game.find_player_by_id("B").spells) == 1
assert game.find_player_by_id("A").get_HP() == 1
assert game.find_player_by_id("C").get_HP() == 1
assert game.find_player_by_id("C").get_HP() == 2
assert len(game.ladder) == 4

# B施法7, 殺死玩家A,將自動進行結算 U列
# B施法7, 殺死玩家A,將自動進行結算 V列
game_service.cast_spell(game_id, "B", "Magic 7")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("A").score == 0
assert game.find_player_by_id("B").score == 4
assert game.find_player_by_id("C").score == 2
assert game.find_player_by_id("C").score == 3
assert game.find_player_by_id("D").score == 1
assert game.find_player_by_id("E").score == 1
20 changes: 10 additions & 10 deletions backend/tests/integration/happy_path/test_happy_path_round3.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ def mock_roll_dice():

game = game_service.game_repository.get_game_by_id(game_id)

# 洗牌 O列
# 洗牌 X列
assert game.turn == 1
game.round = 3
game.players[0].score = 0
game.players[1].score = 4
game.players[2].score = 2
game.players[2].score = 3
game.players[3].score = 1
game.players[4].score = 1
game.players[0].spells = ["Magic 2", "Magic 5", "Magic 6", "Magic 8", "Magic 8"]
Expand All @@ -48,15 +48,15 @@ def mock_roll_dice():

game_service.game_repository.update_game(game)

# A施法1 X列
# A施法1 Y列
assert game.round == 3
assert game.turn == 1
assert game.current_player == 0
game_service.cast_spell(game_id, "A", "Magic 1")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("A").get_HP() == 3

# B施法7 Y列
# B施法7 X列
assert game.turn == 2
assert game.current_player == 1
game_service.cast_spell(game_id, "B", "Magic 7")
Expand All @@ -65,7 +65,7 @@ def mock_roll_dice():
assert len(game.find_player_by_id("B").spells) == 4
assert len(game.ladder) == 1

# B施法7 Z列
# B施法7 AA列
assert game.turn == 2
assert game.current_player == 1
game_service.cast_spell(game_id, "B", "Magic 7")
Expand All @@ -74,35 +74,35 @@ def mock_roll_dice():
assert len(game.find_player_by_id("B").spells) == 3
assert len(game.ladder) == 2

# B補充手牌 AA列
# B補充手牌 AB列
assert game.current_player == 1
assert game_service.end_turn(game_id, "B")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("B").spells[3] == "Magic 6"
assert game.find_player_by_id("B").spells[4] == "Magic 8"
assert len(game.warehouse) == 5

# C施法4 AB列
# C施法4 AC列
assert game.turn == 3
assert game.current_player == 2
game_service.cast_spell(game_id, "C", "Magic 4")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("C").get_HP() == 5

# D施法5 AC列
# D施法5 AD列
assert game.turn == 4
assert game.current_player == 3
game_service.cast_spell(game_id, "D", "Magic 5")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("D").get_HP() == 5

# E施法5,殺死玩家A, 系統自動結算 AD列
# E施法5,殺死玩家A, 系統自動結算 AE列
assert game.turn == 5
assert game.current_player == 4
game_service.cast_spell(game_id, "E", "Magic 5")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("A").score == 0
assert game.find_player_by_id("B").score == 5
assert game.find_player_by_id("C").score == 3
assert game.find_player_by_id("C").score == 4
assert game.find_player_by_id("D").score == 2
assert game.find_player_by_id("E").score == 4
18 changes: 9 additions & 9 deletions backend/tests/integration/happy_path/test_happy_path_round4.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ def test_happy_path_round4(game_service, five_player_game):

game = game_service.game_repository.get_game_by_id(game_id)

# 洗牌 AF列
# 洗牌 AG列
assert game.turn == 1
game.round = 4
game.players[0].score = 0
game.players[1].score = 5
game.players[2].score = 3
game.players[2].score = 4
game.players[3].score = 2
game.players[4].score = 4
game.players[0].spells = ["Magic 2", "Magic 3", "Magic 6", "Magic 7", "Magic 8"]
Expand All @@ -35,15 +35,15 @@ def test_happy_path_round4(game_service, five_player_game):

game_service.game_repository.update_game(game)

# A施法5 AG列
# A施法5 AH列
assert game.round == 4
assert game.turn == 1
assert game.current_player == 0
game_service.cast_spell(game_id, "A", "Magic 5")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("A").get_HP() == 5

# B施法5 AH列
# B施法5 AI列
assert game.turn == 2
assert game.current_player == 1
game_service.cast_spell(game_id, "B", "Magic 5")
Expand All @@ -53,32 +53,32 @@ def test_happy_path_round4(game_service, five_player_game):
assert len(game.find_player_by_id("B").spells) == 4
assert len(game.ladder) == 1

# B施法6 AI列
# B施法6 AJ列
game_service.cast_spell(game_id, "B", "Magic 6")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("C").get_HP() == 4
assert len(game.find_player_by_id("B").spells) == 3
assert len(game.ladder) == 2

# B施法6 AJ列
# B施法6 AK列
game_service.cast_spell(game_id, "B", "Magic 6")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("C").get_HP() == 3
assert len(game.find_player_by_id("B").spells) == 2
assert len(game.ladder) == 3

# B施法8 AK列
# B施法8 AL列
game_service.cast_spell(game_id, "B", "Magic 8")
game = game_service.game_repository.get_game_by_id(game_id)
assert len(game.find_player_by_id("B").spells) == 1
assert len(game.ladder) == 4

# B施法8, 玩家將手牌用完, 系統自動結算 AL列
# B施法8, 玩家將手牌用完, 系統自動結算 AM列
game_service.cast_spell(game_id, "B", "Magic 8")
game = game_service.game_repository.get_game_by_id(game_id)
assert game.find_player_by_id("A").score == 0
assert game.find_player_by_id("B").score == 8
assert game.find_player_by_id("C").score == 3
assert game.find_player_by_id("C").score == 4
assert game.find_player_by_id("D").score == 2
assert game.find_player_by_id("E").score == 4
# 勝利者出現,遊戲結束
Expand Down
8 changes: 4 additions & 4 deletions backend/tests/integration/test_game_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ def test_player_cast_spell(game_service, five_player_game):


def test_spell_fire_dragon(five_player_game, players, monkeypatch):
dice_results = [2, 3, 1, 3]
dice_results = [2]
dice_results_iter = iter(dice_results)
monkeypatch.setattr("domain.spell.roll_dice", lambda: next(dice_results_iter))
player1 = players[0]
Expand All @@ -107,9 +107,9 @@ def test_spell_fire_dragon(five_player_game, players, monkeypatch):

assert player1.get_HP() == init_HP1
assert player2.get_HP() == init_HP2 - dice_results[0]
assert player3.get_HP() == init_HP3 - dice_results[1]
assert player4.get_HP() == init_HP4 - dice_results[2]
assert player5.get_HP() == init_HP5 - dice_results[3]
assert player3.get_HP() == init_HP3 - dice_results[0]
assert player4.get_HP() == init_HP4 - dice_results[0]
assert player5.get_HP() == init_HP5 - dice_results[0]


def test_spell_dark_ghost(five_player_game, players):
Expand Down

0 comments on commit 0b51a4b

Please sign in to comment.