Pygame问题
本帖最后由 歌者文明清理员 于 2023-8-14 10:15 编辑为什么点击上面的两个棋子没有反应?
点左边就报错
pygame 2.5.0 (SDL 2.28.0, Python 3.11.4)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "e:\Python123\i\main.py", line 79, in <module>
board.push_san(move_str)
File "C:\Program Files\Python311\Lib\site-packages\chess\__init__.py", line 3105, in push_san
move = self.parse_san(san)
^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\site-packages\chess\__init__.py", line 3063, in parse_san
move = self.find_move(square(from_file, from_rank), to_square, promotion)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\site-packages\chess\__init__.py", line 2357, in find_move
raise IllegalMoveError(f"no matching legal move for {move.uci()} ({SQUARE_NAMES} -> {SQUARE_NAMES}) in {self.fen()}")
chess.IllegalMoveError: no matching legal move for e2d2 (e2 -> d2) in rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
GPT都没辙 了。也没有人工了。 ba21 发表于 2023-8-14 10:42
GPT都没辙 了。也没有人工了。
他们脚本也没设计可以看附件吧,话说歌者自己有GPT吧好像,但是之前我有个低级错误,重复段ctrl+v之后忘了换变量名导致死循环,交给GPT硬是没看出来,最后还是我自己一行行看发现的,GPT估计更多的是看代码逻辑问题 完整的代码? Ewan-Ahiouy 发表于 2023-8-14 12:01
完整的代码?
main.zip yinda_peng 发表于 2023-8-14 11:32
他们脚本也没设计可以看附件吧,话说歌者自己有GPT吧好像,但是之前我有个低级错误,重复段ctrl+v之后忘 ...
下载次数: 2,不可能全自动,还是有人会下下来,然后再交给GPT。
要解决问题是肯定可以解决的,问题是本人或其它人肯不肯花时间。
就像现在这情况,很多提问交给GPT然后给你个答案,基本连解答都没有,部份还是有解答看起来也很完美,再然后回答者花几秒加个粗上个色,10秒回复个问题,得个最佳。
歌者文明清理员 发表于 2023-8-14 12:02
main.zip
报错说缺少模块{:10_277:} Ewan-Ahiouy 发表于 2023-8-14 12:05
报错说缺少模块
pip install pygame
pip install chess 歌者文明清理员 发表于 2023-8-14 12:06
pip install pygame
pip install chess
好,我看看 ???第一次见到这样的报错 本帖最后由 鱼cpython学习者 于 2023-8-14 12:45 编辑
好复杂,总算给我解决了
首先是判断移动符合规则的部分,75行:
if move[:2] == 'abcdefgh' + '87654321':
假设moves里有一个"e2e3"和"d2d3",我要把棋子从e2移到e3,那么我的chosen就是e2,target就是e3,但是你在这里写成了判断target是否等于move[:2],也就是判断target是否是其他可以移动的棋子,例如d2,那么点其他位置判断不通过,点其他棋子才判断通过。但是显然不能把棋子从e2移到d2,就会报出描述的错误
修改为:
if move[:2] == 'abcdefgh'] + '87654321'] and move == 'abcdefgh' + '87654321':
修改后,点其他位置有反应,但是移动的是对面的棋子,然而我print了board,显示移动了白兵,那么就是你的摆棋子有问题,59~66行
for col in range(8):
for row in range(8):
piece = board.piece_at(square(col, row))
if piece:
color = not piece.color
piece_type = piece.piece_type
image = images[(color, piece_type)]
screen.blit(image, square_to_pos((row, col)))
这段代码,row是从0到7,所以棋盘的遍历是从下往上。然而你的square_to_pos似乎是反着来的,导致你的color也得是反着来的,所以有那个not piece.color
修改:
for col in range(8):
for row in range(8):
piece = board.piece_at(square(col, row))
if piece:
color = piece.color
piece_type = piece.piece_type
image = images[(color, piece_type)]
screen.blit(image, square_to_pos((7 - row, col)))
同理,下面的这个判断也要改,80行:
if 0 <= row < 8 and 0 <= col < 8 and board.piece_at(square(col, 7 - row)):
我不懂国际象棋,改的实在头晕脑涨
页:
[1]