回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我在这里问我儿子一个问题,他刚开始使用Python。
他正在做一个简单的游戏,在这个游戏中,敌舰投掷导弹,玩家移动盾牌来阻止坠落的导弹撞击地球。他增加了盾牌向飞船发射子弹摧毁飞船的能力(现在设置为3次命中),这一切似乎都起作用,但游戏在那一刻崩溃了,并给出了错误:typeerror:Die()只接受1个位置参数(给定0)。
他很纠结于为什么,而我也没什么用,只传递了一点HTML:)</p>
<p>他的密码是:</p>
<pre><code>#Space Defence
#Wes L-M
#Players must defend the city from alien missiles and attack the mother ship
from livewires import games, color
import random
import pygame
games.init(screen_width = 1280, screen_height = 1024, fps = 50)
pygame.display.set_mode((1280,1024),pygame.FULLSCREEN)
class Killer(games.Sprite):
""" Makes a simple die methord for all the class's. """
def die(self):
""" Destroy self. """
self.destroy()
class Collider(Killer):
""" A class that detects collisions. """
def update(self):
""" Check for overlapping sprites. """
super(Collider, self).update()
if self.overlapping_sprites:
for sprite in self.overlapping_sprites:
sprite.die()
self.die()
def die(self):
""" Destroy self and leave explosion behind. """
new_explosion = Explosion(x = self.x, y = self.y)
games.screen.add(new_explosion)
self.destroy()
class Collider_B(Killer):
""" A class that detects collisions for Bullet and Ship. """
def update(self):
""" Check for overlapping sprites and take way from health. """
super(Collider_B, self).update()
if self.overlapping_sprites:
for sprite in self.overlapping_sprites:
sprite.die()
self.die()
def die(self):
""" destroy self and leave differant explostion behind. """
new_explosion = Explosion(x = self.x, y = self.y)
games.screen.add(new_explosion)
self.destroy()
class Explosion(games.Animation):
""" Explosion animation. """
images = ["explosion_1.bmp",
"explosion_2.bmp",
"explosion_3.bmp",
"explosion_4.bmp",
"explosion_5.bmp",
"explosion_6.bmp",
"explosion_7.bmp",
"explosion_8.bmp",
"explosion_9.bmp"]
def __init__(self, x, y):
super(Explosion, self).__init__(images = Explosion.images,
x = x, y = y,
repeat_interval = 6, n_repeats = 1,
is_collideable = False)
class Shield(Killer):
"""
A Shield controlled by player to catch falling missiles.
"""
image = games.load_image("shield.bmp")
BULLET_DELAY = 20
def __init__(self, y = 800):
""" Initialize Shield object and create Text object for score. """
super(Shield, self).__init__(image = Shield.image,
x = games.screen.width/2,
y = y)
self.bullet_wait = 0
self.score = games.Text(value = 0, size = 25, color = color.black,
top = 5, right = games.screen.width - 10,
is_collideable = False)
games.screen.add(self.score)
def update(self):
""" Use A and D to controll, SPACE too fire. """
if games.<a href="https://www.cnpython.com/pypi/keyboard" class="inner-link">keyboard</a>.is_pressed(games.K_o):
self.x -= 12
if games.keyboard.is_pressed(games.K_p):
self.x += 12
if self.left < 0:
self. left = 0
if self.right > games.screen.width:
self.right = games.screen.width
self.Check_catch()
#fire bullets if spacebar is pressed
if games.keyboard.is_pressed(games.K_SPACE) and self.bullet_wait == 0:
new_bullet = Bullet(self.x, self.y)
games.screen.add(new_bullet)
self.bullet_wait = Shield.BULLET_DELAY
#if waiting until the shield can fire next, decrease wait
if self.bullet_wait > 0:
self.bullet_wait -= 1
def Check_catch(self):
""" Check if catch missiles. """
for missile in self.overlapping_sprites:
self.score.value += 10
self.score.right = games.screen.width - 10
missile.handle_caught()
class Ship(Killer):
"""
A ship which moves left and right, dropping shield.
"""
image = games.load_image("ship.bmp")
health = 3
def __init__(self, y = 55, speed = 3, odds_change = 200):
""" Initialize the Chef object. """
super(Ship, self).__init__(image = Ship.image,
x = games.screen.width / 2,
y = y,
dx = speed)
self.odds_change = odds_change
self.time_til_drop = 0
def update(self):
""" Determine if direction needs to be reversed. """
if self.left < 0 or self.right > games.screen.width:
self.dx = -self.dx
elif random.randrange(self.odds_change) == 0:
self.dx = -self.dx
self.check_drop()
self.check_hit()
def check_drop(self):
""" Decrease countdown or drop missile reset countdown. """
if self.time_til_drop > 0:
self.time_til_drop -= 1
else:
new_missile = Missile(x = self.x)
games.screen.add(new_missile)
#set buffer to approx 30% of missile height, regardless of missile speed
self.time_til_drop = int(new_missile.height * 1.3 / Missile.speed) + 1
def check_hit(self):
""" Check if Bullet has hit. """
for Bullet in self.overlapping_sprites:
Bullet.handle_hit()
class Bullet(Collider_B):
""" A Bullet fired by the player's shield. """
image = games.load_image("bullet.bmp")
BUFFER = -30
LIFETIME = 100
def __init__(self, shield_x, shield_y):
""" Initialize bullet sprite. """
#bullet starting position
buffer_y = Bullet.BUFFER
x = shield_x
y = shield_y + buffer_y
#bullet speed
dx = random.choice([1, 0.5, 0.3, 0.1, 0, -0.1, -0.3, -0.5, -1])
dy = -10
#create the bullet
super(Bullet, self).__init__(image = Bullet.image,
x = x, y = y,
dx = dx, dy = dy)
self.lifetime = Bullet.LIFETIME
def update(self):
""" Move the bullet. """
#if lifetime is up, destroy missile
self.lifetime -= 1
if self.lifetime == 0:
self.destroy()
def handle_hit(self):
""" Handles what happens when hit by Bullet. """
Ship.health -= 1
if Ship.health == 0: #ship loses health and eventually dies
Ship.die()
self.die()
class Missile(Collider):
"""
A missile which falls to the ground.
"""
image = games.load_image("missile.bmp")
speed = 1
def __init__(self, x, y = 90):
""" Initialize a Missile object. """
super(Missile, self).__init__(image = Missile.image,
x = x, y = y,
dy = random.randint(1, 4))
def update(self):
""" Check if bottom edge has reached screen bottom. """
if self.bottom > games.screen.height:
self.end_game()
self.die()
def handle_caught(self):
""" Destroy self if caught. """
self.die()
def handle_hit(self):
""" Handle if missile gets hit... nothing. """
def end_game(self):
""" End the games. """
end_message = games.Message(value = "Game Over",
size = 90,
color = color.red,
x = games.screen.width/2,
y = games.screen.height/2,
lifetime = 5 * games.screen.fps,
after_death = games.screen.quit)
games.screen.add(end_message)
def main():
""" Play the game. """
city_image = games.load_image("Citybackground.jpg", transparent = False)
games.screen.background = city_image
#load and play theme music
games.music.load("Star-Command.mp3")
games.music.play(-1)
the_ship = Ship()
games.screen.add(the_ship)
the_shield = Shield()
games.screen.add(the_shield)
games.mouse.is_visible = False
games.screen.event_grab = True
games.screen.mainloop()
#start it up!!!!
main()
</code></pre>