歌者文明清理员 发表于 2023-8-14 10:14:23

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

ba21 发表于 2023-8-14 10:42:27

GPT都没辙 了。也没有人工了。

yinda_peng 发表于 2023-8-14 11:32:06

ba21 发表于 2023-8-14 10:42
GPT都没辙 了。也没有人工了。

他们脚本也没设计可以看附件吧,话说歌者自己有GPT吧好像,但是之前我有个低级错误,重复段ctrl+v之后忘了换变量名导致死循环,交给GPT硬是没看出来,最后还是我自己一行行看发现的,GPT估计更多的是看代码逻辑问题

Ewan-Ahiouy 发表于 2023-8-14 12:01:52

完整的代码?

歌者文明清理员 发表于 2023-8-14 12:02:30

Ewan-Ahiouy 发表于 2023-8-14 12:01
完整的代码?

main.zip

ba21 发表于 2023-8-14 12:03:17

yinda_peng 发表于 2023-8-14 11:32
他们脚本也没设计可以看附件吧,话说歌者自己有GPT吧好像,但是之前我有个低级错误,重复段ctrl+v之后忘 ...

下载次数: 2,不可能全自动,还是有人会下下来,然后再交给GPT。
要解决问题是肯定可以解决的,问题是本人或其它人肯不肯花时间。
就像现在这情况,很多提问交给GPT然后给你个答案,基本连解答都没有,部份还是有解答看起来也很完美,再然后回答者花几秒加个粗上个色,10秒回复个问题,得个最佳。

Ewan-Ahiouy 发表于 2023-8-14 12:05:15

歌者文明清理员 发表于 2023-8-14 12:02
main.zip

报错说缺少模块{:10_277:}

歌者文明清理员 发表于 2023-8-14 12:06:54

Ewan-Ahiouy 发表于 2023-8-14 12:05
报错说缺少模块

pip install pygame
pip install chess

Ewan-Ahiouy 发表于 2023-8-14 12:07:32

歌者文明清理员 发表于 2023-8-14 12:06
pip install pygame
pip install chess

好,我看看

cjjJasonchen 发表于 2023-8-14 12:08:00

???第一次见到这样的报错

鱼cpython学习者 发表于 2023-8-14 12:38:04

本帖最后由 鱼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]
查看完整版本: Pygame问题