Python 从玩家身上射出子弹

Python 从玩家身上射出子弹,python,pygame,Python,Pygame,所以我想在我的游戏中添加一个射击选项,但当我按下空格键时,子弹会在玩家所在的位置产生,就是这样,它不会移动,只是坐在那里,我对pygame特别陌生,所以我不太确定 如果你需要更多的上下文,请说 代码如下: import pygame import random from pygame.locals import( RLEACCEL, K_UP, K_DOWN, K_LEFT, K_RIGHT, K_ESCAPE, K_w, K_a

所以我想在我的游戏中添加一个射击选项,但当我按下空格键时,子弹会在玩家所在的位置产生,就是这样,它不会移动,只是坐在那里,我对pygame特别陌生,所以我不太确定

如果你需要更多的上下文,请说

代码如下:

import pygame
import random

from pygame.locals import(
    RLEACCEL,
    K_UP,
    K_DOWN,
    K_LEFT,
    K_RIGHT,
    K_ESCAPE,
    K_w,
    K_a,
    K_s,
    K_d,
    K_0,
    K_9,
    K_SPACE,
    KEYDOWN,
    QUIT
)

pygame.init()
pygame.joystick.init()
pygame.mixer.init()
pygame.display.set_caption("Dodge The Missile (ALPHA 0.11)")

SCREEN_WIDTH = 1600
SCREEN_HEIGHT = 1000

class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super(Enemy, self).__init__()
        self.surf = pygame.image.load("Missiles.png").convert()
        self.surf.set_colorkey((255,255,255), RLEACCEL)
        self.rect = self.surf.get_rect(
            center=(
                random.randint(SCREEN_WIDTH + 20, SCREEN_WIDTH + 100),
                random.randint(0, SCREEN_HEIGHT),
            )
        )
        self.speed = random.randint(Enemy_SPEED_Min, Enemy_SPEED_Max)



    def update(self):
        self.rect.move_ip(-self.speed, 0)
        if self.rect.right < 0:
            self.kill()


class Player(pygame.sprite.Sprite):
    def __init__(self):
        super(Player, self).__init__()
        self.surf = pygame.image.load("Spaceship.png").convert()
        self.surf.set_colorkey((255,255,255), RLEACCEL)
        self.rect = self.surf.get_rect()
        self.layers = 1
    def update(self, pressed_keys):
            if pressed_keys[K_UP] or pressed_keys[K_w]:
                self.rect.move_ip(0, -5)
            if pressed_keys[K_DOWN] or pressed_keys[K_s]:
                self.rect.move_ip(0, 5)
            if pressed_keys[K_LEFT] or pressed_keys[K_a]:
                self.rect.move_ip(-5, 0)
            if pressed_keys[K_RIGHT] or pressed_keys[K_d]:
                self.rect.move_ip(5, 0)

            if self.rect.left < 0:
                self.rect.left = 0
            if self.rect.right > SCREEN_WIDTH:
                self.rect.right = SCREEN_WIDTH
            if self.rect.top <= 0:
                self.rect.top = 0
            if self.rect.bottom >= SCREEN_HEIGHT:
                self.rect.bottom = SCREEN_HEIGHT
    def shoot(self):
        bullet = Bullet(self.rect.centerx, self.rect.top)
        all_sprites.add(bullet)



class Cloud(pygame.sprite.Sprite):
    def __init__(self):
        super(Cloud, self).__init__()
        self.surf = pygame.image.load("Cloud.png").convert()
        self.surf.set_colorkey((255,255,255), RLEACCEL)
        self.layers = 3
        self.rect = self.surf.get_rect(
            center=(
                random.randint(SCREEN_WIDTH + 20, SCREEN_WIDTH + 100),
                random.randint(0, SCREEN_HEIGHT)
            )
        )

    def update(self):
        self.rect.move_ip(-5, 0)
        if self.rect.right < 0:
            self.kill()

class Bullet (pygame.sprite.Sprite):
    def __init__ (self, x, y):
        super (Bullet, self).__init__()
        self.surf = pygame.image.load("Bullet.png").convert()
        self.surf.set_colorkey((255,255,255), RLEACCEL)
        self.rect = self.surf.get_rect()
        self.rect.bottom = y
        self.rect.centerx = x
        self.speedx = 5
    def update(self):
        self.rect.x += self.speedx

        if self.rect.left > SCREEN_WIDTH:
            self.kill()


class AddEnemyTimer():
    def __init__(self, Generate_Enemy_Timer, Generate_Cloud_Timer):
        self.Generate_Enemy_Timer = Generate_Enemy_Timer
        self.Generate_Cloud_Timer = Generate_Cloud_Timer

class Game_Speed_Class():
    def __init__(self, Game_Speed):
        self.Game_Speed = Game_Speed

class Enemy_Speed_Class():
    def __init__(self, First_NEW_ENEMY_SPEED, Second_NEW_ENEMY_SPEED):
        self.First_NEW_ENEMY_SPEED = First_NEW_ENEMY_SPEED
        self.Second_NEW_ENEMY_SPEED = Second_NEW_ENEMY_SPEED
Enemy_SPEED = Enemy_Speed_Class(20, 50)
Enemy_SPEED_Min = Enemy_SPEED.First_NEW_ENEMY_SPEED
Enemy_SPEED_Max = Enemy_SPEED.Second_NEW_ENEMY_SPEED

count = 0
green = (0, 255, 0)
Lives = 99999999999999



Primary_Music = pygame.mixer.music.load("Game.ogg")
pygame.mixer.music.play(loops=-1)



Milestone_Delay = 50

screen = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT)) 

