首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过自定义类中的对象列表进行处理

通过自定义类中的对象列表进行处理
EN

Stack Overflow用户
提问于 2020-09-12 12:38:10
回答 1查看 62关注 0票数 2

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

我已经创建了图形类(典当、塔、跳投、运行、国王和皇后),现在我正在尝试添加一些功能,以便程序识别鼠标光标在图形上的时间,这就是我的问题所在。

显然,如果我手工为一个类的每个实例(例如16个典当)写一张支票,我就可以让它工作,如下所示:

注意,典当是我的类名

代码语言:javascript
复制
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')

这是乏味的,我想遍历所有现有典当的列表;

代码语言:javascript
复制
pawn_list = [pawn1, pawn2, pawn3, pawn4, pawn5, pawn6, pawn7, pawn8, pawn9, pawn10, pawn11, pawn12, pawn12, pawn14, pawn15, pawn16]

我的问题是我怎么做?到目前为止,我想出了以下几点:

代码语言:javascript
复制
    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

使用不同的变量名称也无助于我:

代码语言:javascript
复制
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(_))

感谢所有帮助,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-12 12:47:41

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

正确的说法是:

代码语言:javascript
复制
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))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63860412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档