游戏可以运行
This commit is contained in:
@@ -131,6 +131,30 @@ class UI:
|
||||
inst = self.font_sm.render("选择你的国家开始游戏", True, INK_WASH_3)
|
||||
self.screen.blit(inst, (WINDOW_WIDTH // 2 - inst.get_width() // 2, WINDOW_HEIGHT - 60))
|
||||
|
||||
def draw_turn_order(self, player_faction):
|
||||
ink_style.blit_paper_background(self.screen)
|
||||
ink_style.blit_mountains(self.screen)
|
||||
faction = FACTIONS[player_faction]
|
||||
title = self.font_xl.render("选择先后手", True, FACTION_COLORS[player_faction])
|
||||
self.screen.blit(title, (WINDOW_WIDTH // 2 - title.get_width() // 2, 100))
|
||||
faction_text = self.font_lg.render(f"你的国家:{faction['name']}", True, PAPER_WHITE)
|
||||
self.screen.blit(faction_text, (WINDOW_WIDTH // 2 - faction_text.get_width() // 2, 180))
|
||||
|
||||
self.menu_buttons = {}
|
||||
for key, lbl, desc, y in [
|
||||
("first", "先手", "先行动,起始4张手牌", 280),
|
||||
("second", "后手", "后行动,起始5张手牌", 370),
|
||||
]:
|
||||
btn_w, btn_h = 300, 70
|
||||
rect = pygame.Rect(WINDOW_WIDTH // 2 - btn_w // 2, y, btn_w, btn_h)
|
||||
ink_style.draw_ink_rect(self.screen, rect, FACTION_COLORS[player_faction], alpha=200)
|
||||
pygame.draw.rect(self.screen, PAPER_WHITE, rect, 2, border_radius=5)
|
||||
t = self.font_lg.render(lbl, True, PAPER_WHITE)
|
||||
self.screen.blit(t, (rect.centerx - t.get_width() // 2, y + 10))
|
||||
d = self.font_sm.render(desc, True, LIGHT_GRAY)
|
||||
self.screen.blit(d, (rect.centerx - d.get_width() // 2, y + 45))
|
||||
self.menu_buttons[key] = rect
|
||||
|
||||
def draw_deck_select(self, player_faction):
|
||||
ink_style.blit_paper_background(self.screen)
|
||||
ink_style.blit_mountains(self.screen)
|
||||
@@ -423,27 +447,23 @@ class UI:
|
||||
|
||||
def _draw_frontline(self, battlefield):
|
||||
y = FRONTLINE_Y
|
||||
half = ZONE_HEIGHT // 2
|
||||
|
||||
# Center divider line
|
||||
pygame.draw.line(self.screen, INK_WASH_3, (0, y + half), (WINDOW_WIDTH, y + half), 1)
|
||||
|
||||
lbl = self.font_sm.render("前 线", True, (ZHU_HONG[0], ZHU_HONG[1], ZHU_HONG[2]))
|
||||
self.screen.blit(lbl, (WINDOW_WIDTH // 2 - lbl.get_width() // 2, y + 3))
|
||||
|
||||
n_fl = MAX_FRONTLINE_SLOTS
|
||||
uy = y + (ZONE_HEIGHT - FIELD_CARD_HEIGHT) // 2
|
||||
|
||||
for i, unit in enumerate(battlefield.ai.frontline):
|
||||
if unit is None:
|
||||
continue
|
||||
ux = _frontline_slot_x(i, n_fl)
|
||||
uy = y + (half - FIELD_CARD_HEIGHT) // 2
|
||||
self._draw_field_unit(unit, ux, uy, False, battlefield.ai)
|
||||
|
||||
for i, unit in enumerate(battlefield.player.frontline):
|
||||
if unit is None:
|
||||
continue
|
||||
ux = _frontline_slot_x(i, n_fl)
|
||||
uy = y + half + (half - FIELD_CARD_HEIGHT) // 2
|
||||
self._draw_field_unit(unit, ux, uy, True, battlefield.player)
|
||||
|
||||
def _draw_capital(self, player, zone_y):
|
||||
@@ -659,10 +679,9 @@ class UI:
|
||||
ux = _support_slot_x(unit.slot)
|
||||
uy = zone_y + (zone_h - FIELD_CARD_HEIGHT) // 2
|
||||
else:
|
||||
half = ZONE_HEIGHT // 2
|
||||
n_fl = MAX_FRONTLINE_SLOTS
|
||||
zone_y = FRONTLINE_Y if is_ai else (FRONTLINE_Y + half)
|
||||
zone_h = half
|
||||
zone_y = FRONTLINE_Y
|
||||
zone_h = ZONE_HEIGHT
|
||||
ux = _frontline_slot_x(unit.slot, n_fl)
|
||||
uy = zone_y + (zone_h - FIELD_CARD_HEIGHT) // 2
|
||||
s = pygame.Surface((FIELD_CARD_WIDTH, FIELD_CARD_HEIGHT), pygame.SRCALPHA)
|
||||
@@ -681,12 +700,11 @@ class UI:
|
||||
|
||||
# Move highlights
|
||||
if self.target_mode == "move":
|
||||
half = ZONE_HEIGHT // 2
|
||||
n_fl = MAX_FRONTLINE_SLOTS
|
||||
for i, slot in enumerate(battlefield.player.frontline):
|
||||
if slot is None:
|
||||
sx = _frontline_slot_x(i, n_fl)
|
||||
sy = FRONTLINE_Y + half + (half - FIELD_CARD_HEIGHT) // 2
|
||||
sy = FRONTLINE_Y + (ZONE_HEIGHT - FIELD_CARD_HEIGHT) // 2
|
||||
s = pygame.Surface((FIELD_CARD_WIDTH, FIELD_CARD_HEIGHT), pygame.SRCALPHA)
|
||||
s.fill((100, 180, 220, 50))
|
||||
self.screen.blit(s, (sx, sy))
|
||||
@@ -717,7 +735,7 @@ class UI:
|
||||
n_fl = MAX_FRONTLINE_SLOTS
|
||||
zones = [
|
||||
(battlefield.player.support_line, PLAYER_SUPPORT_Y, ZONE_HEIGHT, battlefield.player, "support"),
|
||||
(battlefield.player.frontline, FRONTLINE_Y + half, half, battlefield.player, "frontline"),
|
||||
(battlefield.player.frontline, FRONTLINE_Y, ZONE_HEIGHT, battlefield.player, "frontline"),
|
||||
(battlefield.ai.support_line, ENEMY_SUPPORT_Y, ZONE_HEIGHT, battlefield.ai, "support"),
|
||||
(battlefield.ai.frontline, FRONTLINE_Y, half, battlefield.ai, "frontline"),
|
||||
]
|
||||
@@ -750,12 +768,11 @@ class UI:
|
||||
|
||||
def get_frontline_slot_at(self, pos, player):
|
||||
mx, my = pos
|
||||
half = ZONE_HEIGHT // 2
|
||||
n_fl = MAX_FRONTLINE_SLOTS
|
||||
zone_y = FRONTLINE_Y + half
|
||||
zone_y = FRONTLINE_Y
|
||||
for i, slot in enumerate(player.frontline):
|
||||
sx = _frontline_slot_x(i, n_fl)
|
||||
sy = zone_y + (half - FIELD_CARD_HEIGHT) // 2
|
||||
sy = zone_y + (ZONE_HEIGHT - FIELD_CARD_HEIGHT) // 2
|
||||
rect = pygame.Rect(sx, sy, FIELD_CARD_WIDTH, FIELD_CARD_HEIGHT)
|
||||
if rect.collidepoint(mx, my):
|
||||
return i
|
||||
|
||||
Reference in New Issue
Block a user