游戏可以运行
This commit is contained in:
@@ -33,6 +33,7 @@ class Game:
|
||||
self.player_faction = None
|
||||
self.ai_faction = None
|
||||
self.custom_deck = None
|
||||
self.player_goes_first = True
|
||||
self._load_custom_deck()
|
||||
self.custom_deck = None
|
||||
|
||||
@@ -112,6 +113,16 @@ class Game:
|
||||
self.player_faction = fid
|
||||
self.custom_deck = None
|
||||
self._load_custom_deck()
|
||||
self.state = "turn_order"
|
||||
|
||||
# --- State: Turn Order ---
|
||||
|
||||
def _handle_click_turn_order(self, pos):
|
||||
if "first" in self.ui.menu_buttons and self.ui.menu_buttons["first"].collidepoint(pos):
|
||||
self.player_goes_first = True
|
||||
self.state = "deck_select"
|
||||
elif "second" in self.ui.menu_buttons and self.ui.menu_buttons["second"].collidepoint(pos):
|
||||
self.player_goes_first = False
|
||||
self.state = "deck_select"
|
||||
|
||||
# --- State: Deck Select ---
|
||||
@@ -184,16 +195,30 @@ class Game:
|
||||
self.ui.deck_builder_cards.remove(cid)
|
||||
|
||||
def _start_game(self):
|
||||
from card_game.config import FIRST_HAND_SIZE, SECOND_HAND_SIZE
|
||||
self.battlefield = Battlefield(self.player_faction, self.ai_faction)
|
||||
if self.player_goes_first:
|
||||
self.battlefield.player.start_game(FIRST_HAND_SIZE)
|
||||
self.battlefield.ai.start_game(SECOND_HAND_SIZE)
|
||||
else:
|
||||
self.battlefield.player.start_game(SECOND_HAND_SIZE)
|
||||
self.battlefield.ai.start_game(FIRST_HAND_SIZE)
|
||||
if self.custom_deck:
|
||||
self.battlefield.player.deck.build(self.custom_deck)
|
||||
hand_size = FIRST_HAND_SIZE if self.player_goes_first else SECOND_HAND_SIZE
|
||||
self.battlefield.player.hand = []
|
||||
for _ in range(4):
|
||||
for _ in range(hand_size):
|
||||
self.battlefield.player.draw_card()
|
||||
self.battlefield.start_game()
|
||||
self.battlefield.turn_number = 1
|
||||
self.battlefield.frontline_controller = None
|
||||
self.battlefield.current_turn = "player"
|
||||
self.battlefield.player.start_turn(1)
|
||||
self.ai_player = AIPlayer(self.battlefield)
|
||||
self.ui.clear_selection()
|
||||
self.state = "playing"
|
||||
if self.player_goes_first:
|
||||
self.state = "playing"
|
||||
else:
|
||||
self._start_ai_turn()
|
||||
|
||||
# --- State: Playing ---
|
||||
|
||||
@@ -267,7 +292,7 @@ class Game:
|
||||
opponent = self.battlefield.get_opponent(player)
|
||||
|
||||
if unit.zone == "support":
|
||||
if unit.can_attack and not unit.has_attacked:
|
||||
if unit.can_attack and not unit.has_attacked and player.can_afford_attack(unit):
|
||||
self.ui.selected_unit = unit
|
||||
self.ui.target_mode = "attack"
|
||||
targets = list(opponent.get_frontline_units())
|
||||
@@ -282,7 +307,7 @@ class Game:
|
||||
self.ui.selected_unit = unit
|
||||
self.ui.target_mode = "move"
|
||||
elif unit.zone == "frontline":
|
||||
if unit.can_attack and not unit.has_attacked:
|
||||
if unit.can_attack and not unit.has_attacked and player.can_afford_attack(unit):
|
||||
self.ui.selected_unit = unit
|
||||
self.ui.target_mode = "attack"
|
||||
targets = list(opponent.get_frontline_units())
|
||||
@@ -417,8 +442,7 @@ class Game:
|
||||
y = zone_y + ZONE_HEIGHT // 2
|
||||
else:
|
||||
x = _frontline_slot_x(unit.slot, n_fl) + FIELD_CARD_WIDTH // 2
|
||||
zone_y = FRONTLINE_Y if is_ai else (FRONTLINE_Y + half)
|
||||
y = zone_y + half // 2
|
||||
y = FRONTLINE_Y + ZONE_HEIGHT // 2
|
||||
return x, y
|
||||
|
||||
try:
|
||||
@@ -518,6 +542,8 @@ class Game:
|
||||
def _handle_click(self, pos):
|
||||
if self.state == "menu":
|
||||
self._handle_click_menu(pos)
|
||||
elif self.state == "turn_order":
|
||||
self._handle_click_turn_order(pos)
|
||||
elif self.state == "deck_select":
|
||||
self._handle_click_deck_select(pos)
|
||||
elif self.state == "deck_build":
|
||||
@@ -537,6 +563,8 @@ class Game:
|
||||
def _draw(self):
|
||||
if self.state == "menu":
|
||||
self.ui.draw_menu()
|
||||
elif self.state == "turn_order":
|
||||
self.ui.draw_turn_order(self.player_faction)
|
||||
elif self.state == "deck_select":
|
||||
self.ui.draw_deck_select(self.player_faction)
|
||||
elif self.state == "deck_build":
|
||||
|
||||
Reference in New Issue
Block a user