我是Python新手。我正在尝试创建一个太空游戏,其中两艘太空飞船互相争斗。 用户控制其中一个,另一个将随机飞行和射击。用户必须保护自己并向另一艘船开火。如果其中一艘船能成功击中另一艘船 10 次,则该船获胜。
问题:我无法同时看到两艘船。当我控制一只乌龟时,另一只乌龟不会显示。请帮忙。
from turtle import *
import random
import pygame
class Application:
space_ship = Turtle()
window = Screen()
window_X = 640
window_Y = 640
ship_x = space_ship.xcor()
Clock = pygame.time.Clock()
def __init__(self):
self.game_config()
self.enemy_config()
def enemy_config(self):
enemy = Turtle()
enemy.penup()
enemy.speed(0)
enemy.shapesize(2)
enemy.setposition(0,-250)
while True:
self.Clock.tick(20)
enemy.fd(10)
if enemy.ycor() >= 340:
enemy.right(50)
enemy.sety(-320)
elif enemy.ycor() <= -340:
enemy.right(50)
enemy.sety(320)
elif enemy.xcor() >= 340:
enemy.right(50)
enemy.setx(-320)
elif enemy.xcor() <= -340:
enemy.right(50)
enemy.setx(320)
def movefd(self):
while True:
self.Clock.tick(20)
self.space_ship.fd(10)
if self.space_ship.ycor() >= 340:
self.space_ship.sety(-320)
elif self.space_ship.ycor() <= -340:
self.space_ship.sety(320)
elif self.space_ship.xcor() >= 340:
self.space_ship.setx(-320)
elif self.space_ship.xcor() <= -340:
self.space_ship.setx(320)
def moverg(self):
self.space_ship.right(15)
def movelf(self):
self.space_ship.left(15)
def game_config (self):
bgcolor("white")
self.space_ship.shapesize(2)
self.space_ship.speed(0)
self.space_ship.color("green")
self.window.setup(self.window_X,self.window_Y)
self.space_ship.left(90)
self.space_ship.penup()
onkeypress(self.moverg, "Right")
onkeypress(self.movelf, "Left")
onkeypress(self.movefd, "Up")
listen()
done()
if __name__ == '__main__':
Application()
问题:无法同时看到两艘船。使用时控制一只乌龟 然后另一只乌龟没有出现。
对我来说,更大的问题是你完全错过了面向对象编程的要点。 让我们通过彻底修改代码来解决我们的两个问题。 但在我们这样做之前,请一遍又一遍地重复,“
while True:
在像乌龟这样的事件驱动的世界中没有任何意义。”
from turtle import Screen, Turtle
class SpaceShip(Turtle):
def __init__(self):
super().__init__()
self.shapesize(2)
self.color("green")
self.speed('fastest')
self.penup()
self.setheading(90)
def movefd(self):
self.forward(10)
if self.ycor() >= 340:
self.sety(-320)
elif self.ycor() <= -340:
self.sety(320)
if self.xcor() >= 340:
self.setx(-320)
elif self.xcor() <= -340:
self.setx(320)
def moverg(self):
self.right(15)
def movelf(self):
self.left(15)
class EnemyShip(SpaceShip):
def __init__(self):
super().__init__()
self.hideturtle()
self.color("black")
self.setheading(-50)
self.sety(-250)
self.showturtle()
class Application:
SCREEN_X = 640
SCREEN_Y = 640
def __init__(self):
self.screen = Screen()
self.screen.setup(self.SCREEN_X, self.SCREEN_Y)
self.space_ship = SpaceShip()
self.enemy = EnemyShip()
self.screen.onkeypress(self.space_ship.moverg, "Right")
self.screen.onkeypress(self.space_ship.movelf, "Left")
self.screen.onkeypress(self.space_ship.movefd, "Up")
self.screen.listen()
self.movefd()
self.screen.mainloop()
def movefd(self):
self.enemy.movefd()
self.screen.ontimer(self.movefd, 100)
if __name__ == '__main__':
Application()