Python 相似位置检测
我是一个想做一个简单的Pygame作为学校作业的Python noob。玩家在x轴和y轴上控制球棒。游戏的目的是一个接一个地捕捉飞来飞去的蚊子。蚊子的位置是随机的,它在屏幕上移动 我的问题是如何检测蝙蝠何时捕捉蚊子Python 相似位置检测,python,pygame,Python,Pygame,我是一个想做一个简单的Pygame作为学校作业的Python noob。玩家在x轴和y轴上控制球棒。游戏的目的是一个接一个地捕捉飞来飞去的蚊子。蚊子的位置是随机的,它在屏幕上移动 我的问题是如何检测蝙蝠何时捕捉蚊子 def crash(): global mosquito_y if bat_y < (mosquito_y + mosquito_size): if ((mosquito_x < bat_x < (mosquito_x + mosqu
def crash():
global mosquito_y
if bat_y < (mosquito_y + mosquito_size):
if ((mosquito_x < bat_x < (mosquito_x + mosquito_size)) or
((bat_x + bat_width) > mosquito_x and (bat_x + bat_width) < (mosquito_x + mosquito_size))):
mosquito_y += 1000
我试过这个代码,但它在整个y轴捕捉蚊子,而不仅仅是蝙蝠的y轴位置
有没有办法解决这个问题
这是我所有的密码。很抱歉用挪威语发表评论:
import pygame
import random
"""Variablene som definerer vinduet og bakgrunnsbilde"""
sc_width = 800 # variabler for skjermstørrelsen
sc_height = 600
background = pygame.image.load("swamp.jpg")
"""Initialiserer pygame og oppretter spillervinduet samt tittel"""
pygame.init() # starter spillet
screen = pygame.display.set_mode((sc_width, sc_height)) # setter skjermstørrelsen
pygame.display.set_caption("Myggjakten") # setter tittelen på spillet
"""Variablene til flaggermusen i spillet"""
bat_img = pygame.image.load("Bat.png") # laster inn bilde
bat_img = pygame.transform.scale(bat_img, (100, 50)) # skalerer bildet, høyde og bredde
bat_x = 300
bat_y = 470
bat_x_change = 0
bat_y_change = 0
bat_width = 50 # variable som inneholder halvparten av bredden til flaggermusen
bat_height = 25
"""Variablene til myggen i spillet"""
mosquito_img = pygame.image.load("mosquito.png") # laster inn bilde
mosquito_img = pygame.transform.scale(mosquito_img, (50, 25)) # skalerer bildet, høyde og bredde
mosquito_x = random.randint(0, 800)
mosquito_y = random.randint(50, 400)
mosquito_x_change = 0.4
mosquito_y_change = 0.4
mosquito_size = 25 # variabel som inneholder halve bredden til myggen
def crash():
"""This code was a suggestion, but dosent seem to work"""
global mosquito_y
if (mosquito_y + mosquito_size) in range(bat_y + bat_height):
if (bat_x + bat_width) in range(mosquito_x + mosquito_size):
mosquito_y += 1000
"""poengberegning"""
point = 0
"""Loopen som kjører spillet helt til det enten er game over, vinn eller brukeren lukker vinduet"""
running = True
while running:
# evig loop som kjører programmet helt til running till false
for event in pygame.event.get(): # henter listen med eventer fra pygame
if event.type == pygame.QUIT: # ved kommando quit i programmet
running = False # running settes til false og programmet avsluttes
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT: # når brukeren trykker venstre piltast
bat_x_change = -1 # blir x-verdien 0,25 mindre per frame
if event.key == pygame.K_UP: # samme som over, men her blir y-verdien endre på pil opp
bat_y_change = -1 # hastigheten den bevegers seg i y-aksen
if event.key == pygame.K_RIGHT: # samme som over, men for x til høyre
bat_x_change = 1
if event.key == pygame.K_DOWN: # samme som over, men for y nedover
bat_y_change = 1
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_UP \
or event.key == pygame.K_DOWN: # når tastene definert over ikke trykkes lenger
bat_x_change = 0 # stopper bevegelsen
bat_y_change = 0
"""setter opp grenser for flaggermusen så den ikke får flydd utenfor skjermen"""
bat_x += bat_x_change # Setter maksverdier for x og y for å hindre at bat kan fly utenfor spillskjermen
if bat_x <= 0:
bat_x = 0
elif bat_x >= 700: # hvis bat_x er større enn 700 eller mindre enn o settes posisjonen til 700 eller o
bat_x = 700
bat_y += bat_y_change
if bat_y <= 0: # hvis y-verdien (opp og ned) blir mindre enn 0 eller større enn 550 settes posisjonen til 0 eller
# 550
bat_y = 0
elif bat_y >= 550:
bat_y = 550
"""Setter grenser for myggen så den beveger seg i ulike retninger, men aldri utenfor skjermen"""
mosquito_x += mosquito_x_change # Setter maksverdier for x og y for å hindre at bat kan fly utenfor spillskjermen
mosquito_y += mosquito_y_change
if mosquito_x <= 0:
mosquito_x_change = 0.4
elif mosquito_x >= 770: # hvis MOSQUITO_x er større enn 500 eller mindre enn o settes posisjonen til 700 eller o
mosquito_x_change = -0.4
elif mosquito_y <= 0:
mosquito_y_change = 0.3
elif mosquito_y >= 570:
mosquito_y_change = -0.3
"""Oppdaterer spillvinduet med de endringer som har skjedd i loopen"""
# Legger på bakgrunnsbilde(Swamp.jpg)
screen.blit(background, (0, 0))
screen.blit(bat_img, (bat_x, bat_y)) # setter posisjonen til bildet på skjermen
screen.blit(mosquito_img, (mosquito_x, mosquito_y)) # setter posisjonen til bildet på skjermen
crash()
pygame.display.update() # oppdaterer pygame-skjermen med den nye fargen og evt andre endringer
我想你得加上球拍的范围,像这样 杀死=0 随机输入 def崩溃: 全球蚊子研究所 如果rangebay中的蚊子大小+蚊子大小+蝙蝠大小:添加蝙蝠大小 如果蝙蝠x+蝙蝠宽度在蚊子x+蚊子大小范围内: 只是改变了球拍的宽度和x值 killed=killed+1这将使被杀蚊子的数量增加一个 印刷品{杀死}蚊子已被捣毁 蚊子_y=random.random0400 蚊子_x=random.random0,400这两条线将使蚊子处于随机位置 计算新值的代码可能是这样的
我想你得加上球拍的范围,像这样 杀死=0 随机输入 def崩溃: 全球蚊子研究所 如果rangebay中的蚊子大小+蚊子大小+蝙蝠大小:添加蝙蝠大小 如果蝙蝠x+蝙蝠宽度在蚊子x+蚊子大小范围内: 只是改变了球拍的宽度和x值 killed=killed+1这将使被杀蚊子的数量增加一个 印刷品{杀死}蚊子已被捣毁 蚊子_y=random.random0400 蚊子_x=random.random0,400这两条线将使蚊子处于随机位置 计算新值的代码可能是这样的 试着这样做 把球棒打直 像这样 bat_rect=bat.get_recttopleft=x,y的变量名 对蚊子也一样 球棒随W、A、S、D移动
if even.type == pygame.KEYDOWN:
if event.key == pyagme.K_w:
y += 6
if bat_rect.colliderect(mosquito_rect):
mosquito_catched += 1
if event.key == pyagme.K_s:
y -= 6
if bat_rect.colliderect(mosquito_rect):
mosquito_catched += 1
if event.key == pyagme.K_a:
x -= 6
if bat_rect.colliderect(mosquito_rect):
mosquito_catched += 1
if event.key == pyagme.K_d:
z += 6
if bat_rect.colliderect(mosquito_rect):
mosquito_catched += 1
试着这样做
把球棒打直
像这样
bat_rect=bat.get_recttopleft=x,y的变量名
对蚊子也一样
球棒随W、A、S、D移动
if even.type == pygame.KEYDOWN:
if event.key == pyagme.K_w:
y += 6
if bat_rect.colliderect(mosquito_rect):
mosquito_catched += 1
if event.key == pyagme.K_s:
y -= 6
if bat_rect.colliderect(mosquito_rect):
mosquito_catched += 1
if event.key == pyagme.K_a:
x -= 6
if bat_rect.colliderect(mosquito_rect):
mosquito_catched += 1
if event.key == pyagme.K_d:
z += 6
if bat_rect.colliderect(mosquito_rect):
mosquito_catched += 1
感谢所有的投入。我最后在蝙蝠和蚊子周围画了一个矩形。从那里开始,这很简单,所以谢谢你的建议 这就是我的结局。它会检测碰撞、广告点并创建一个新的蚊子,直到达到20点,游戏结束 我还添加了_change-variable,以便rect随图像移动
while running:
bat_rect = pygame.Rect((bat_x + bat_x_change), (bat_y + bat_y_change), 100, 40)
mosquito_rect = pygame.Rect((mosquito_x + mosquito_x_change), (mosquito_y + mosquito_y_change), 50, 25)
if bat_rect.colliderect(mosquito_rect):
point += 1
print(point)
if point <= 20:
mosquito_x = random.randint(0, 800)
mosquito_y = random.randint(0, 600)
else:
running = False
感谢所有的投入。我最后在蝙蝠和蚊子周围画了一个矩形。从那里开始,这很简单,所以谢谢你的建议 这就是我的结局。它会检测碰撞、广告点并创建一个新的蚊子,直到达到20点,游戏结束 我还添加了_change-variable,以便rect随图像移动
while running:
bat_rect = pygame.Rect((bat_x + bat_x_change), (bat_y + bat_y_change), 100, 40)
mosquito_rect = pygame.Rect((mosquito_x + mosquito_x_change), (mosquito_y + mosquito_y_change), 50, 25)
if bat_rect.colliderect(mosquito_rect):
point += 1
print(point)
if point <= 20:
mosquito_x = random.randint(0, 800)
mosquito_y = random.randint(0, 600)
else:
running = False
我也试过这段代码,但是什么也没发生:def crash:global蚊子y如果bat_x+bat_width==蚊子x+蚊子大小:蚊子y+=1000如果bat_y+bat_height==蚊子y+蚊子大小:蚊子y+=1000如果x和y坐标相同,它不会抓到蚊子吗,但是我不知道如何为它编写代码。我尝试了这个方法,但是当蝙蝠飞过蚊子时什么也没有发生:def crash:global蚊子_y如果蝙蝠_x==蚊子_x或蝙蝠_y==蚊子_y:蚊子_y+=1000你可能应该使用pygame.Rect.collide Rect来检测Rect对象之间的碰撞。我还尝试了这个代码,但是什么也没发生:def crash:global蚊子y如果蝙蝠x+bat\u width==蚊子x+蚊子大小:蚊子y+=1000如果蝙蝠y+bat\u highty==蚊子y+蚊子大小:蚊子y+=1000如果x和y坐标相同,它不会抓到蚊子吗?我想,但是我不知道如何为它编写代码。我尝试过这个方法,但是当蝙蝠飞过蚊子时什么也没有发生:def crash:global蚊子y如果蝙蝠x==蚊子x或蝙蝠y==蚊子y:蚊子y+=1000你可能应该使用pygame.Rect.collide Rect来检测Rect对象之间的碰撞。谢谢奥利弗,但这并没有真正起作用。我会用我所有的代码来更新我的帖子,也许我使用了错误的变量或者其他什么。谢谢奥利弗,但这并没有真正起作用。我会用我所有的代码更新我的帖子,可能我使用了错误的变量或其他东西。嗨,我会试试这个,但我不确定我是否理解如何设置bat_rect变量,我是否会像这样使用bat_x和bat_y:bat_rect=bat.get_rect bat_x,bat_y?bat_rect=bat.get_rect topleft=在第一个逗号中必须指定x cordinate,比如bat_x,x,在这种情况下,您必须指定y坐标,如bat_y,并且还需要引用这些变量,如bat_x=10和bat_y
=10在放入上述代码之前,您需要指定'topleft=',否则它将生成错误Hi,我将尝试此操作,但我不确定我是否了解如何设置bat_rect变量,我是否像这样使用bat_x和bat_y:bat_rect=bat.get_rectbat_x,bat_y?bat_rect=bat.get_rect topleft=在第一个逗号中,您必须像bat_x,x那样指定x cordinate,在这里您必须像bat_y那样指定y cordinate,并且您还需要在放入上述代码之前引用这些变量,如bat_x=10和bat_y=10。您需要指定“topleft=”,否则它将生成错误