通过自定义类中的对象列表进行排序

2024-06-28 19:20:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一盘棋,遇到了一个问题

我已经创建了图形类(典当、塔、跳线、跑步者、国王和王后),现在我正在尝试添加一些功能,以便程序能够识别鼠标光标何时位于图形上,这就是我的问题开始的地方

显然,如果我手工为类的每个实例(例如16 pawn)编写一个检查,我就可以使它工作,如下所示:

[注意典当是我的类名]

mouse_x, mouse_y = pygame.mouse.get_pos()
    if pawn1.start_x <=  mouse_x <= pawn1.start_x + 86 and pawn1.start_y + 84 >= mouse_y >= pawn1.start_y:
        print('Pawn 1 was clicked')

这是乏味的,我想反复浏览所有现有典当的列表

pawn_list = [pawn1, pawn2, pawn3, pawn4, pawn5, pawn6, pawn7, pawn8, pawn9, pawn10, pawn11, pawn12, pawn12, pawn14, pawn15, pawn16]

我的问题是我怎么做? 到目前为止,我已经得出以下结论:

    mouse_x, mouse_y = pygame.mouse.get_pos()
     
    for Pawn in pawn_list:
        if pawn_list[Pawn].start_x <= pawn_list[Pawn].start_x + 86 and pawn_list[Pawn].start_y + 84 >= mouse_y >= pawn_list[Pawn].start_y:
            print('The mouse is over the pawn no:' + str(Pawn))

但我得到了以下错误: TypeError: list indices must be integers or slices, not Pawn

使用不同的变量名也不能帮助我:

for _ in range(len(pawn_list)):
        if pawn_list[_].start_x <= pawn_list[_].start_x + 86 and pawn_list[_].start_y + 84 >= mouse_y >= pawn_list[_].start_y:
            print('The mouse is over the pawn no:' + str(_))

感谢所有的帮助,谢谢


Tags: andpos图形forgetifpygamestart
1条回答
网友
1楼 · 发布于 2024-06-28 19:20:04

您已经在遍历列表,那么为什么要再次从列表中获取典当索引呢?这可能是不正确的

正确的说法是:

for objPawn in pawn_list:
        if objPawn.start_x <= objPawn.start_x + 86 and objPawn.start_y + 84 >= mouse_y >= objPawn.start_y:
            print('The mouse is over the pawn no:' + str(Pawn))

相关问题 更多 >