赞
踩
import copy # 拷贝 import turtle # 画板 import tkinter.messagebox as msgbox # 弹窗提示 from random import randrange # 取随机数 # 蛇身体 snake = [[0, 0], [0, 10], [0, 20]] # 方向 aim = [0, 10] # 食物 food = [-10, 0] # 方向函数 def changed_dir(x, y): # 不能控制反方向 [例:不能让蛇向上时, 控制它向下] if aim[0] == x and aim[1] == -y: return if aim[0] == -x and aim[1] == y: return # 重新设置方向 aim[0] = x aim[1] = y # 判读边界条件 def inside(head): return -250 < head[0] < 250 and -250 < head[1] < 250 # 绘制方块 def block(x, y, size, color): turtle.penup() # 抬笔 turtle.goto(x, y) # 移动到位置 turtle.pendown() # 放下笔 turtle.color(color) # 设置颜色 turtle.begin_fill() # 开始填充 # 绘制 for i in range(4): turtle.forward(size) turtle.left(90) turtle.end_fill() # 结束填充 # 蛇移动 def snake_move(): # 蛇移动进行拷贝 head = copy.deepcopy(snake[-1]) head = [head[0] + aim[0], head[1] + aim[1]] # 判读蛇头是否走出边界 if head in snake or not inside(head): # 蛇头在蛇身体里或者不在边界中 print("game over") msgbox.showinfo("提示", "游戏结束") return # 蛇吃食物的情况 if head == food: food[0] = randrange(-15, 15) * 10 # 因为食物被吃了,需要重新通过随机数设置食物位置 food[1] = randrange(-15, 15) * 10 else: snake.pop(0) # pop(0)移除list第一个数据 [移除蛇头,主要是让蛇进行移动] # 蛇身体移位 snake.append(head) turtle.clear() # 画盘清空,重新绘制 # 绘制食物 block(food[0], food[1], 10, "red") # 绘制蛇的身体 for body in snake: block(body[0], body[1], 10, "black") turtle.update() # 画板刷新,让整个画板看起来更流畅 turtle.ontimer(snake_move, 200) # 定时运行此函数 if __name__ == '__main__': turtle.setup(500, 500) # 设置画板大小 turtle.tracer(False) # 取消绘制动画 turtle.hideturtle() # 取消绘制光标 # 监听按键 主要监听键盘按键 turtle.listen() turtle.onkey(lambda: changed_dir(0, 10), "Up") turtle.onkey(lambda: changed_dir(0, -10), "Down") turtle.onkey(lambda: changed_dir(-10, 0), "Left") turtle.onkey(lambda: changed_dir(10, 0), "Right") # 蛇进行移动 snake_move() # 卡住画板 turtle.done()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。