Python Can';在pygame中不能生成多个敌人
我试图在我的游戏中添加多个敌人,但即使我已经输入了这样做的代码,也只显示了一个敌人。我试图调试以查找任何错误,但找不到任何错误Python Can';在pygame中不能生成多个敌人,python,python-3.x,pygame,Python,Python 3.x,Pygame,我试图在我的游戏中添加多个敌人,但即使我已经输入了这样做的代码,也只显示了一个敌人。我试图调试以查找任何错误,但找不到任何错误 import random import math import pygame # initialise pygame pygame.init() # player 1 playerimage = pygame.image.load("Main Player.png") playerX = 365 playerY = 700 playerX_change = 0
import random
import math
import pygame
# initialise pygame
pygame.init()
# player 1
playerimage = pygame.image.load("Main Player.png")
playerX = 365
playerY = 700
playerX_change = 0
# laser
# ready - bullet not on screen
# fire - bullet is shown on screen and is moving
laserimage = pygame.image.load("laser.png")
laserX = 0
laserY = 700
laserY_change = 10
laser_currentstate = "ready"
# alien player / random movement = random.randint()
alienimage = []
alienX = []
alienY = []
alienX_change = []
alienY_change = []
amount_aliens = 3
我尝试过制造多个外星人,但代码也不起作用
for i in range(amount_aliens):
alienimage.append(pygame.image.load('alien.png'))
alienX.append(random.randint(0, 735))
alienY.append(random.randint(50, 200))
alienX_change.append(4)
alienY_change.append(7)
score = 0
# define player
def main_player(x, y):
screen.blit(playerimage, (x, y))
# define laster
def fire_laser(x, y):
global laser_currentstate
laser_currentstate = "fire"
screen.blit(laserimage, (x + 16, y + 10))
# define alien
def alien(x, y, i):
screen.blit(alienimage[i], (x, y))
# collision detection
def hascollision(alienX, alienY, laserX, laserY):
distance = math.sqrt((math.pow(alienX - laserX, 2)) + (math.pow(alienY - laserY, 2)))
if distance < 27:
return True
else:
return False
# background
background = pygame.image.load('stars.png')
# display and screen title/icon
(width, height) = (800, 800)
screen = pygame.display.set_mode((width, height))
flip = pygame.display.flip()
pygame.display.set_caption("space fighters")
pygame.event.get()
icon = pygame.image.load('logo.png')
pygame.display.set_icon(icon)
from sys import exit
# loop of functions
executed = True
while executed:
screen.fill((63, 62, 63))
# image background
screen.blit(background, (0, 0))
for event in pygame.event.get():
# if key pressed, check which input, right or left?
if event.type == pygame.KEYDOWN:
print("key pressed")
if event.key == pygame.K_a:
playerX_change = -6
if event.key == pygame.K_s:
playerX_change = 6
if event.type == pygame.KEYUP:
if event.key == pygame.K_a or event.key == pygame.K_s:
playerX_change = 0
if event.key == pygame.K_SPACE:
if laser_currentstate is "ready":
laserX = playerX
fire_laser(laserX, laserY)
# bounrary algorithm, prevents player moving out/enemy.
playerX += playerX_change
if playerX <= 0:
playerX = 0
elif playerX >= 736:
playerX = 736
# boundry algorithm, make sure alien doesn't go out of bountry
for i in range(amount_aliens):
alienX[i] += alienX_change[i]
if alienX[i] <= 0:
alienX_change[i] = 4
alienY[i] += alienY_change[i]
elif alienX[i] >= 736:
alienX_change[i] = -4
alienY[i] += alienY_change[i]
# collision
collision = hascollision(alienX[i], alienY[i], laserX, laserY)
if collision:
laserY = 650
laser_currentstate = "ready"
score += 5
print(score)
alienX[i] = random.randint(0, 735)
alienY[i] = random.randint(50, 200)
alien(alienX[i], alienY[i], i)
# movement of laser shot
if laserY <= 0:
laserY = 650
laser_currentstate = "ready"
if laser_currentstate is "fire":
fire_laser(laserX, laserY)
laserY -= laserY_change
# updates screen to show screen
main_player(playerX, playerY)
pygame.display.update()
pygame.quit()
适用于范围内的i(金额):
alienimage.append(pygame.image.load('alien.png'))
alienX.append(random.randint(0735))
alienY.append(random.randint(50200))
alienX_变更追加(4)
alienY_change.append(7)
分数=0
#定义玩家
def主_播放器(x,y):
屏幕光点(播放图像,(x,y))
#定义laster
def fire_激光器(x,y):
全局激光电流状态
激光器\u currentstate=“点火”
屏幕光点(激光图像,(x+16,y+10))
#定义外国人
def外星人(x,y,i):
屏幕blit(alienimage[i],(x,y))
#碰撞检测
def hascollision(alienX、alienY、laserX、laserY):
距离=math.sqrt((math.pow(alienX-laserX,2))+(math.pow(alienY-laserY,2)))
如果距离小于27:
返回真值
其他:
返回错误
#背景
background=pygame.image.load('stars.png')
#显示和屏幕标题/图标
(宽度、高度)=(800800)
screen=pygame.display.set_模式((宽度、高度))
flip=pygame.display.flip()
pygame.display.set_标题(“太空战斗机”)
pygame.event.get()
icon=pygame.image.load('logo.png')
pygame.display.set_图标(图标)
从系统导入退出
#函数循环
已执行=真
执行时:
屏幕填充((63、62、63))
#图像背景
屏幕光点(背景,(0,0))
对于pygame.event.get()中的事件:
#如果按下该键,请检查哪个输入,右侧还是左侧?
如果event.type==pygame.KEYDOWN:
打印(“按键”)
如果event.key==pygame.K_a:
playerX_change=-6
如果event.key==pygame.K_:
playerX_change=6
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_a或event.key==pygame.K_s:
playerX_change=0
如果event.key==pygame.K_空间:
如果激光器当前状态为“就绪”:
laserX=playerX
fire_激光器(laserX、laserY)
#Bounrry算法,防止玩家移出/敌人。
playerX+=playerX\u更改
如果playerX=736:
playerX=736
#boundry算法,确保外星人不会离开bountry
对于范围内的i(金额):
alienX[i]+=alienX_变化[i]
如果alienX[i]=736:
alienX_变化[i]=-4
alienY[i]+=alienY_变化[i]
#碰撞
collision=hascollision(alienX[i],alienY[i],laserX,laserY)
如果发生碰撞:
激光功率=650
激光器\u currentstate=“就绪”
分数+=5
打印(分数)
alienX[i]=random.randint(0735)
alienY[i]=random.randint(50200)
外星人(alienX[i],alienY[i],i)
#激光丸的运动
如果激光的问题是,你只需要打电话
alien(alienX[i], alienY[i], i)
一次,你应该为你的每一个外星人调用一次(因此在你的for
循环中)这是一个问题
碰撞检测和外星人(alienX[i],alienY[i],i)
必须在for循环中完成,该循环迭代所有外星人:
executed=True
执行时:
# [...]
#boundry算法,确保外星人不会离开bountry
对于范围内的i(金额):
alienX[i]+=alienX_变化[i]
如果alienX[i]=736:
alienX_变化[i]=-4
alienY[i]+=alienY_变化[i]
#缩进!!!
#碰撞
collision=hascollision(alienX[i],alienY[i],laserX,laserY)
如果发生碰撞:
激光功率=650
激光器\u currentstate=“就绪”
分数+=5
打印(分数)
alienX[i]=random.randint(0735)
alienY[i]=random.randint(50200)
外星人(alienX[i],alienY[i],i)
。整个激光外星碰撞和这条线应该缩进到for
循环中。非常感谢!我有一种感觉,我会错过一些小东西。有一种东西叫做OOP。查看类
关键字。您可以使用它改进代码。当然,这与你的问题无关。不要使用并行列表,这是一种设计反模式。使用dict列表(每个dict保存一个给定外星生物的图像、x、y等值)。当您开始学习OO时,它还将使您更容易从简单的dict移动到真正的“外来”对象。