本篇文章小编给大家分享一下python用海龟绘图写贪吃蛇游戏代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
如图显示
导入海龟绘图库
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