python - Caterpillars Eating Leaves Automatically in Caterpillar Game -


i made caterpillar game , i'm trying convert two-player game. made second caterpillar , gave controls. when ran it, leaves automatically came caterpillars.

here code :

import random import turtle t  t.bgcolor('yellow')  caterpillar = t.turtle() caterpillar.shape('square') caterpillar.color('red') caterpillar.speed(0) caterpillar.penup() caterpillar.hideturtle()  caterpillar2 = t.turtle() caterpillar2.color('blue') caterpillar2.shape('square') caterpillar2.penup() caterpillar2.speed(0) caterpillar2.hideturtle()    leaf = t.turtle() leaf_shape = ((0, 0), (14, 2), (18, 6), (20, 20), (6, 18), (2, 14)) t.register_shape('leaf', leaf_shape) leaf.shape('leaf') leaf.color('green') leaf.penup() leaf.hideturtle() leaf.speed(0)  game_started = false text_turtle = t.turtle() text_turtle.write('press space start' , align='center', font=('arial', 50, 'bold' )) text_turtle.hideturtle()  score_turtle = t.turtle() score_turtle.hideturtle() score_turtle.speed(0)  def outside_window(caterpillar):     left_wall = -t.window_width() / 2     right_wall = t.window_width() / 2     top_wall = t.window_height() / 2     bottom_wall = -t.window_height() / 2     (x, y) = caterpillar.pos()     outside = \         x<left_wall or \         x>right_wall or \         y<bottom_wall or \         y>top_wall     return outside  def game_over():     caterpillar.color('yellow')     caterpillar2.color('yellow')     leaf.color('yellow')     t.penup()     t.hideturtle()     t.write('game over!', align='center', font=('arial', 30, 'normal'))  def display_score(current_score):     score_turtle.clear()     score_turtle.penup()     x = (t.window_width() / 2) - 50     y=(t.window_height() / 2) - 50     score_turtle.setpos(x, y)     score_turtle.write(str(current_score), align='right', font=('arial', 40, 'bold'))  def place_leaf():     leaf.ht()     leaf.setx(random.randint(-200, 200))     leaf.sety(random.randint(-200, 200))     leaf.st()  def start_game():     global game_started     if game_started:         return     game_started=true      score = 0     text_turtle.clear()      caterpillar_speed = 2     caterpillar_length = 3     caterpillar.shapesize(1, caterpillar_length, 1)     caterpillar.showturtle()     caterpillar2.shapesize(1, caterpillar_length, 1)     caterpillar2.setheading(180)     caterpillar2.showturtle()     display_score(score)     place_leaf()      while true:         caterpillar.forward(caterpillar_speed)         caterpillar2.forward(caterpillar_speed)         if caterpillar.distance(leaf) or leaf.distance(caterpillar2) < 20:             place_leaf()             caterpillar_length=caterpillar_length + 1             caterpillar.shapesize(1, caterpillar_length, 1)             caterpillar2.shapesize(1, caterpillar_length, 1)             score = score + 10             display_score(score)         if outside_window(caterpillar) or outside_window(caterpillar2):             game_over()             break def move_up():     if caterpillar.heading() == 0 or caterpillar.heading() == 180 or caterpillar.heading() == 270:         caterpillar.setheading(90)  def move_down():     if caterpillar.heading() == 0 or caterpillar.heading() == 180 or caterpillar.heading() == 90:         caterpillar.setheading(270)  def move_left():     if caterpillar.heading() == 90 or caterpillar.heading() == 270 or caterpillar.heading() == 0:         caterpillar.setheading(180)  def move_right():     if caterpillar.heading() == 90 or caterpillar.heading() == 270 or caterpillar.heading() == 180:         caterpillar.setheading(0)  def caterpillar2_move_up():     if caterpillar2.heading() == 0 or caterpillar2.heading() == 180 or     caterpillar2.heading() == 270:     caterpillar2.setheading(90)  def caterpillar2_move_down():     if caterpillar2.heading() == 0 or caterpillar2.heading() == 180 or caterpillar2.heading() == 90:         caterpillar2.setheading(270)  def caterpillar2_move_left():     if caterpillar2.heading() == 90 or caterpillar2.heading() == 270 or caterpillar2.heading() == 0:         caterpillar2.setheading(180)  def caterpillar2_move_right():     if caterpillar2.heading() == 90 or caterpillar2.heading() == 270 or caterpillar2.heading() == 180:         caterpillar2.setheading(0)   t.onkey(start_game, 'space')  t.onkey(move_up, 'up') t.onkey(move_right, 'right') t.onkey(move_down, 'down') t.onkey(move_left, 'left')  t.onkey(caterpillar2_move_up, 'w') t.onkey(caterpillar2_move_right, 'd') t.onkey(caterpillar2_move_down, 's') t.onkey(caterpillar2_move_left, 'a')  t.listen() t. mainloop() 

it gives me these errors :

