Zeit- und Tastendruckereignisse mit Python's TurtlePython

Python-Programme
Anonymous
 Zeit- und Tastendruckereignisse mit Python's Turtle

Post by Anonymous »

Ich versuche, ein einfaches Spiel mit der Schildkröte zu erstellen:
  • Eine vom Benutzer gesteuerte Schildkröte kann Kugeln abschießen, wenn die Leertaste gedrückt wird
  • Eine feindliche Schildkröte wird an einer zufälligen Position erstellt
  • Wenn der Feind von der Kugel getroffen wird, wird der Feind zerstört und bewegt sich an eine neue Position.
  • Wenn die Kugel den Bildschirm verlässt, verschwindet sie.
  • Während sich die Kugel bewegt, sollte sich der Spieler noch bewegen können.
  • Wenn der Feind nicht innerhalb von 20 Sekunden zerstört wird, verliert der Spieler.
Daher brauche ich einige Ereignisse, die mit der Tastatur gesteuert werden müssen, und andere, die nach einer bestimmten Zeit ausgelöst werden. Ich kann mir keine Möglichkeit vorstellen, dies ohne eine Schleife zu tun, in der ich den Abstand zwischen der Kugel und dem Feind überprüfe, aber wenn ich es so mache, kann ich die Hauptschildkröte während der Schleife nicht kontrollieren.

Code: Select all

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()
Ich habe eine einfachere Version ausprobiert, bei der sich eine Schildkröte automatisch in einer Schleife bewegt und eine andere Schildkröte mit der Tastatur gesteuert wird, und es funktioniert gut.

Code: Select all

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()
Gibt es eine Möglichkeit, dies mit Turtle zu beheben?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post