I am trying to create a snake game with Turtle graphics. The food is a class that inherits the Turtle but when I run the code is does not appear on the screen:
food.py
from turtle import Turtle
import random
class Food(Turtle):
def __int__(self):
super().__init__()
self.shape("circle")
self.penup()
self.shapesize(stretch_len=0.5, stetch_wid=0.5)
self.color("blue")
random_x = random.randint(-280,280)
random_y = random.randint(-280, 280)
self.goto(random_x, random_y)
print(random_x,random_y)
snake.py
from turtle import Turtle
STARTING_POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
MOVE_DISTANCE = 20
UP = 90
DOWN = 270
RIGHT = 0
LEFT = 180
class Snake:
def __init__(self):
self.segments = []
self.create_snake()
def create_snake(self):
for position in STARTING_POSITIONS:
new_segment = Turtle(shape="square")
new_segment.color("white")
new_segment.pu()
new_segment.setpos(position)
self.segments.append(new_segment)
def move(self):
for seg_num in range((len(self.segments) - 1), 0, -1):
new_x = self.segments[seg_num - 1].xcor()
new_y = self.segments[seg_num - 1].ycor()
self.segments[seg_num].goto(new_x, new_y)
self.segments[0].forward(MOVE_DISTANCE)
def up(self):
if self.segments[0].heading() != DOWN:
self.segments[0].setheading(UP)
def down(self):
if self.segments[0].heading() != UP:
self.segments[0].setheading(DOWN)
def left(self):
if self.segments[0].heading() != RIGHT:
self.segments[0].setheading(LEFT)
def right(self):
if self.segments[0].heading() != LEFT:
self.segments[0].setheading(RIGHT)e
main.py
from turtle import Screen
from snake import Snake
from food import Food
import time
screen = Screen()
screen.setup(width=600,height=600)
screen.bgcolor("black")
screen.title("My Snake Game")
screen.tracer(0)
food = Food()
snake = Snake()
screen.listen()
screen.onkey(snake.up,"Up")
screen.onkey(snake.down, "Down")
screen.onkey(snake.left, "Left")
screen.onkey(snake.right, "Right")
game_is_on = True
while game_is_on:
screen.update()
time.sleep(0.1)
snake.move()
screen.exitonclick()
your text
When I created the food in the main.py file it was created, but when I tried to import it, it does not get created The screen and the snake are created, the snake get commands from thekeyboard. I tried running it with Thonny, I saw that the food1 variable was allocated a memory, but when i performed debug and tried to "step into" Food(), it did not go into the class
CodePudding user response:
Here is the actual working code.
food.py
from turtle import Turtle
import random
class Food(Turtle):
def __init__(self):
super().__init__(shape="circle")
self.penup()
self.shapesize(stretch_len=0.5, stretch_wid=0.5)
self.color("blue")
self.move_to_new_location()
def move_to_new_location(self):
random_x = random.randint(-280, 280)
random_y = random.randint(-280, 280)
self.goto(random_x, random_y)
snake.py
from turtle import Turtle
STARTING_POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
MOVE_DISTANCE = 20
UP = 90
DOWN = 270
RIGHT = 0
LEFT = 180
class Snake:
def __init__(self):
self.segments = []
self.create_snake()
def create_snake(self):
for position in STARTING_POSITIONS:
new_segment = Turtle(shape="square")
new_segment.color("white")
new_segment.pu()
new_segment.setpos(position)
self.segments.append(new_segment)
def move(self):
for seg_num in range((len(self.segments) - 1), 0, -1):
new_x = self.segments[seg_num - 1].xcor()
new_y = self.segments[seg_num - 1].ycor()
self.segments[seg_num].goto(new_x, new_y)
self.segments[0].forward(MOVE_DISTANCE)
def up(self):
if self.segments[0].heading() != DOWN:
self.segments[0].setheading(UP)
def down(self):
if self.segments[0].heading() != UP:
self.segments[0].setheading(DOWN)
def left(self):
if self.segments[0].heading() != RIGHT:
self.segments[0].setheading(LEFT)
def right(self):
if self.segments[0].heading() != LEFT:
self.segments[0].setheading(RIGHT)
main.py
import time
from turtle import Screen
from food import Food
from snake import Snake
def play_game():
screen = Screen()
screen.setup(width=600,height=600)
screen.bgcolor("black")
screen.title("My Snake Game")
screen.tracer(0)
food = Food()
screen.addshape("circle", ((-5, -5), (-5, 5), (5, 5), (5, -5)))
snake = Snake()
screen.listen()
screen.onkey(snake.up,"Up")
screen.onkey(snake.down, "Down")
screen.onkey(snake.left, "Left")
screen.onkey(snake.right, "Right")
game_is_on = True
while game_is_on:
screen.update()
time.sleep(0.1)
snake.move()
if snake.segments[0].distance(food) < 20:
food.move_to_new_location()
if snake.segments[0].xcor() > 280 or snake.segments[0].xcor() < -280 or snake.segments[0].ycor() > 280 or snake.segments[0].ycor() < -280:
game_is_on = False
screen.exitonclick()
def main():
play_game()
if __name__ == "__main__":
main()
CodePudding user response:
There is two typo mistakes in your code.
In
Food
class must be function__init__
instead of__int__
.In
Food.__init__
in lineself.shapesize(stretch_len=0.5, stetch_wid=0.5)
in second paramstetch_wid
you lostr
. it must bestretch_wid
.
And now you can see the food.