Python 从玩家身上射出子弹
所以我想在我的游戏中添加一个射击选项,但当我按下空格键时,子弹会在玩家所在的位置产生,就是这样,它不会移动,只是坐在那里,我对pygame特别陌生,所以我不太确定 如果你需要更多的上下文,请说 代码如下: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
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)
即使