Python100行-贪吃蛇小游戏
更新时间:2022-08-12 09:30:06 作者:云寺手游
今天来尝试下用python写一个贪吃小游戏,哈哈哈哈,毕竟贪吃蛇,大家小时候都玩过,但现在却有机会自己实现一个!!!
效果图:
效果图
下面是学习的过程啦!1.如何画turtle画一个正方形?其实就是一个点,往右,往下,往左,往上,回到原点..
# 坐标,长度,颜色名称 def square(x, y, size, name): import turtle turtle.up() turtle.goto(x, y) turtle.down() turtle.color(name) turtle.begin_fill() for count in range(4): turtle.forward(size) turtle.left(90) turtle.end_fill()然后我们就可以画出一个正方啦。
2.画出多个连续的正方形,来模拟蛇的身子。蛇的身子其实就是一个一个方块列表,所以我们来尝试画多个方块。
snake = [[0,0],[0,10]] for body in snake: square(body[0], body[1], 10, 'black') 3.那我们如何模拟蛇的移动呢?3.1蛇需要可以朝四个方向移动。x,y代表坐标
(10,0):代表向右移动(-10,0):代表向左移动(0,10):代表向上移动(0,-10):代表向下移动aim = [0, 10] # 设置方向 def change_direction(x, y): aim[0] = x aim[1] = y 3.2有了移动方向,我们就可以开始写移动的逻辑啦思路是这样的:我们把列表看成一条蛇,这条蛇的右边在右边,尾部在左边!
移动时,我们消除尾部的一个方块。根据方向,在头部添加一个方块。然后在刷新动画。就可以完成蛇移动的效果啦。下面是代码
import copy def snake_move(): head = copy.deepcopy(snake[-1]) # 深度拷贝一份头部的方块 head = [head[0] + aim[0], head[1] + aim[1]] # 头部的方块,朝一方向移动 snake.append(head) # 蛇的头部添加这个新的方块 snake.pop(0) # 蛇的尾部,去除一个方块 turtle.clear()# 清除方块 # 重新画一遍蛇的整个身子 for body in snake: square(body[0], body[1], 10, 'black') turtle.update()# 更新动画 turtle.ontimer(snake_move, 300) turtle.hideturtle() turtle.tracer(False) 3.3现在蛇就可以移动啦,但是我们还不能控制它的方向!我们来监听键盘的按键,用上下左右来控制蛇的移动!
turtle.listen() turtle.onkey(lambda: change_direction(10, 0), "Right") # 右 turtle.onkey(lambda: change_direction(-10, 0), "Left") # 左 turtle.onkey(lambda: change_direction(0, 10), "Up") # 上 turtle.onkey(lambda: change_direction(0, -10), "Down") # 下 4.设置随机产生食物首先一个食物被吃掉时,我们就在一个指定的区间里,随机产生食物。
if head == food: # 如果蛇头吃到了食物,我们就不删除蛇的尾巴最后一个方块 print("snake的长度", len(snake)) food[0] = randrange(-15, 15)*10 # 设置食物的区间,必须是10的倍数 food[1] = randrange(-15, 15)*10 else: snake.pop(0) # 蛇的尾部,去除一个方块 5.设置边界条件当蛇碰到自己或者当蛇碰到边界的时候,我们就算输啦!!
# 先给屏幕设定一个初始值500*500 turtle.setup(500, 500) # 设置边界条件判断 def inside(head): return -250 < head[0] < 250 and -250 < head[1] < 250 # 在蛇移动的过程中进行判断,如果发生碰撞我们就把头部标记为红色,结束游戏。 if head in snake or not inside(head): print(head) square(head[0], head[1], 10, 'red') turtle.update() 6.结尾这样我们就我完成了一个简单的贪吃蛇的游戏啦,我们还可以调成速度,记录分数,还有更多的功能,大家可以自行添加。