Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pygame sprite.spritecollide()不';不要使用移动精灵组_Python_Pygame_Sprite - Fatal编程技术网

Python pygame sprite.spritecollide()不';不要使用移动精灵组

Python pygame sprite.spritecollide()不';不要使用移动精灵组,python,pygame,sprite,Python,Pygame,Sprite,当我的玩家精灵与硬币组碰撞时,硬币会消失,但当它与敌人组碰撞时,什么也不会发生。代码是一样的。我不知道我做错了什么,因为我做了两次同样的事情,但只起了一次作用。这和敌人的行动有什么关系吗?代码如下: import pygame as pg import random a_white = (245, 245, 245) a_red = (10, 0, 0) black = (0, 0, 0) white = (255, 255, 255) blue_grey = (51, 93, 127) da

当我的玩家精灵与硬币组碰撞时,硬币会消失,但当它与敌人组碰撞时,什么也不会发生。代码是一样的。我不知道我做错了什么,因为我做了两次同样的事情,但只起了一次作用。这和敌人的行动有什么关系吗?代码如下:

import pygame as pg
import random

a_white = (245, 245, 245)
a_red = (10, 0, 0)
black = (0, 0, 0)
white = (255, 255, 255)
blue_grey = (51, 93, 127)
dark_red = (85, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
yellow = (255, 255, 0)
bg_color = dark_red

width = 600
height = 500
FPS = 60

p_width = 70
p_height = 70
c_width = 35
c_height = 35
score = 0
level = 0
lives = 3

title = 'This Is My Game!'
pg.init()
pg.mixer.init()
clock = pg.time.Clock()
screen = pg.display.set_mode((width, height))
pg.display.set_caption(title)
font_name = pg.font.match_font("arial")
coin_img = pg.image.load('coin3.png').convert()
player_img = pg.image.load('smiley.png').convert_alpha()
gegner_1 = pg.image.load('gegner_black.png').convert_alpha()
coin_snd = pg.mixer.Sound('coin_snd_2.ogg')


def new_coin():
    x = random.randrange(c_width, width - c_width)
    y = random.randrange(c_height, height - c_height)
    coins = Coin(x, y)
    all_sprites.add(player, coins)
    coin_group.add(coins)


def draw_text(screen, text, t_color, size, t_x, t_y):
    font = pg.font.Font(font_name, size)
    text_surface = font.render(text, True, t_color)
    text_rect = text_surface.get_rect()
    text_rect.midtop = (t_x, t_y)
    screen.blit(text_surface, text_rect)


def start_screen():
    screen.fill(bg_color)
    draw_text(screen, 'Welcome... !', white, 75, width / 2, height / 4 - 100)
    draw_text(screen, 'ready to play my game*?', white, 24, width - 150, height / 4 - 20)
    draw_text(screen, "Press any key to begin", white, 20, width / 2 + 60, height / 4 + 10)
    draw_text(screen, "*The  name of the game is \'MY GAME\'  but  that ",
              white, 16, width / 2, height - 150)
    draw_text(screen, " has nothing to do  with the fact, that the game is", white, 16, width / 2, height - 130)
    draw_text(screen, "  my  game. Yes, the  game is actually  my game, ", white, 16, width / 2, height - 110)
    draw_text(screen, " but  that\'s not the reason I named  it  my  game. ", white, 16, width / 2, height - 90)
    draw_text(screen, "...or is it?", white, 13, width - 28, height - 20)
    pg.display.update()
    waiting = True
    while waiting:
        clock.tick(FPS)
        for event in pg.event.get():
            if event.type == pg.QUIT:
                pg.quit()
            if event.type == pg.KEYUP:
                waiting = False


class Player(pg.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image_orig = pg.transform.scale(player_img, (p_width, p_height))
        self.image = self.image_orig.copy()
        self.rect = self.image.get_rect()
        self.rect.center = (width / 2), (height / 2)
        self.radius = 35

    def update(self):
        keys = pg.key.get_pressed()
        if keys[pg.K_RIGHT]:
            self.rect.x += 5
        if keys[pg.K_LEFT]:
            self.rect.x -= 5
        if keys[pg.K_UP]:
            self.rect.y -= 5
        if keys[pg.K_DOWN]:
            self.rect.y += 5

        if self.rect.right > width:
            self.rect.right = width
        if self.rect.left < 0:
            self.rect.left = 0
        if self.rect.top < 0:
            self.rect.top = 0
        if self.rect.bottom > height:
            self.rect.bottom = height


class Coin(pg.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pg.transform.scale(coin_img, (c_width, c_height))
        self.image.set_colorkey(white)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.radius = 18


class Gegner_1(pg.sprite.Sprite):
    def __init__(self, x, y, yon):
        super().__init__()
        self.image_orig = pg.transform.scale(gegner_1, (p_width, p_height))
        self.image_orig.set_colorkey(white)
        self.image = self.image_orig.copy()
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.radius = 35
        self.yon = yon
        if yon == 'yes':
            self.speedx = 5
            self.speed = self.speedx
        elif yon == 'no':
            self.speedy = 5
            self.speed = self.speedy

    def update(self):
        if self.yon == 'yes':
            self.rect.x += self.speed
        if self.yon == 'no':
            self.rect.y += self.speed
        if self.rect.right > width:
            self.speed = -5
        if self.rect.left == 0:
            self.speed = 5
        if self.rect.bottom > height:
            self.speed = -5
        if self.rect.top < 0:
            self.speed = 5


all_sprites = pg.sprite.Group()
coin_group = pg.sprite.Group()
enemys_group = pg.sprite.Group()
player = Player()
gegner1 = Gegner_1(0, 60, 'yes')
gegner2 = Gegner_1(width, 350, 'yes')
gegner3 = Gegner_1(50, p_height, 'no')
gegner4 = Gegner_1(width - p_width - 20, p_height, 'no')

enemys_group.add(gegner1, gegner2, gegner3, gegner4)
all_sprites.add(player)

for c in range(3):
    new_coin()

start_game = True
game_over = False
done = False

while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True
    if start_game:
        start_screen()
        start_game = False

    screen.fill(bg_color)
    if score >= 5:
        all_sprites.add(gegner1)
        if score >= 10:
            all_sprites.add(gegner2)
            if score >= 15:
                all_sprites.add(gegner3)
                if score >= 20:
                    all_sprites.add(gegner4)

    all_sprites.draw(screen)
    all_sprites.update()

    draw_text(screen, 'SCORE: ' + str(score), white, 20, 55, 10)

    hits = pg.sprite.spritecollide(player, coin_group, True, pg.sprite.collide_circle)
    for hit in hits:
        score += 1
        coin_snd.play()
        new_coin()

    hits = pg.sprite.spritecollide(player, enemys_group, True, pg.sprite.collide_circle)
    for hit in hits:
        lives -= 1

    pg.display.update()
    clock.tick(FPS)

pg.quit()
将pygame导入为pg
随机输入
a_white=(245245245245)
红色=(10,0,0)
黑色=(0,0,0)
白色=(255,255,255)
蓝灰色=(51、93、127)
深红色=(85,0,0)
红色=(255,0,0)
绿色=(0,255,0)
蓝色=(0,0255)
黄色=(255,255,0)
背景颜色=深红色
宽度=600
高度=500
FPS=60
p_宽度=70
p_高度=70
c_宽度=35
c_高度=35
分数=0
级别=0
生命=3
title=‘这是我的游戏!’
第init页()
pg.mixer.init()
时钟=pg.time.clock()
屏幕=pg.display.set_模式((宽度、高度))
pg.display.set_标题(标题)
font\u name=pg.font.match\u font(“arial”)
coin_img=pg.image.load('coin3.png').convert()
player\u img=pg.image.load('smiley.png')。convert\u alpha()
gegner_1=pg.image.load('gegner_black.png')。convert_alpha()
coin\u snd=pg.mixer.Sound('coin\u snd\u 2.ogg'))
def new_coin():
x=random.randrange(c_宽度,宽度-c_宽度)
y=random.randrange(c_高度,高度-c_高度)
硬币=硬币(x,y)
所有精灵。添加(玩家,硬币)
硬币组。添加(硬币)
def绘图文本(屏幕、文本、t_颜色、大小、t_x、t_y):
font=pg.font.font(字体名称、大小)
text\u surface=font.render(文本、真、t\u颜色)
text_rect=text_surface.get_rect()
text_rect.midtop=(t_x,t_y)
屏幕.blit(文本表面,文本矩形)
def启动屏幕()
屏幕填充(背景颜色)
绘制文字(屏幕“欢迎…”,白色,75,宽/2,高/4-100)
绘制文字(屏幕“准备好玩我的游戏了吗*?”,白色,24,宽150,高/4-20)
绘制文本(屏幕,“按任意键开始”,白色,20,宽/2+60,高/4+10)
绘制文本(屏幕,“*游戏名称为‘我的游戏’”,
白色,16,宽/2,高-150)
绘制文字(屏幕,“与事实无关,游戏是”,白色,16,宽/2,高-130)
绘制文本(屏幕,“我的游戏。是的,游戏实际上是我的游戏”,白色,16,宽/2,高-110)
绘制文本(屏幕,“但这不是我将其命名为我的游戏的原因。”,白色,16,宽/2,高-90)
绘制文本(屏幕,“……还是它?”,白色,13,宽28,高20)
pg.display.update()
等待=真
等待时:
时钟滴答声(FPS)
对于pg.event.get()中的事件:
如果event.type==pg.QUIT:
第页退出
如果event.type==pg.KEYUP:
等待=错误
职业玩家(第三页精灵):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.image\u orig=pg.transform.scale(播放器img,(p\u宽度,p\u高度))
self.image=self.image\u orig.copy()
self.rect=self.image.get_rect()
self.rect.center=(宽度/2),(高度/2)
自半径=35
def更新(自我):
keys=pg.key.get_pressed()
如果键[pg.K_RIGHT]:
自校正x+=5
如果键[pg.K_左]:
自校正x-=5
如果键[pg.K_UP]:
自校正y-=5
如果键[pg.K_DOWN]:
自校正y+=5
如果self.rect.right>宽度:
self.rect.right=宽度
如果self.rect.left<0:
self.rect.left=0
如果self.rect.top<0:
self.rect.top=0
如果self.rect.bottom>高度:
self.rect.bottom=高度
等级硬币(第页雪碧、雪碧):
定义初始化(self,x,y):
super()。\uuuu init\uuuuu()
self.image=pg.transform.scale(硬币img,(硬币宽度,硬币高度))
self.image.set_颜色键(白色)
self.rect=self.image.get_rect()
self.rect.x=x
自校正y=y
自半径=18
第1类雪碧(第2页雪碧):
定义初始(self,x,y,yon):
super()。\uuuu init\uuuuu()
self.image_orig=pg.transform.scale(gegner_1,(p_宽度,p_高度))
self.image\u orig.set\u colorkey(白色)
self.image=self.image\u orig.copy()
self.rect=self.image.get_rect()
self.rect.x=x
自校正y=y
自半径=35
self.yon=yon
如果yon==“是”:
self.speedx=5
self.speed=self.speedx
elif yon==“否”:
self.speeded=5
自加速
def更新(自我):
如果self.yon==“是”:
self.rect.x+=自速度
如果self.yon==“否”:
自校正y+=自校正速度
如果self.rect.right>宽度:
自身速度=-5
如果self.rect.left==0:
自身速度=5
如果self.rect.bottom>高度:
自身速度=-5
如果self.rect.top<0:
自身速度=5
所有精灵=pg.sprite.Group()
coin_group=pg.sprite.group()
enemys_group=pg.sprite.group()
player=player()
gegner1=Gegner_1(0,60,‘是’)
gegner2=Gegner_1(宽度,350,“是”)
gegner3=Gegner_1(50,p_高度,“否”)
gegner4=Gegner_1(宽度-p_宽度-20,p_高度,“否”)
enemys_group.add(gegner1、gegner2、gegner3、gegner4)
所有精灵。添加(玩家)
对于范围(3)内的c:
新硬币()
开始游戏=正确
游戏结束=错误
完成=错误
虽然没有这样做:
对于pg.event.get()中的事件:
如果event.type==pg.QUIT:
完成=正确
如果开始游戏:
启动屏幕()
开始游戏=错误
屏幕填充(背景颜色)
如果得分>=5:
所有精灵。添加(gegner1)
如果得分>=10:
所有精灵。添加(gegner2)
如果得分>=15:
所有精灵。添加(gegner3)
如果得分>=20:
所有精灵。添加(gegner4)
所有精灵。绘制(屏幕)
所有精灵更新()
绘制文本(屏幕“分数:”+str(分数),白色,20,55,10)
点击次数=pg.sprite.spritecollid
hits = pg.sprite.spritecollide(player, coin_group, True, pg.sprite.collide_circle)
for hit in hits:
    score += 1
    new_coin()
    if score == 5:
        gegner = Gegner_1(0, 60, 'yes')
        all_sprites.add(gegner)
        enemys_group.add(gegner)
    elif score == 10:
        gegner = Gegner_1(width, 350, 'yes')
        all_sprites.add(gegner)
        enemys_group.add(gegner)
    elif score == 15:
        gegner = Gegner_1(50, p_height, 'no')
        all_sprites.add(gegner)
        enemys_group.add(gegner)
    elif score == 20:
        gegner = Gegner_1(width - p_width - 20, p_height, 'no')
        all_sprites.add(gegner)
        enemys_group.add(gegner)