我正在嘗試創建一個游戲。我有一個連續移動的圓圈串列。如果用戶單擊圓圈之一,我想列印“是”。我嘗試使用“if in”條件,但它不起作用。請幫我
import pygame
import random
pygame.init()
blanc = (255, 255, 255)
vert = (0, 255, 0)
Taille =[500, 500]
fenetre = pygame.display.set_mode(Taille)
pygame.display.set_caption("bienvenue!")
termine = False
horloge = pygame.time.Clock()
liste_objets= []
for i in range(100):
x = random.randrange(0,450)
y = random.randrange(0,495)
liste_objets.append([x,y])
while termine == False:
fenetre.fill(blanc)
for i in liste_objets:
i[0] = 1
pygame.draw.circle(fenetre, vert, i, 5)
if i[0] > 500:
i[0] = 0
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
termine = True
if event.type == pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
if pos in liste_objets:
print("yes")
pygame.display.flip()
horloge.tick(200)
pygame.quit()
uj5u.com熱心網友回復:
當你使用in條件時,你必須確保你有正確的型別。您的串列包含其他串列物件,而pygame.mouse.get_pos()回傳一個元組物件 list != tuple 即使元素相同。
一個更關鍵的問題是你必須檢查你的滑鼠是否在一個圓圈中,而不是在某個點。
要檢查一個點是否在圓內,您必須找到從該點到圓心的距離,并檢查該距離是否小于圓的半徑。
例如:
for obj in liste_objets:
if ((obj[0] - pos[0])**2 (obj[1] - pos[1])**2)**0.5 <= 5:
print("yes")
((obj[0] - pos[0])**2 (obj[1] - pos[1])**2)**0.5計算obj到pos(畢達哥拉斯定理)的距離。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/374981.html
下一篇:Pythonkivy更新游戲分數
