2016-05-12 7 views
1

Mein Freund und ich arbeiten an einem Python-Spiel mit Schildkröten. Unser Problem ist in dem Abschnitt, wo es die Schildkröten definiert. Wir versuchen, jede Schildkröte zu beschleunigen, aber wenn wir das machen, läuft die Standardgeschwindigkeit. Warum tritt dieses Problem auf?Python Turtle Speed ​​

import turtle 


turtle.setup(1000,1000) 
wn=turtle.Screen() 
wn.title("Snake Game!") 

#defines first turtle 

t1=turtle.Turtle() 
t1.pensize(2) 
t1.speed(3) 
t1.penup() 
t1.goto(0,100) 
t1.color("blue", "blue") 
t1.pendown() 

#defines second turtle 

t2=turtle.Turtle() 
t2.pensize(2) 
t2.speed(3) 
t2.penup() 
t2.goto(0,-100) 
t2.color("red", "red") 
t2.pendown() 

#defines outline 

ol=turtle.Turtle() 
ol.pensize(2) 
ol.speed(7) 
ol.penup() 
ol.goto(450,0) 
ol.color("black", "black") 
ol.pendown() 

ol.left(90) 
ol.forward(300) 
ol.left(90) 
ol.forward(900) 
ol.left(90) 
ol.forward(600) 
ol.left(90) 
ol.forward(900) 
ol.left(90) 
ol.forward(300) 
ol.hideturtle() 

#defines score 

score1=int(2) 
score2=int(2) 

def motion(): 
    global move, score1, score2 
    move = True 
    path1 = [] 
    path2 = [] 

#prints score 


    print("Player 1's score is", str(score1)+"!") 
    print("Player 2's score is", str(score2)+"!") 

#defines motion 

    while move == True: 
     global pos1x, pos2x 

     t1.forward(1) 
     t2.forward(1) 

     pos1x = int(t1.xcor()) 
     pos1y = int(t1.ycor()) 
     t1xy = (pos1x, pos1y) 

     pos2x=int(t2.xcor()) 
     pos2y=int(t2.ycor()) 
     t2xy=(pos2x,pos2y) 


     path1.append(t1xy) 
     path2.append(t2xy) 

#calculates score1 

     if t1xy in path2: 
      score1=int(score1-1) 
      print("") 
      print("Player 1's score is", str(score1)+"!") 
      print("Player 2's score is", str(score2)+"!") 
      t1.clear() 
      path1 = [] 
      t2.clear() 
      path2 = [] 
      t1.penup() 
      t1.goto(0,100) 
      t1.pendown() 
      t2.penup() 
      t2.goto(0,-100) 
      t2.pendown() 
      move = False 



     if score1==0: 
      print("Player 2 wins!") 
      exit() 
     else: 
      move==True 



#calculates score2 


     if t2xy in path1: 
      score2=int(score2-1) 
      print("") 
      print("Player 1's score is", str(score1)+"!") 
      print("Player 2's score is", str(score2)+"!") 
      t2.clear() 
      path2 = [] 
      t1.clear() 
      path1 = [] 
      t2.penup() 
      t2.goto(0,-100) 
      t2.pendown() 
      t1.penup() 
      t1.goto(0,100) 
      t1.pendown() 
      move = False 

     if score2==0: 
      print("Player 1 wins!") 
      exit() 
     else: 
      move==True 


#borders 

     if pos1x > 450: 
      t1.left(135) 

     if pos2x > 450: 
      t2.left(135) 


     if pos1x < -450: 
      t1.left(135) 

     if pos2x < -450: 
      t2.left(135) 


     if pos1y > 300: 
      t1.left(135) 

     if pos2y > 300: 
      t2.left(135) 

     if pos1y < -300: 
      t1.left(135) 

     if pos2y < -300: 
      t2.left(135) 

#defines controls 

def left(): 
    t1.speed(500) 
    t1.left(45) 
    t1.speed(3)  

def right(): 
    t1.speed(500) 
    t1.right(45) 
    t1.speed(3) 

def backwards(): 
    t1.left(180) 

def stop(): 
    global move 
    move = False 
    t1.forward(0) 
    t2.forward(0) 


def left2(): 
    t2.speed(500) 
    t2.left(45) 
    t2.speed(3) 

def right2(): 
    t2.speed(500) 
    t2.right(45) 
    t2.speed(3) 

def backwards2(): 
    t2.left(180) 

def motion2(): 

    move = True 
    path1 = [] 
    path2 = [] 


#onkeys 

wn.onkey(left2, "Left") 
wn.onkey(right2, "Right") 
wn.onkey(backwards2, "Down") 

wn.onkey(left, "a") 
wn.onkey(right, "d") 
wn.onkey(backwards, "s") 

wn.onkey(motion, "t") 
wn.onkey(stop, "y") 
wn.onkey(motion2, "p") 



wn.listen() 
wn.mainloop() 
+3

In den meisten Fällen ist es besser, ein minimiertes Beispiel zu veröffentlichen, das nur das Hauptproblem zeigt, nicht Ihren vollständigen Code/das vollständige Projekt. – linusg

Antwort

3

Was möchten Sie hier tun?

def left(): 
    t1.speed(500) 
    t1.left(45) 
    t1.speed(3)  

Wenn die Geschwindigkeit über 10 (schnell) eingestellt wird, wird 0 (am schnellsten) eingestellt. Und Sie setzen es auf 3 (langsam), sobald die Operation abgeschlossen ist.

Soweit ich sagen kann, beschleunigen Sie vorübergehend die Schildkröten auf Operationen, die nicht viel davon, z. left() aber lassen Sie die Schildkröten in langsam Geschwindigkeit für Operationen, die davon profitieren sollten, z. motion()

Ich würde vorschlagen, dass Sie alle Ihre speed() Anrufe herausziehen und sie zu überdenken, vorzugsweise die Argumente Zeichenfolge mit „langsamsten“, „langsam“, „normal“, „schnell“ & „schnellsten“ Dokument helfen, was Sie‘ tun und vermeiden, außer Reichweite zu gehen.

0

Wenn es so einfach ist wie ein Schildkröten Geschwindigkeit Verwendung Wechsel:

turtle.speed(number) 

Schildkröte ist die Schildkröten Namen zB. TestTurtle

Die Nummer kann von 1 bis 10 sein und muss eine ganze Zahl sein. Sie können zum Beispiel nicht 4.7 als Nummer haben.

Wenn Sie über 10 setzen, wird die Geschwindigkeit nicht funktionieren.