Python 相似位置检测

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

我是一个想做一个简单的Pygame作为学校作业的Python noob。玩家在x轴和y轴上控制球棒。游戏的目的是一个接一个地捕捉飞来飞去的蚊子。蚊子的位置是随机的,它在屏幕上移动

我的问题是如何检测蝙蝠何时捕捉蚊子

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=”,否则它将生成错误