"/users/arkumar/user python/bin/python"             /users/arkumar/pycharmprojects/caterpillar/.idea/caterpillar.py exception in tkinter callback traceback (most recent call last):   file "/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/lib-tk/tkinter.py", line 1536, in __call__     return self.func(*args)   file "/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/lib-tk/turtle.py", line 710, in eventfun     fun()   file "/users/arkumar/pycharmprojects/caterpillar/.idea/caterpillar.py", line 98, in start_game     place_leaf()   file "/users/arkumar/pycharmprojects/caterpillar/.idea/caterpillar.py", line 70, in place_leaf     leaf.ht()   file "/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/lib-tk/turtle.py", line 2236, in hideturtle     self.pen(shown=false)   file "/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/lib-tk/turtle.py", line 2363, in pen     self._update()   file "/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/lib-tk/turtle.py", line 2564, in _update     self._update_data()   file "/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/lib-tk/turtle.py", line 2550, in _update_data     self.screen._incrementudc()   file "/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/lib-tk/turtle.py", line 1239, in _incrementudc     raise terminator terminator 

and yet gives me exit code 0:

process finished exit code 0

could please me code?

thank you, aditya

i've reworked code playable game below. can't caused specific error, may related pycharm, logic-wise, biggest problem saw line:

if caterpillar.distance(leaf) or leaf.distance(caterpillar2) < 20: 

i've seen other beginners try , doesn't work, need is:

if caterpillar.distance(leaf) < 20 or leaf.distance(caterpillar2) < 20: 

as or doesn't distribute conditional.

import random turtle import turtle, screen, mainloop  text_font = ('arial', 50, 'bold') score_font = ('arial', 40, 'bold')  def outside_window(caterpillar):     left_wall, right_wall = -window_width / 2, window_width / 2     top_wall, bottom_wall = window_height / 2, -window_height / 2      x, y = caterpillar.pos()      inside = left_wall < x < right_wall ,  bottom_wall < y < top_wall     return not inside  def game_over():     caterpillar1.hideturtle()     caterpillar2. hideturtle()     leaf.hideturtle()     text_turtle.write('game over!', align='center', font=text_font)  def display_score(current_score):     score_turtle.undo()     score_turtle.write(current_score, align='right', font=score_font)  def place_leaf():     leaf.hideturtle()     leaf.setposition(random.randint(-200, 200), random.randint(-200, 200))     leaf.showturtle()  def start_game():     screen.onkey(none, 'space')  # can't restart      text_turtle.clear()      score = 0      caterpillar_speed = 2     caterpillar_length = 3      caterpillar1.shapesize(1, caterpillar_length, 1)     caterpillar1.showturtle()     caterpillar2.shapesize(1, caterpillar_length, 1)     caterpillar2.setheading(180)     caterpillar2.showturtle()      display_score(score)     place_leaf()      while true:         caterpillar1.forward(caterpillar_speed)         caterpillar2.forward(caterpillar_speed)          if caterpillar1.distance(leaf) < 20 or caterpillar2.distance(leaf) < 20:             place_leaf()             caterpillar_length += 1             caterpillar1.shapesize(1, caterpillar_length, 1)             caterpillar2.shapesize(1, caterpillar_length, 1)             score = score + 10             display_score(score)          if outside_window(caterpillar1) or outside_window(caterpillar2):             game_over()             break  def caterpillar1_move_up():     caterpillar1.setheading(90)  def caterpillar1_move_down():     caterpillar1.setheading(270)  def caterpillar1_move_left():     caterpillar1.setheading(180)  def caterpillar1_move_right():     caterpillar1.setheading(0)  def caterpillar2_move_up():     caterpillar2.setheading(90)  def caterpillar2_move_down():     caterpillar2.setheading(270)  def caterpillar2_move_left():     caterpillar2.setheading(180)  def caterpillar2_move_right():     caterpillar2.setheading(0)  screen = screen() screen.bgcolor('yellow') window_width, window_height = screen.window_width(), screen.window_height()  caterpillar1 = turtle('square') caterpillar1.color('red') caterpillar1.speed('fastest') caterpillar1.penup() caterpillar1.hideturtle()  caterpillar2 = turtle('square') caterpillar2.color('blue') caterpillar2.speed('fastest') caterpillar2.penup() caterpillar2.hideturtle()  leaf_shape = ((0, 0), (14, 2), (18, 6), (20, 20), (6, 18), (2, 14)) screen.register_shape('leaf', leaf_shape) leaf = turtle('leaf', visible=false) leaf.speed('fastest') leaf.color('green') leaf.penup()  text_turtle = turtle(visible=false) text_turtle.write('press space start', align='center', font=text_font)  score_turtle = turtle(visible=false) score_turtle.speed('fastest') score_turtle.penup() score_turtle.setpos(window_width / 2 - 50, window_height / 2 - 50) score_turtle.write(0, align='right', font=score_font)  screen.onkey(start_game, 'space')  screen.onkey(caterpillar1_move_up, 'up') screen.onkey(caterpillar1_move_right, 'right') screen.onkey(caterpillar1_move_down, 'down') screen.onkey(caterpillar1_move_left, 'left')  screen.onkey(caterpillar2_move_up, 'w') screen.onkey(caterpillar2_move_right, 'd') screen.onkey(caterpillar2_move_down, 's') screen.onkey(caterpillar2_move_left, 'a')  screen.listen()  mainloop() 

enter image description here

one problem reworked code retains while true: loop shouldn't happen in turtle's event driven environment. should replaced screen.ontimer() events.


Comments

Popular posts from this blog

php - Vagrant up error - Uncaught Reflection Exception: Class DOMDocument does not exist -

vue.js - Create hooks for automated testing -

Add new key value to json node in java -