当前位置 博文首页 > python用海龟绘图写贪吃蛇游戏

    python用海龟绘图写贪吃蛇游戏

    作者:dr-y 时间:2021-08-08 18:21

    一个简单的贪吃蛇程序,供大家参考,具体内容如下

    如图显示

    导入海龟绘图库

    from turtle import *
    from random import randrange

    常量设置

    food_x = randrange(-20, 20) * 20
    food_y = randrange(-20, 20) * 20
    snack = [[0, 0], [20, 0], [40, 0], [40, 20]]
    dir_x = 20
    dir_y = 0

    主函数

    if __name__ == '__main__':
        # 设置主窗口的大小和位置
        # width,height,startx,starty(初始位置距离屏幕左边和右边多少,默认中间)
        setup(800, 800)
        # 禁用海龟动画
        tracer(False)
        loop_view()
        listen()
        onkey(lambda: control(0, 20), "w")
        onkey(lambda: control(0, -20), "s")
        onkey(lambda: control(-20, 0), "a")
        onkey(lambda: control(20, 0), "d")
        # 开始事件循环
        # 调用 Tkinter 的 mainloop 函数
        # 必须作为一个海龟绘图程序的结束语句
        done()

    画正方形

    def draw_square(x, y, size, color_name):
        '''
        画正方形
        :param x 表示在画布的x位置
        :param y 表示画布的y位置
        :param size 表示正方形的长度
        :param color_name 表示正方形的颜色
        :return
        '''
    
        # 画笔抬起,移动的时候不画线
        up()
        # 是海龟不可见
        ht()
        # 将海龟移动到这个位置
        goto(x, y)
    
        # 画笔落下 -- 移动时将画线
        down()
        color("red", color_name)
        begin_fill()
        forward(size)
        left(90)
        forward(size)
        left(90)
        forward(size)
        left(90)
        forward(size)
        left(90)
        end_fill()
    
        pass

    在画布上画食物和蛇

    def loop_view():
        '''
        循环界面
        '''
        global food_x, food_y
        if not is_zhangqiang():
            return
    
        snack.append([snack[-1][0] + dir_x, snack[-1][1] + dir_y])
        if snack[-1][0] != food_x or snack[-1][1] != food_y:
            snack.pop(0)
        else:
            food_x = randrange(-20, 20) * 20
            food_y = randrange(-20, 20) * 20
        clear()
        # 画食物
        draw_square(food_x, food_y, 20, "red")
        # 画蛇
        for s in range(len(snack)):
            if s == len(snack) - 1:
                draw_square(snack[s][0], snack[s][1], 20, "yellow")
                continue
            draw_square(snack[s][0], snack[s][1], 20, "black")
    
    
    
        ontimer(loop_view, 100)
        # 执行一次 TurtleScreen 刷新。在禁用追踪时使用
        update()

    控制方向

    def control(x,y):
        global dir_x, dir_y
        dir_x = x
        dir_y = y

    碰撞检测

    def is_zhangqiang():
        if -400 <= snack[-1][0] <= 380 and -400 <= snack[-1][1] <= 380:
            return True
        else:
            return False
    jsjbwy
    下一篇:没有了