First_NEW_ENEMY_Timer = 175
Second_NEW_ENEMY_Timer = 250
First_NEW_CLOUD_Timer = 300
Second_NEW_CLOUD_Timer = 600

Generate_Timer= AddEnemyTimer(random.randint(First_NEW_ENEMY_Timer, Second_NEW_ENEMY_Timer), random.randint(First_NEW_CLOUD_Timer, Second_NEW_CLOUD_Timer))
ADDENEMY = pygame.USEREVENT + 1
pygame.time.set_timer(ADDENEMY, Generate_Timer.Generate_Enemy_Timer)

More_Enemies = pygame.USEREVENT +2
pygame.time.set_timer(More_Enemies, 3000)

ADDCLOUD = pygame.USEREVENT + 3
pygame.time.set_timer(ADDCLOUD, Generate_Timer.Generate_Cloud_Timer)

New_Progress = pygame.USEREVENT + 4
pygame.time.set_timer(New_Progress, Milestone_Delay)

Game_Framerate = Game_Speed_Class(59.94)
Set_Game_Speed = pygame.USEREVENT + 5
pygame.time.set_timer(Set_Game_Speed, 10000)

player = Player()
health = 0
green = (0, 255, 0)

enemies = pygame.sprite.Group()
all_sprites = pygame.sprite.Group()
all_sprites.add(player)
clouds = pygame.sprite.Group()

clock = pygame.time.Clock()
running = True

Large_Font = 60
Medium_Font = 40
Small_Font = 20
Small_Size = pygame.font.Font("Airstrip Four.ttf", Small_Font)
Medium_Size = pygame.font.Font("Airstrip Four.ttf", Medium_Font)
Large_Size = pygame.font.Font("Airstrip Four.ttf", Large_Font)




