События времени и нажатия клавиш с помощью Python TurtlePython

Программы на Python
Ответить
Anonymous
 События времени и нажатия клавиш с помощью Python Turtle

Сообщение Anonymous »

Я пытаюсь создать простую игру с черепахой:
  • Черепаха, управляемая пользователем, может стрелять пулями при нажатии пробела.
  • Враждебная черепаха создается в случайной позиции.
  • Если во врага попадает пуля, враг уничтожается и перемещается в новую позицию.
  • Если пуля покидает экран, она исчезает.
  • Пока пуля движется, игрок все равно должен иметь возможность двигаться.
  • Если враг не уничтожен в течение 20 секунд, игрок проигрывает.
Поэтому мне нужно, чтобы некоторые события управлялись с помощью клавиатуры, а другие запускались через определенное время. Я не могу придумать, как это сделать без цикла, внутри которого я проверяю расстояние между пулей и противником, но если я сделаю это так, то не смогу управлять главной черепахой во время цикла.

Код: Выделить всё

import turtle as trtl
from random import randint
import time

class Game():
def __init__(self):
self.scr = trtl.Screen()
self.scr.update()

self.player = trtl.Turtle()
self.player.shape('turtle')
self.player.penup()

trtl.onkeypress(self.forward,'w')
trtl.onkeypress(self.backwards,'s')
trtl.onkeypress(self.left,'a')
trtl.onkeypress(self.right,'d')
trtl.onkeypress(self.shoot,'space')
trtl.listen()

self.enemy = trtl.Turtle()
self.enemy.shape('square')
self.enemy.penup()
self.enemy.speed(0)
self.move_enemy()

self.bullet = trtl.Turtle()
self.bullet.penup()
self.bullet.hideturtle()
self.bulletShot = False

def forward(self):
self.player.forward(5)

def backwards(self):
self.player.back(5)

def left(self):
self.player.left(6)

def right(self):
self.player.right(6)

def shoot(self):
if self.bulletShot == False:
self.bullet.speed(0)
self.bullet.goto(self.player.pos())
self.bullet.seth(self.player.heading())
self.bullet.showturtle()
self.bulletShot = True

def move_enemy(self):
x = randint(-300,300)
y = randint(-300,300)
self.enemy.hideturtle()
self.enemy.goto(x,y)
self.enemy.showturtle()

def play(self):
startTime = time.time()
print(time.time() - startTime)
while time.time() - startTime < 20:
if self.bulletShot:
self.bullet.forward(1)
collision = self.bullet.distance(self.enemy.pos()) < 10
isIn = (self.bullet.pos()[0] = -300 and
self.bullet.pos()[1] = -300)

if not(isIn):
self.bullet.hideturtle()
self.bulletShot = False
elif collision:
self.bullet.hideturtle()
self.bulletShot = False
self.move_enemy()
startTime = time.time()

self.player.write('You loose')
self.scr.exitonclick()

game = Game()
game.play()
Я попробовал более простую версию, в которой одна черепаха перемещается автоматически по кругу, а другая управляется с клавиатуры, и это работает хорошо.

Код: Выделить всё

import turtle as trtl

def up():
jane.sety(jane.pos()[1] + 10)

def down():
jane.sety(jane.pos()[1] - 10)

scr = trtl.Screen()
scr.update()

bob = trtl.Turtle()
bob.penup()
bob.seth(180)
bob.setx(300)
bob.speed(1)

jane = trtl.Turtle()
jane.penup()

trtl.onkeypress(up,'w')
trtl.onkeypress(down,'s')
trtl.listen()

while True:
if bob.pos()[0] > -300:
bob.forward(10)
else:
break

scr.exitonclick()
Есть ли способ исправить это с помощью черепахи?

Подробнее здесь: https://stackoverflow.com/questions/605 ... ons-turtle
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»