【发布时间】:2020-07-22 23:53:19
【问题描述】:
'''这个太空侵略者代码有一个小错误,一开始一切都很好,直到突然间,主要是在游戏结束时,一些敌方飞船突然移动得非常快并且比其他敌人快得多,但走的路和其他人一样。下面:'''
import pygame
import random
import math
from pygame import mixer
# Initialize and create a Game Window
pygame.init()
screen = pygame.display.set_mode(size=(800,600))
#Caption and Icon
pygame.display.set_caption('Space Invaders')
icon = pygame.image.load('ufo.png')
pygame.display.set_icon(icon)
#Background
background = pygame.image.load('background.png')
#BackgroundSound
mixer.music.load('background.wav')
mixer.music.play(-1)
#Player
playerImg = pygame.image.load('player.png')
playerX=360
playerY=470
playerX_change = 0
#Enemy
enemyImg=[]
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
num_of_enemies=6
for i in range(num_of_enemies):
enemyImg.append(pygame.image.load('enemy.png'))
enemyX.append(random.randint(0,736))
enemyY.append(random.randint(40,120))
enemyX_change.append(4)
enemyY_change.append(20)
#Bullet
bulletImg = pygame.image.load('bullet.png')
bulletX=0
bulletY=480
bulletX_change = 0
bulletY_change = -10
bulletstate = 'ready' # Bullet is 'ready' if its ready to shoot and 'fire' means a bullet is fired
#Number of Bullets
no_of_bullets=0
#Score
score_value=0
Score_font = pygame.font.Font("freesansbold.ttf" , 32)
textX=10
textY=10
#Number of bullets
def Show_score(x,y):
score=Score_font.render("Score: " + str(score_value) , True , (255,255,255))
screen.blit(score , (x,y))
def player(x,y):
screen.blit(playerImg , (playerX , playerY))
def enemy(x, y, i):
screen.blit(enemyImg[i] , (enemyX[i] , enemyY[i]))
def bullet_fire(x,y):
global bulletstate
bulletstate='fire'
screen.blit(bulletImg ,(x+16 , y+10))
def Collision(bulletX , bulletY , enemyX , enemyY):
distance=math.sqrt((math.pow(enemyX-bulletX,2)) + (math.pow(bulletY-enemyY,2)))
if distance<29:
return True
else:
return False
def game_over():
font1 = pygame.font.Font("BUBBLEGUMS.ttf" , 68)
gameover=font1.render("GAME OVER " , True , (255,255,255))
screen.blit(gameover , (100,200))
def numberofbullets():
font2=pygame.font.Font("blow.ttf",35)
number_of_bullets=font2.render("Number of Bullets Shot: " + str(no_of_bullets) , True , (0,255,255))
screen.blit(number_of_bullets , (170,375))
#Game Loop
running=True
while running:
# BackgroundImage
screen.blit(background ,(0,0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
#Keystroke
if event.type == pygame.KEYDOWN:
if event.key ==pygame.K_LEFT:
playerX_change -=6
if event.key == pygame.K_RIGHT:
playerX_change +=6
if bulletstate=='ready':
if event.key == pygame.K_SPACE:
no_of_bullets+=1
bulletX=playerX
bullet_fire(bulletX,bulletY)
bullet_sound = mixer.Sound('laser.wav')
bullet_sound.play()
if event.type ==pygame.KEYUP:
if event.key ==pygame.K_LEFT or event.key == pygame.K_RIGHT:
playerX_change=0
#Checking for Boundaries of Spaceship
playerX +=playerX_change
if playerX>=736:
playerX=736
elif playerX<=0:
playerX=0
# Enemy Movement
for i in range(num_of_enemies):
if enemyY[i]>440:
for j in range(num_of_enemies):
enemyY[j]=2000
game_over()
numberofbullets()
break
enemyX[i] +=enemyX_change[i]
if enemyX[i]>735:
enemyX_change[i]+=-4
enemyY[i] +=enemyY_change[i]
elif enemyX[i]<0:
enemyX_change[i]+=4
enemyY[i] +=enemyY_change[i]
#Collision
collision = Collision(bulletX, bulletY, enemyX[i], enemyY[i])
if collision:
collision_sound = mixer.Sound('explosion.wav')
collision_sound.play()
bulletY=480
bulletstate='ready'
enemyX[i]=random.randint(0,800)
enemyY[i]=random.randint(40,120)
score_value+=100
enemy(enemyX[i],enemyY[i] ,i)
#Bullet Movement
if bulletY<=0:
bulletY=480
bulletstate='ready'
if bulletstate=='fire':
bullet_fire(bulletX, bulletY)
bulletY+=bulletY_change
player(playerX,playerY)
Show_score(textX, textY)
pygame.display.update()
【问题讨论】:
-
StackOverflow 不是为了让专家为您调试整个代码。随时欢迎您询问代码的特定部分,而不是整个程序。请看How to Ask
-
我是这个网站的新手,所以我不知道这里的情况如何。谢谢
标签: pygame