gpt4 book ai didi

python - 我有一个巨大的 If 语句列表,想清理我的代码

转载 作者:太空宇宙 更新时间:2023-11-03 14:38:39 24 4
gpt4 key购买 nike

这是学习如何编码的第 4 天,我对一些基础知识仍然有点困惑。它有 pygame,pygame.text,所以基本上我的代码看起来像这样。

#Mouse click to get mouse Position
if event.type == pygame.MOUSEBUTTONDOWN:
if gamestage == 0 and gamestage <= 1:
gamestage += 1
mx, my =pygame.mouse.get_pos()
#Total rectangle dimentions mx>806 and mx<889 and my>890 and my<920
#Clickable squares for Shots and Team
#Use print function if bug arises
if mx>848 and mx<889 and my>890 and my<920:

#numberonscreen_x=859
#numberonscreen_y=905
n+=1
print(n)
n=str(n)
text_surface, rect = gamefont.render(n,(4, 8, 18))
n=int(n)
screen.blit(board,(0,0))
pygame.display.flip()

if mx>806 and mx<848 and my>890 and my<920:
print("Pass")
if mx>764 and mx<806 and my>890 and my<920:
print("Pass")
if mx>722 and mx<764 and my>890 and my<920:
print("Pass")
if mx>680 and mx<722 and my>890 and my<920:
print("Pass")
if mx>638 and mx<680 and my>890 and my<920:
print("Pass")
if mx>596 and mx<638 and my>890 and my<920:
print("Pass")
if mx>554 and mx<596 and my>890 and my<920:
print("Pass")
if mx>512 and mx<554 and my>890 and my<920:
print("Pass")
if mx>470 and mx<512 and my>890 and my<920:
print("Pass")
if mx>428 and mx<470 and my>890 and my<920:
print("Pass")
if mx>386 and mx<428 and my>890 and my<920:
print("Pass")
if mx>344 and mx<386 and my>890 and my<920:
print("Pass")
if mx>302 and mx<344 and my>890 and my<920:
print("Pass")
if mx>260 and mx<302 and my>890 and my<920:
print("Pass")
if mx>218 and mx<260 and my>890 and my<920:
print("Pass")
if mx>176 and mx<218 and my>890 and my<920:
print("Pass")
if mx>134 and mx<176 and my>890 and my<920:
print("Pass")
if event.type == pygame.MOUSEBUTTONUP:
if gamestage != 0:
gamestage = 0

#Press 0 set given on screen button to zero
if event.type == pygame.KEYDOWN and event.key == pygame.K_0:
mx, my =pygame.mouse.get_pos()
if mx>848 and mx<889 and my>905 and my<920:
n=0
print(n)
if mx>806 and mx<848 and my>905 and my<920:
print("Pass1")
if mx>764 and mx<806 and my>905 and my<920:
print("Pass1")
if mx>722 and mx<764 and my>905 and my<920:
print("Pass1")
if mx>680 and mx<722 and my>905 and my<920:
print("Pass1")
if mx>638 and mx<680 and my>905 and my<920:
print("Pass1")
if mx>596 and mx<638 and my>905 and my<920:
print("Pass1")
if mx>554 and mx<596 and my>905 and my<920:
print("Pass1")
if mx>512 and mx<554 and my>905 and my<920:
print("Pass1")
if mx>470 and mx<512 and my>905 and my<920:
print("Pass1")
if mx>428 and mx<470 and my>905 and my<920:
print("Pass1")
if mx>386 and mx<428 and my>905 and my<920:
print("Pass1")
if mx>344 and mx<386 and my>905 and my<920:
print("Pass1")
if mx>302 and mx<344 and my>905 and my<920:
print("Pass")
if mx>260 and mx<302 and my>905 and my<920:
print("Pass1")
if mx>218 and mx<260 and my>905 and my<920:
print("Pass1")
if mx>176 and mx<218 and my>905 and my<920:
print("Pass1")
if mx>134 and mx<176 and my>905 and my<920:
print("Pass1")

这看起来真的很糟糕。我正在制作一个垄断游戏,我正在为每个属性添加 2 个屏幕按钮。这意味着将有超过 100 组不同的 (mx,my)。仅基于查看其他人的代码,它看起来非常低效。由于看板中将有许多不同的可点击部分,我需要找到一种方法来使其更高效且更易于阅读。

虽然有人“只做它”会很好,但我更希望得到带有大量链接的响应。使用这种方法,我还需要 100 个不同名称的 text_surfaces,100 个不同的变量 n。我的思维过程是制作一些东西来存储所有的 n,text_surfaces 并召回它。但是我真的不知道该怎么做,也不知道它“导入自”是否可行。

最佳答案

您可以初始化一个 mx 范围数组:

mx_ranges = [
(806,848),
(764,806),
(722,764),
(680,722),
(638,680),
(596,638),
(554,596),
(512,554),
(470,512),
(428,470),
(386,428),
(344,386),
(302,344),
(260,302),
(218,260),
(176,218),
(134,176),
]

然后使用这个函数代替那些“大if block ”中的每一个:

def check_mx_range(mx, min_my, max_my, result):
for mx_range in mx_ranges:
if mx_range[0] < mx < mx_range[1] and min_my < my < max_my:
print(result)
return True
return False

关于python - 我有一个巨大的 If 语句列表,想清理我的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55334410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com