python游戏之用海龟绘图写贪吃蛇
SANKE
一个简单的贪吃蛇程序
如图显示
导入海龟绘图库
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