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()
one problem reworked code retains while true:
loop shouldn't happen in turtle's event driven environment. should replaced screen.ontimer()
events.
Comments
Post a Comment