Day 20 – 贪吃蛇(上)

Day 20 – 贪吃蛇(上)

温馨提示:本文最后更新于2024-12-24 18:09:05,某些文章具有时效性,若有错误或已失效,请在下方留言

设置游戏屏幕

from turtle import Screen

screen = Screen()
# 设置屏幕大小
screen.setup(width=600, height=600)
# 设置背景颜色
screen.bgcolor("black")
# 设置标题
screen.title("贪吃蛇")


# 设置点击退出屏幕
screen.exitonclick()

绘制效果,如下所示

游戏屏幕
游戏屏幕

创建贪吃蛇

from turtle import Screen, Turtle

screen = Screen()
# 设置屏幕大小
screen.setup(width=600, height=600)
# 设置背景颜色
screen.bgcolor("black")
# 设置标题
screen.title("贪吃蛇")

# 创建贪吃蛇
start_positions = [(0, 0), (-20, 0), (-40, 0)]
for position in start_positions:
    new_segment = Turtle("square")
    new_segment.color("white")
    new_segment.goto(position)

# 设置点击退出屏幕
screen.exitonclick()

绘制效果,如下所示

贪吃蛇身体
贪吃蛇

移动贪吃蛇

from turtle import Screen, Turtle
import time

screen = Screen()
# 设置屏幕大小
screen.setup(width=600, height=600)
# 设置背景颜色
screen.bgcolor("black")
# 设置标题
screen.title("贪吃蛇")
# 关闭动画
screen.tracer(0)

# 创建贪吃蛇
start_positions = [(0, 0), (-20, 0), (-40, 0)]

segments = []

for position in start_positions:
    new_segment = Turtle("square")
    new_segment.color("white")
    # 不显示轨迹线
    new_segment.penup()
    new_segment.goto(position)
    segments.append(new_segment)

game_is_on = True
while game_is_on:
    # 关闭动画需要更新屏幕
    screen.update()
    time.sleep(1)

    for seg_num in range(len(segments) - 1, 0, -1):
        # 上一个节点的坐标
        new_x = segments[seg_num - 1].xcor()
        new_y = segments[seg_num - 1].ycor()
        # 当前节点移动到上一个节点
        segments[seg_num].goto(new_x, new_y)
    # 相当于整体前移
    segments[0].forward(20)
    # 相当于整体左转
    segments[0].left(90)

# 设置点击退出屏幕
screen.exitonclick()

绘制效果,如下所示

Snake 类与 OOP

snake.py 文件内容

from turtle import Turtle

STARTING_POSITION = [(0, 0), (-20, 0), (-40, 0)]
MOVE_DISTANCE = 20

class Snake:
    def __init__(self):
        self.segments = []
        self.create_snake()

    def create_snake(self):
        for position in STARTING_POSITION:
            new_segment = Turtle("square")
            new_segment.color("white")
            # 不显示轨迹线
            new_segment.penup()
            new_segment.goto(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)

main.py 文件内容

from turtle import Screen
import time
from snake import Snake

screen = Screen()
# 设置屏幕大小
screen.setup(width=600, height=600)
# 设置背景颜色
screen.bgcolor("black")
# 设置标题
screen.title("贪吃蛇")
# 关闭动画
screen.tracer(0)

snake = Snake()

game_is_on = True
while game_is_on:
    # 关闭动画需要更新屏幕
    screen.update()
    time.sleep(1)
    snake.move()

# 设置点击退出屏幕
screen.exitonclick()

绘制的效果,如下所示

键盘控制贪吃蛇

snake.py 文件内容

from turtle import Turtle

STARTING_POSITION = [(0, 0), (-20, 0), (-40, 0)]
MOVE_DISTANCE = 20
UP = 90
DOWN = 270
LEFT = 180
RIGHT = 0

class Snake:
    def __init__(self):
        self.segments = []
        self.create_snake()
        self.head = self.segments[0]

    def create_snake(self):
        for position in STARTING_POSITION:
            new_segment = Turtle("square")
            new_segment.color("white")
            new_segment.speed("fastest")
            # 不显示轨迹线
            new_segment.penup()
            new_segment.goto(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.head.forward(MOVE_DISTANCE)

    def up(self):
        """向上移动"""
        if self.head.heading() != DOWN:
            self.head.setheading(UP)


    def down(self):
        """向下移动"""
        if self.head.heading() != UP:
            self.head.setheading(DOWN)

    def left(self):
        """向左移动"""
        if self.head.heading() != RIGHT:
            self.head.setheading(LEFT)

    def right(self):
        """向右移动"""
        if self.head.heading() != LEFT:
            self.head.setheading(RIGHT)

main.py 文件内容

from turtle import Screen
import time
from snake import Snake

screen = Screen()
# 设置屏幕大小
screen.setup(width=600, height=600)
# 设置背景颜色
screen.bgcolor("black")
# 设置标题
screen.title("贪吃蛇")
# 关闭动画
screen.tracer(0)
# 监听Screen
screen.listen()

snake = Snake()

# 键盘控制贪吃蛇
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(1)
    snake.move()

# 设置点击退出屏幕
screen.exitonclick()

绘制的效果,如下所示

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容