如何解决python上的太空入侵者游戏
所以我在 pygame 上制作了这个太空入侵者游戏,现在我想为游戏添加关卡,所以我制作了一个定义并将整个代码放入其中,但是现在当我运行它时它可以工作,但它并没有射出子弹.我一遍又一遍地环顾代码,但我无法找到错误所在。
#这里是代码
import pygame
import random
import math
from pygame import mixer
import time
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("space invaders")
icon = pygame.image.load("rocket.png")
pygame.display.set_icon(icon)
def lvl2():
bg = pygame.image.load("background.png")
mixer.music.load("background.wav")
mixer.music.play(-1)
#player
pimg = pygame.image.load("space-invaders.png")
Px = 370
Py = 480
Px_change = 0
#enemy
eimg = []
ex = []
ey = []
ex_change = []
ey_change = []
num_of_enemies = 8
for i in range(num_of_enemies):
eimg.append(pygame.image.load("alien (1).png"))
ex.append(random.randint(0,736))
ey.append(random.randint(50,150))
ex_change.append(2)
ey_change.append(50)
#bullet
bimg = pygame.image.load("bullet.png")
bx = 0
by = 480
bx_change = 0
by_change = 10
b_state = "ready"
#score
score_value = 0
font = pygame.font.Font('freesansbold.ttf',32)
over_font = pygame.font.Font('freesansbold.ttf',64)
textx = 10
texty = 10
def show_score(x,y):
score = font.render("score : "+ str(score_value),True,(0,225,0))
screen.blit(score,(x,y))
def game_over_text():
over_text = over_font.render("GAMEOVER",0))
screen.blit(over_text,(200,250))
def player(x,y):
screen.blit(pimg,y))
def enemy(x,y,i):
screen.blit(eimg[i],y))
def fire(x,y):
global b_state
b_state = "fire"
screen.blit(bimg,(x+16,y+10))
def collision(ex,ey,bx,by):
distance = math.sqrt((math.pow(ex-bx,2)) + (math.pow(ey-by,2)))
if distance <= 27:
return True
else:
return False
running = True
while running:
screen.fill((0,0))
screen.blit(bg,0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a or event.key == pygame.K_LEFT:
Px_change = -4
if event.key == pygame.K_d or event.key == pygame.K_RIGHT:
Px_change = +4
if event.key == pygame.K_SPACE:
if b_state is "ready":
b_sound = mixer.sound("laser.wav")
b_sound.play()
bx = Px
fire(bx,by)
if event.type == pygame.KEYUP:
if event.key == pygame.K_a or event.key == pygame.K_d or event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
Px_change = 0
Px += Px_change
if Px <= 0:
Px = 0
if Px >= 735:
Px = 735
#game over
for i in range(num_of_enemies):
if ey[i] > 440:
for j in range(num_of_enemies):
ey[j] = 2000
game_over_text()
#pygame.QUIT
break
ex[i] += ex_change[i]
if ex[i] <= 0:
ex_change[i] = 2
ey[i] += ey_change[i]
elif ex[i] >= 736:
ex_change[i] = -2
ey[i] += ey_change[i]
#colllison
coll = collision(ex[i],ey[i],by)
if coll:
by = 480
b_state = "ready"
score_value += 1
kill_sound = mixer.sound("explosion.wav")
kill_sound.play()
ex[i] = random.randint(0,736)
ey[i]= random.randint(50,150)
enemy(ex[i],i)
if by <= 0:
by = 480
b_state = "ready"
if b_state is "fire":
fire(bx,by)
by -= by_change
player(Px,Py)
show_score(textx,texty)
pygame.display.update()
lvl2()
如果你知道如何解决这个问题,请帮帮我
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。