Python 中无法同时移动 2 个海龟

问题描述 投票:0回答:1

我是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()
python turtle-graphics python-turtle
1个回答
1
投票

问题:无法同时看到两艘船。使用时控制一只乌龟 然后另一只乌龟没有出现。

对我来说,更大的问题是你完全错过了面向对象编程的要点。 让我们通过彻底修改代码来解决我们的两个问题。 但在我们这样做之前,请一遍又一遍地重复,“

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()
© www.soinside.com 2019 - 2024. All rights reserved.