鱼C论坛

 找回密码
 立即注册
查看: 862|回复: 10

[已解决]Pygame问题

[复制链接]
发表于 2023-8-14 10:14:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 歌者文明清理员 于 2023-8-14 10:15 编辑

main.zip (19.73 KB, 下载次数: 7)

为什么点击上面的两个棋子没有反应?

sr1.gif

点左边就报错

screen_record.gif
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[from_square]} -> {SQUARE_NAMES[to_square]}) 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
最佳答案
2023-8-14 12:38:04
本帖最后由 鱼cpython学习者 于 2023-8-14 12:45 编辑

好复杂,总算给我解决了
首先是判断移动符合规则的部分,75行:
if move[:2] == 'abcdefgh'[col] + '87654321'[row]:
假设moves里有一个"e2e3"和"d2d3",我要把棋子从e2移到e3,那么我的chosen就是e2,target就是e3,但是你在这里写成了判断target是否等于move[:2],也就是判断target是否是其他可以移动的棋子,例如d2,那么点其他位置判断不通过,点其他棋子才判断通过。但是显然不能把棋子从e2移到d2,就会报出描述的错误
修改为:
if move[:2] == 'abcdefgh'[chosen[1]] + '87654321'[chosen[0]] and move[2:] == 'abcdefgh'[col] + '87654321'[row]:
修改后,点其他位置有反应,但是移动的是对面的棋子,然而我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)):
我不懂国际象棋,改的实在头晕脑涨
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-14 10:42:27 | 显示全部楼层
GPT都没辙 了。也没有人工了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-14 11:32:06 | 显示全部楼层
ba21 发表于 2023-8-14 10:42
GPT都没辙 了。也没有人工了。

他们脚本也没设计可以看附件吧,话说歌者自己有GPT吧好像,但是之前我有个低级错误,重复段ctrl+v之后忘了换变量名导致死循环,交给GPT硬是没看出来,最后还是我自己一行行看发现的,GPT估计更多的是看代码逻辑问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-14 12:01:52 | 显示全部楼层
完整的代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-14 12:02:30 | 显示全部楼层

main.zip
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

下载次数: 2,不可能全自动,还是有人会下下来,然后再交给GPT。
要解决问题是肯定可以解决的,问题是本人或其它人肯不肯花时间。
就像现在这情况,很多提问交给GPT然后给你个答案,基本连解答都没有,部份还是有解答看起来也很完美,再然后回答者花几秒加个粗上个色,10秒回复个问题,得个最佳。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-14 12:05:15 | 显示全部楼层

报错说缺少模块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-14 12:06:54 | 显示全部楼层

pip install pygame
pip install chess
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-14 12:07:32 | 显示全部楼层
歌者文明清理员 发表于 2023-8-14 12:06
pip install pygame
pip install chess

好,我看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-14 12:08:00 | 显示全部楼层
???第一次见到这样的报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-14 12:38:04 | 显示全部楼层    本楼为最佳答案   
本帖最后由 鱼cpython学习者 于 2023-8-14 12:45 编辑

好复杂,总算给我解决了
首先是判断移动符合规则的部分,75行:
if move[:2] == 'abcdefgh'[col] + '87654321'[row]:
假设moves里有一个"e2e3"和"d2d3",我要把棋子从e2移到e3,那么我的chosen就是e2,target就是e3,但是你在这里写成了判断target是否等于move[:2],也就是判断target是否是其他可以移动的棋子,例如d2,那么点其他位置判断不通过,点其他棋子才判断通过。但是显然不能把棋子从e2移到d2,就会报出描述的错误
修改为:
if move[:2] == 'abcdefgh'[chosen[1]] + '87654321'[chosen[0]] and move[2:] == 'abcdefgh'[col] + '87654321'[row]:
修改后,点其他位置有反应,但是移动的是对面的棋子,然而我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荣誉 +5 鱼币 +5 贡献 +3 收起 理由
歌者文明清理员 + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 19:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表