Python 帮助精灵繁殖、精灵碰撞和分数显示

Python 帮助精灵繁殖、精灵碰撞和分数显示,python,pygame,Python,Pygame,关于球/玩家精灵的产生以及球/玩家与敌人之间的碰撞,我需要一些帮助。我想知道如何将球员/球的繁殖更改为底部中间。另外,当玩家击中敌人时,你能告诉我如何暂停游戏并显示图像吗。我还想知道是否有人知道如何在屏幕上显示值 import random import pygame class Ball(pygame.sprite.Sprite): def __init__(self, x, y): pygame.sprite.Sprite.__init__(self)

关于球/玩家精灵的产生以及球/玩家与敌人之间的碰撞,我需要一些帮助。我想知道如何将球员/球的繁殖更改为底部中间。另外,当玩家击中敌人时,你能告诉我如何暂停游戏并显示图像吗。我还想知道是否有人知道如何在屏幕上显示值

import random
import pygame


class Ball(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        # self.image = pygame.image.load('basketball.png').convert_alpha()
        # self.image = pygame.transform.scale(self.image, (100, 100))
        self.image = pygame.Surface((100, 100)).convert_alpha()
        self.image.fill((160, 70, 0))
        self.x = x
        self.y = y
        self.rect = pygame.Rect(self.x, self.y, 100, 100)
        self.speed_x = 0
        self.speed_y = 0
        self.radiusx = 0
        self.radiusy = 100
        self.mask = pygame.mask.from_surface(self.image)

    def update(self, screen_rect):  # Pass a rect with the size of the screen.
        self.x += self.speed_x
        self.y += self.speed_y
        self.rect.topleft = (self.x, self.y)
        if not screen_rect.contains(self.rect):
            # Clamp the rect if it's outside of the screen.
            self.rect.clamp_ip(screen_rect)
            self.x, self.y = self.rect.topleft

    def render(self, screen):
        screen.blit(self.image, self.rect)


class Goal(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        # self.image = pygame.image.load('goal.png').convert_alpha()
        # self.image = pygame.transform.scale(self.image, (220, 220))
        self.image = pygame.Surface((220, 220)).convert_alpha()
        self.image.fill((60, 80, 110))
        self.x = x
        self.y = y
        self.rect = pygame.Rect(self.x, self.y, 220, 220)

    def render(self, screen):
        screen.blit(self.image, self.rect)


class Ring(pygame.sprite.Sprite):
    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        # self.image = pygame.image.load('ring.png').convert_alpha()
        # self.image = pygame.transform.scale(self.image, (400, 400))
        self.image = pygame.Surface((400, 400)).convert_alpha()
        self.image.fill((60, 180, 110))
        self.x = x
        self.y = y
        self.rect = pygame.Rect(self.x, self.y, 400, 400)
        self.mask = pygame.mask.from_surface(self.image)

    def render(self, screen):
        screen.blit(self.image, self.rect)


class Baddie(pygame.sprite.Sprite):
    def __init__(self, x, y, z):
        # self.image = pygame.image.load().convert_alpha()
        # self.image = pygame.transform.scale(self.image, (220, 220))
        self.image = pygame.Surface((90, 90)).convert_alpha()
        self.image.fill((250, 50, 0))
        self.rect = self.image.get_rect()
        self.x = x
        self.y = y

    def render(self, screen):
        screen.blit(self.image, (self.x, self.y))


def main():
    width = 1200
    height = 722

    pygame.init()
    screen = pygame.display.set_mode((width, height))
    screen_rect = screen.get_rect()
    clock = pygame.time.Clock()  # Add a clock to limit the frame rate.
    pygame.display.set_caption('Basketball Shootout')
    font = pygame.font.Font(None, 25)

    badtimer = 100
    badtimer1 = 0
    badguys = [[640, 100]]

    # court = pygame.image.load('halfcourt.jpg')
    # court = pygame.transform.scale(court, (1200, 722))
    court = pygame.Surface((1200, 722))
    court.fill((30, 30, 30))
    basketball = Ball(50, 50)
    goal = Goal(487, 0)
    ring = Ring(400, 400)
    # The player is not needed since the `basketball` is already
    # the playable ball instance.
    # player = Ball  # Just remove this line.

    # badguyimg1 = pygame.image.load("wpierdol.png")
    # badguyimg1 = pygame.transform.scale(badguyimg1, (100, 100))
    # badguyimg2 = pygame.image.load("bad_guy2.gif")
    # badguyimg2 = pygame.transform.scale(badguyimg2, (100, 100))
    # badguyimg3 = pygame.image.load("bad_guy3.gif")
    # badguyimg3 = pygame.transform.scale(badguyimg3, (100, 100))
    badguyimg1 = pygame.Surface((90, 90))
    badguyimg1.fill((60, 50, 210))
    badguyimg2 = pygame.Surface((90, 90))
    badguyimg2.fill((250, 50, 210))
    badguyimg3 = pygame.Surface((90, 90))
    badguyimg3.fill((250, 50, 130))
    badlist = [badguyimg1, badguyimg2, badguyimg3]

    score = 0  # The score variable was missing.

    stop_game = False

    while not stop_game:
        # Event handling.
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                stop_game = True
            # Either set the speed here or increment the `basketball.y`
            # in the while loop with `pygame.key.get_pressed`.
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    basketball.speed_y = -5
                elif event.key == pygame.K_DOWN:
                    basketball.speed_y = 5
                elif event.key == pygame.K_LEFT:
                    basketball.speed_x = -5
                elif event.key == pygame.K_RIGHT:
                    basketball.speed_x = 5
            elif event.type == pygame.KEYUP:
                # Stop the ball.
                if event.key == pygame.K_UP:
                    basketball.speed_y = 0
                elif event.key == pygame.K_DOWN:
                    basketball.speed_y = 0
                elif event.key == pygame.K_LEFT and basketball.speed_x < 0:
                    basketball.speed_x = 0
                elif event.key == pygame.K_RIGHT and basketball.speed_x > 0:
                    basketball.speed_x = 0

        # Don't call get_pressed in the event loop (for every event).
        # pressed = pygame.key.get_pressed()
        # if pressed[pygame.K_UP]:
        #     basketball.y -= 5
        # elif pressed[pygame.K_DOWN]:
        #     basketball.y += 5
        # if pressed[pygame.K_LEFT]:  # if not elif, to separate vertical and horizontal movement.
        #     basketball.x -= 5
        # elif pressed[pygame.K_RIGHT]:
        #     basketball.x += 5

        # Updating.
        basketball.update(screen_rect)
        badtimer -= 1

        point = pygame.sprite.collide_mask(basketball, ring)  # Use basketball not player.
        if point:
            # The score will be incremented continually.
            score = score + 1
            print(score)

        # Update the bad guys.
        if badtimer == 0:
            badguys.append([1040, random.randint(50,430)])
            badtimer = 100-(badtimer1*2)
        if badtimer1 >= 35:
            badtimer1 = 35
        else:
            badtimer1 += 5

        # You can `enumerate` the badguys list to get the index
        # and the item at the same time.
        for index, badguy in enumerate(badguys[:]):
            if badguy[0] < -64:
                # Don't modify a list while you're iterating over it.
                # Iterate over a slice copy: badguys[:]
                badguys.pop(index)
            badguy[0] -= 7

        # Drawing.
        screen.blit(court, (0,0))

        text = font.render(
            'Dodge the other team to get to the goal!',
            True, (0, 0, 0))
        screen.blit(text, (430, 630))
        goal.render(screen)
        # You forgot to render the ring.
        ring.render(screen)

        for badguy in badguys:
            screen.blit(badguyimg1, badguy)  # The `dest`ination arg was missing.

        basketball.render(screen)

        pygame.display.update()
        clock.tick(60)  # Limit the frame rate to 60 FPS.

    pygame.quit()

if __name__ == '__main__':
    main()
随机导入
导入pygame
班级舞会(pygame.sprite.sprite):
定义初始化(self,x,y):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
#self.image=pygame.image.load('basketball.png')。convert_alpha()
#self.image=pygame.transform.scale(self.image,(100100))
self.image=pygame.Surface((100100)).convert_alpha()
自映像填充((160,70,0))
self.x=x
self.y=y
self.rect=pygame.rect(self.x,self.y,100100)
自速度_x=0
自速度_y=0
self.radiusx=0
自半径Y=100
self.mask=pygame.mask.from_surface(self.image)
def更新(自我,屏幕提示):#传递屏幕大小的提示。
self.x+=self.speed\u x
self.y+=self.speed\u y
self.rect.topleft=(self.x,self.y)
如果屏幕不包含(self.rect):
#如果矩形在屏幕外,则夹紧它。
自校正夹具(屏幕校正)
self.x,self.y=self.rect.topleft
def渲染(自身,屏幕):
screen.blit(self.image,self.rect)
班级目标(pygame.sprite.sprite):
定义初始化(self,x,y):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
#self.image=pygame.image.load('goal.png')。convert_alpha()
#self.image=pygame.transform.scale(self.image,(220220))
self.image=pygame.Surface((220220)).convert_alpha()
self.image.fill((60,80,110))
self.x=x
self.y=y
self.rect=pygame.rect(self.x,self.y,220220)
def渲染(自身,屏幕):
screen.blit(self.image,self.rect)
职业戒指(pygame.sprite.sprite):
定义初始化(self,x,y):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
#self.image=pygame.image.load('ring.png')。convert_alpha()
#self.image=pygame.transform.scale(self.image,(400400))
self.image=pygame.Surface((400400)).convert_alpha()
self.image.fill((60180110))
self.x=x
self.y=y
self.rect=pygame.rect(self.x,self.y,400400)
self.mask=pygame.mask.from_surface(self.image)
def渲染(自身,屏幕):
screen.blit(self.image,self.rect)
类恶棍(pygame.sprite.sprite):
定义初始(self,x,y,z):
#self.image=pygame.image.load().convert_alpha()
#self.image=pygame.transform.scale(self.image,(220220))
self.image=pygame.Surface((90,90)).convert_alpha()
self.image.fill((250,50,0))
self.rect=self.image.get_rect()
self.x=x
self.y=y
def渲染(自身,屏幕):
blit(self.image,(self.x,self.y))
def main():
宽度=1200
高度=722
pygame.init()
screen=pygame.display.set_模式((宽度、高度))
screen\u rect=screen.get\u rect()
clock=pygame.time.clock()#添加一个时钟以限制帧速率。
pygame.display.set_标题(“篮球大战”)
font=pygame.font.font(无,25)
坏计时器=100
坏计时器1=0
坏人=[[640100]]
#court=pygame.image.load('halfcourt.jpg')
#court=pygame.transform.scale(court,(1200722))
court=pygame.Surface((1200722))
法院填充((30,30,30))
篮球=球(50,50)
目标=目标(487,0)
环=环(400400)
#不需要球员,因为“篮球”已经存在
#可玩球实例。
#球员=球#只要移开这条线。
#badguyimg1=pygame.image.load(“wpiredol.png”)
#badguyimg1=pygame.transform.scale(badguyimg1,(100100))
#badguyimg2=pygame.image.load(“bad_guy2.gif”)
#badguyimg2=pygame.transform.scale(badguyimg2,(100100))
#badguyimg3=pygame.image.load(“bad_guy3.gif”)
#badguyimg3=pygame.transform.scale(badguyimg3,(100100))
badguyimg1=pygame.Surface((90,90))
填充(60,50,210))
badguyimg2=pygame.Surface((90,90))
填充(250、50、210))
badguyimg3=pygame.Surface((90,90))
badguyimg3.填充((250、50、130))
badlist=[badguyimg1、badguyimg2、badguyimg3]
分数=0#缺少分数变量。
停止游戏=错误
虽然没有停止游戏:
#事件处理。
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
停止游戏=正确
#在此处设置速度或增加'basketball.y'`
#在while循环中使用“pygame.key.get_pressed”。
elif event.type==pygame.KEYDOWN:
如果event.key==pygame.K_UP:
篮球。速度=-5
elif event.key==pygame.K_向下:
篮球。速度=5
elif event.key==pygame.K_左:
篮球。速度x=-5
elif event.key==pygame.K_RIGHT:
篮球。速度x=5
elif event.type==pygame.KEYUP:
#把球停下来。
如果event.key==pygame.K_UP:
篮球。速度_y=0
elif event.key==pygame.K_向下:
篮球。速度_y=0
elif event.key==pygame.K_左和basketball.speed_x<0:
篮球。速度x=0
elif event.key==pygame.K_RIGHT和basketball.speed_x>0:
篮球。速度x=0
#不要在事件循环中调用get_pressed(针对每个事件)。
#pressed=pygame.key.get_pressed()
#如果按下[pygame.K_UP]:
#篮球。y-=5
# In the main function.
start_x, start_y = screen_rect.midbottom
basketball = Ball(start_x, start_y)
class Ball(pygame.sprite.Sprite):

    def __init__(self, x, y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((100, 100)).convert_alpha()
        self.image.fill((160, 70, 0))
        # Pass the midbottom position as an argument to `get_rect`.
        self.rect = self.image.get_rect(midbottom=(x, y))
        # Alternatively.
        # self.rect.midbottom = x, y

        # Set the x and y attributes afterwards.
        self.x = self.rect.x
        self.y = self.rect.y