【发布时间】:2025-12-11 03:40:01
【问题描述】:
我正在 Pygame 中开发太空入侵者类型的游戏。到目前为止,我只是了解了游戏的基础知识:
import pygame, sys, os, math, random, time
from pygame.locals import *
pygame.init()
window = pygame.display.set_mode((1000,500))
screen = pygame.display.get_surface()
spaceBackground = pygame.image.load("C:/Users/LN/Desktop/space-background.png")
spaceShip = pygame.image.load("C:/Users/LN/Desktop/space-ship.png")
bullet = pygame.image.load("C:/Users/LN/Desktop/bullet.png")
enemyShip = pygame.image.load("C:/Users/LN/Desktop/enemyAircraft.png")
class move():
'''Move the space ship'''
def _init_(self):
screen.blit(spaceBackground, (0,0))
self.position = spaceShip.get_rect()
self.position = self.position.move(500,477)
global place
place = self.position
pygame.display.flip()
def moveUp(self):
screen.blit(spaceBackground, self.position, self.position)
self.position = self.position.move(0,-2)
global place
place = self.position
def moveDown(self):
screen.blit(spaceBackground, self.position, self.position)
self.position = self.position.move(0,2)
global place
place = self.position
def moveLeft(self):
screen.blit(spaceBackground, self.position, self.position)
self.position = self.position.move(-2,0)
global place
place = self.position
def moveRight(self):
screen.blit(spaceBackground, self.position, self.position)
self.position = self.position.move(2,0)
global place
place = self.position
def update(self):
screen.blit(spaceShip, self.position)
def notTooLow(self):
if self.position[1] < (478):
return True
else:
return False
def notTooHigh(self):
if self.position[1] > (4):
return True
else:
return False
def notTooRight(self):
if self.position[0] < (974):
return True
else:
return False
def notTooLeft(self):
if self.position[0] > (5):
return True
else:
return False
class shoot():
'''Shoots bullets out of the ship'''
def _init_(self):
global bulletUp
bulletUp = False
self.position = (0,0)
def startMoveUp(self):
self.position = place
self.position = self.position.move(11,0)
def bulletOnScreen(self):
if self.position[1] > -5:
return True
else:
global bulletUp
bulletUp = False
def moveUp(self):
screen.blit(spaceBackground, self.position)
self.position = self.position.move(0,-6)
screen.blit(bullet, self.position)
screen.blit(spaceShip, place)
class enemy():
'''Spawn and control enemies'''
def _init_(self):
global numbEnemy
numbEnemy = 0
self.position = enemyShip.get_rect()
def moveSpawn(self):
self.position = self.position.move(0,50)
def spawnEnemy(self):
screen.blit(enemyShip, (500, 20))
self.position = enemyShip.get_rect()
def moveEnemy(self):
screen.blit(spaceBackground, self.position)
self.position = self.position.move(0,1)
screen.blit(enemyShip, self.position)
move = move()
move._init_()
shoot = shoot()
shoot._init_()
enemy = enemy()
enemy._init_()
counter = 0
while True:
if counter//300*300 == counter:
enemy.spawnEnemy()
if counter//2*2 == counter:
enemy.moveEnemy()
if pygame.key.get_pressed()[K_UP] and move.notTooHigh():
move.moveUp()
pygame.event.pump()
if pygame.key.get_pressed()[K_DOWN] and move.notTooLow():
move.moveDown()
我不知道该怎么做,就是制造多艘敌舰。有没有一种简单的方法可以让我在不删除另一艘的情况下生成另一艘船?
【问题讨论】:
-
您需要创建新的
enemy实例:newEnemy = enemy(); newEnemy.spawnEnemy() -
我认为你误解了什么是类。类是一种东西。我看不出
move或shoot可能是什么东西。 -
另外,
__init__每边应该有两个下划线。它在创建类的实例时被隐式调用;您不必在创建对象后显式调用__init__方法。 -
我认为你应该在开始制作游戏之前学习 Python...为了有效地使用 Pygame,你至少需要对 Python 中的面向对象编程有足够的了解,而你似乎没有有。
-
好的.... 我了解类的工作原理(除了 init 的东西,这很有用),我只是不知道如何重复创建新类无需手动制作。有没有办法在代码中自动生成它们?