while running:
    for event in pygame.event.get():
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    running = False
                if event.key == K_SPACE:
                    player.shoot()
                if event.key == K_0:
                    pygame.mixer.music.set_volume(0)
                if event.key == K_9:
                    pygame.mixer.music.set_volume(1)
            elif event.type == QUIT:
                running = False

            elif event.type == ADDENEMY:
                new_enemy = Enemy()
                enemies.add(new_enemy)
                all_sprites.add(new_enemy)

            elif event.type == ADDCLOUD:
                new_cloud = Cloud()
                clouds.add(new_cloud)
                all_sprites.add(new_cloud)

            elif event.type == New_Progress:
                count+= 1

            elif event.type == Set_Game_Speed:
                Enemy_SPEED_Min += 10
                Enemy_SPEED_Max += 10


            elif event.type == More_Enemies:
                First_NEW_ENEMY_Timer += 50
                Second_NEW_ENEMY_Timer += 50
                First_NEW_CLOUD_Timer += 50
                Second_NEW_CLOUD_Timer += 50


    if Lives == 0:
        running = False


    screen.fill((135,206,250))
    for entity in all_sprites:
        screen.blit(entity.surf, entity.rect)
    if pygame.sprite.spritecollide(player, enemies, True):
        print("Hit!")
        Lives -= 1



    screen.blit(Medium_Size.render(str(count), True, (0, 0, 0)), (SCREEN_WIDTH // 2, 48))
    screen.blit(Medium_Size.render(("Lives: ") + str(Lives), True, (0,0,0)), (20, 40))

    fps = str(int(clock.get_fps()))
    screen.blit(Small_Size.render(("FPS: ") + str(fps), True, (0,0,0)), (10, 0))



    pressed_keys = pygame.key.get_pressed()
    player.update(pressed_keys)
    enemies.update()
    clouds.update()
    pygame.display.flip()

    clock.tick(62)
导入pygame
随机输入
从pygame.locals导入(
加速尔,
K_UP,
K_下来,
库左,
好的,
K_逃跑,
库威,
库阿,
库斯,
库德,
K_0,
K_9,
K_空间,
KEYDOWN,
退出
)
pygame.init()
pygame.maggage.init()
pygame.mixer.init()
pygame.display.set_标题(“躲避导弹(阿尔法0.11)”)
屏幕宽度=1600
屏幕高度=1000
职业敌人(pygame.sprite.sprite):
定义初始化(自):
超级(敌人,自己)。\uuuuu init\uuuuuuu()
self.surf=pygame.image.load(“飞弹.png”).convert()
自冲浪设置颜色键((255255255),RLEACCEL)
self.rect=self.surf.get_rect(
居中=(
random.randint(屏幕宽度+20,屏幕宽度+100),
random.randint(0,屏幕高度),
)
)
self.speed=random.randint(敌人速度最小,敌人速度最大)
def更新(自我):
自校正移动ip(-自校正速度,0)
如果self.rect.right<0:
self.kill()
职业玩家(pygame.sprite.sprite):
定义初始化(自):
超级(玩家,自我)。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()
self.surf=pygame.image.load(“Spaceship.png”).convert()
自冲浪设置颜色键((255255255),RLEACCEL)
self.rect=self.surf.get_rect()
self.layers=1
def更新(自我,按下_键):
如果按了_键[K_UP]或按了_键[K_w]:
自校正移动ip(0,-5)
如果按了_键[K_DOWN]或按了_键[K_s]:
自校正移动ip(0,5)
如果按了_键[K_LEFT]或按了_键[K_a]:
自校正移动ip(-5,0)
如果按了_键[K_RIGHT]或按了_键[K_d]:
自校正移动ip(5,0)
如果self.rect.left<0:
self.rect.left=0
如果self.rect.right>屏幕宽度:
self.rect.right=屏幕宽度
如果self.rect.top=屏幕高度:
self.rect.bottom=屏幕高度
def喷射(自):
bullet=bullet(self.rect.centerx,self.rect.top)
所有精灵。添加(项目符号)
类云(pygame.sprite.sprite):
定义初始化(自):
超级(云,自我)。\uuuu初始化
self.surf=pygame.image.load(“Cloud.png”).convert()
自冲浪设置颜色键((255255255),RLEACCEL)
self.layers=3
self.rect=self.surf.get_rect(
居中=(
random.randint(屏幕宽度+20,屏幕宽度+100),
random.randint(0,屏幕高度)
)
)
def更新(自我):
自校正移动ip(-5,0)
如果self.rect.right<0:
self.kill()
类子弹(pygame.sprite.sprite):
定义初始化(self,x,y):
超级(子弹,自我)。\uuuu初始化
self.surf=pygame.image.load(“Bullet.png”).convert()
自冲浪设置颜色键((255255255),RLEACCEL)
self.rect=self.surf.get_rect()
self.rect.bottom=y
self.rect.centerx=x
self.speedx=5
def更新(自我):
self.rect.x+=self.speedx
如果self.rect.left>屏幕宽度:
self.kill()
类addenemytime():
定义初始化(自身、生成敌人计时器、生成云计时器):
self.Generate\u敌军\u Timer=Generate\u敌军\u Timer
self.Generate_Cloud_Timer=Generate_Cloud_Timer
类游戏\速度\类()
定义初始(自我,游戏速度):
self.Game\u Speed=游戏速度
等级敌人\速度\等级()
定义初始速度(自我、第一个新的敌人速度、第二个新的敌人速度):
self.First\u NEW\u敌军速度=First\u NEW\u敌军速度
self.Second\u NEW\u敌军\u速度=Second\u NEW\u敌军\u速度
敌方速度=敌方速度等级(20,50)
敌方速度=敌方速度。第一个新敌方速度
敌方速度最大=敌方速度。第二次新敌方速度
计数=0
绿色=(0,255,0)
生命=9999999999
Primary_Music=pygame.mixer.Music.load(“Game.ogg”)
pygame.mixer.music.play(循环=-1)
里程碑延迟=50
screen=pygame.display.set_模式((屏幕宽度、屏幕高度))
第一个新敌人计时器=175
第二个新的敌人计时器=250
第一个新的云计时器=300
第二个新云计时器=600
Generate\u Timer=AddEnemyTimer(random.randint(第一个新的敌人计时器,第二个新的敌人计时器),random.randint(第一个新的云计时器,第二个新的云计时器))
ADDENEMY=pygame.USEREVENT+1
pygame.time.set_计时器(加法器、生成_计时器、生成_敌人_计时器)
更多敌人=pygame.USEREVENT+2
pygame.time.set_timer(更多敌人,3000)
ADDCLOUD=pygame.USEREVENT+3
pygame.time.set_timer(ADDCLOUD,Generate_timer.Generate_Cloud_timer)
New_Progress=pygame.USEREVENT+4
pygame.time.set_计时器(新进度、里程碑延迟)
游戏帧率=游戏速度等级(59.94)
设置游戏速度=pygame.USEREVENT+5
pygame.time.set_定时器(设置游戏速度,10000)
player=player()
健康=0
绿色=(0,255,0)
敌人=pygame.sprite.Group()
all_sprites=pygame.sprite.Group()
所有精灵。添加(玩家)
clouds=pygame.sprite.Group()
clock=pygame.time.clock()
运行=真
大字体=60
中等字体=40
小字体=20
Small\u Size=pygame.font.font(“简易机场4.ttf”,Small\u font)
Medium\u Size=pygame.font.font(“Airstript Four.ttf”,Medium\u font)
Large\u Size=pygame.font.font(“Airstript Four.ttf”,大字体)
运行时:
对于pygame.event.get()中的事件:
如果event.type==KEYDOWN:
如果event.key==K_转义:
运行=错误
如果event.key==K_空间:
player.shoot()
如果event.key==K_0:
pygame.mixer.music.set_音量(0)
即使