From 3df3e4f5606c0bcd2c4fe9f9b6fd8efe6fdeb4fd Mon Sep 17 00:00:00 2001 From: hefanyang Date: Sun, 24 May 2026 12:40:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=B8=E6=88=8F=E5=8F=AF=E4=BB=A5=E8=BF=90?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- card_game/__pycache__/ai.cpython-312.pyc | Bin 10981 -> 11061 bytes card_game/__pycache__/main.cpython-312.pyc | Bin 33998 -> 34040 bytes card_game/ai.py | 15 ++++++++------- card_game/main.py | 7 ++++--- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/card_game/__pycache__/ai.cpython-312.pyc b/card_game/__pycache__/ai.cpython-312.pyc index c12a5201af4c55aa7a7dfdab664119839410fa4a..5ed5eadfe97906dab03f8baac660a44ebaf328c8 100644 GIT binary patch delta 1143 zcmbu7OH30%9L9IH-R&-=w1qxkw@piHA5AhjZ0!1v361O!PGYe|; zU_!L`k1?V~5>Ez0B#okp2NMrOz1WmkARI8!GX!s*oD~UeLge5i``elMW+vbFpZRg} z)hXR)oi2kSZRuKe-`;6mBNAIrTnL8x%k~EbgQ3=gL*17KdqRGs zma`m?o4rdNMQt`{$Ue<@vARzOMzg4LVHK2S+i3E;m}vrolgqeD&X<{xVROnRGnkQN z%p9cdvfXqq)lIj#$RZZAeFkVUn^6wr=eUosWAx|_H6?3^qLK6wvtm_gSQ9`usTcGl zy*`$?P*%jc-X|&(P^GKz4OvkhIoV{u+{PwEVY*KQoyDr>&Z{QT`gTN(uKZbUSC&JE zMTbOKb(^5tWMmv_3Zso+Fl3Td{AMav&iGpfyPL=Bv9(w$VXXak&bsuRS!p@h)FdHY zilz-{QZ<>|CMDv)WAUIZayg8c57SXJYR3G3Smjdfq*>(ye5$ss)rzzWA;#{J!qd&< zognhb?By+bFk`)iI-xpu%F<1)GOQ=KM!i8vUwzzHpYSyT%6o(&@Fedhp-Xs(FuW7) z5c@%>-K z_9#cNkRvYHofEn7(nE9h+OgX2WMGYZ8|Umz(b{=~DQR%RKKoJDP0Xwo#_rg!Bh&!~ zhuP(D`MvB1T1_}hyZjaGtVd1wvE1eNv7gLpzb{tjP^-|5*fG~(6?y>oJxgdDq@641 wF?1C?LleLj9$?QX6*&tHg+VkHdt3M%FHb`E-rhx9EpDqW)#N=kKp0|;^!3IG5A delta 1103 zcmbV~T}YEr7{}l9e(imy+jJl9^G%)eW0FiU35BT9a>*>#Dve-n%b9NCgl*B+J4%r1 zLdx+#Vjno@DvZcR*o{(N6w*yY$qb2vyf(b*ChBY=ZV(|IIRA5=^FPnS^W&UXT^na* zA7nBqfroQI8QwP|b0eee%s?nI*klh5g(5b`aPOs|zDPV~bB5x!^c8fYgq&yKo4g!! z$`;c58%`;^nFf&xGf=7$C@L(&tFf9D8Iiq)>n0?kB$^N<4&olyOZF4Jq}Pm3Igty? zVO^z$nPN5gD>#_b@Eu%|9JA0wg2z4|Rm4@<&ay+~gJ_g^MoyF4aY7oA$2Hq~>`H=E zp$qFsi?q1DrbW7wg9wof>vwW?*B~v@qVys)jkeDaF_y{Y8*}|VR&wA|Ge{3dENYl5 zE0rLc5E14~swWr*ljn#jR;0nM&au=)(*^kA-te7;`0@gLHXkq|%kv~bNxqkm?!wpZ z5gr0%)#&fIDuIcS<7iAHGJAQ#e=>0SeHJhd8tK1WfhdHmR9d5so2g+K*B&Z?ZC5LW~&{cPo?anft igQ>a@8c*}qr-*4_v|BweTR*HgPa@kEk=1B1zV-)JRtf?D diff --git a/card_game/__pycache__/main.cpython-312.pyc b/card_game/__pycache__/main.cpython-312.pyc index 914cab7d95cd3a6d850708a27fb1a3f552305ebb..3353f0d13896183865648b829780be5454525b32 100644 GIT binary patch delta 453 zcmX@t$@HU>iT5-wFBbz49B&ZH+PsnXi!;*!mdSFItG{T5hUSGK*VYIGGsN zZeEaaiiz>c=IrcE%#05<%jHKiGcho2t}e=BWaQiYs#ubVTZ{>4LJKgk8W<)A=;&{@ zEh}PTl;6Ce;vXZU?&kGXy{wETn{6Aqm{=894L-SSKGSrOk*|b<(U0*X1DN`dH+gl7 FG5~fxn8*MC delta 450 zcmey-$#kxhiT5-wFBbz4OsyBnYTL;B#hG!zWO)ne$vMR)leP3kCjSbNoLp}qyLq;Y zE+ZrB?Zi0-At0(_=5tp1- z!oPBIncEni-|mw)!jTM@AcTP%9dJDlA4!tOE5jPB)+(`pdi1f zB)&8+v!wVIXJ&DHQDRmKWtMFUwnB5wN)- zEI!?CqTLl?<;eox`y8w<%3EKSx4kT7H-Y^IR`n3U1)M7^F36i)5iq@>p+A9TI{QTS zs{*PYcsEPsHlNBk#l(1d^VIB3%#8Opd*nwmGyP}WytF8fk&$<^NQop9qv&S6veitCa+_~e x{9|O)*?hCAmzB|Yb9zG;6RSL{!6&E9- enemy support > capital + # Frontline units: non-archer attacks enemy support only, archer attacks all for unit in ai.get_frontline_units(): if not unit.can_attack or unit.has_attacked or not ai.can_afford_attack(unit): continue - enemy_front = player.get_frontline_units() - enemy_support = player.get_support_units() - all_enemy = enemy_front + enemy_support - if all_enemy: - killable = [u for u in all_enemy if u.current_hp <= unit.get_effective_attack()] + if unit.is_ranged(): + targets = player.get_frontline_units() + player.get_support_units() + else: + targets = player.get_support_units() + if targets: + killable = [u for u in targets if u.current_hp <= unit.get_effective_attack()] if killable: target = min(killable, key=lambda u: u.current_hp) else: - target = max(all_enemy, key=lambda u: u.get_effective_attack()) + target = max(targets, key=lambda u: u.get_effective_attack()) self.battlefield.resolve_attack(unit, target) actions.append(("attack_unit", unit, target)) else: diff --git a/card_game/main.py b/card_game/main.py index 63a4700..3706aeb 100644 --- a/card_game/main.py +++ b/card_game/main.py @@ -296,8 +296,8 @@ class Game: self.ui.selected_unit = unit self.ui.target_mode = "attack" targets = list(opponent.get_frontline_units()) - targets.extend(opponent.get_support_units()) if unit.is_ranged(): + targets.extend(opponent.get_support_units()) targets.append(("capital", opponent)) self.ui.valid_targets = targets return @@ -310,9 +310,10 @@ class Game: 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()) - targets.extend(opponent.get_support_units()) + targets = list(opponent.get_support_units()) targets.append(("capital", opponent)) + if unit.is_ranged(): + targets.extend(opponent.get_frontline_units()) self.ui.valid_targets = targets def _handle_deploy_click(self, pos):