python贪吃蛇代码示例(实测可运行)
贪吃蛇经典街机游戏python贪吃蛇代码示例。使用箭头按键进行导航和食用绿色食物。每次食用食物时,蛇的身体都会变得更长。避免吃掉自己或撞墙!
"""Snake, classic arcade game. Exercises 1. How do you make the snake faster or slower? 2. How can you make the snake go around the edges? 3. How would you move the food? 4. Change the snake to respond to mouse clicks. """ from random import randrange from turtle import * from freegames import square, vector food = vector(0, 0) snake = [vector(10, 0)] aim = vector(0, -10) def change(x, y): """Change snake direction.""" aim.x = x aim.y = y def inside(head): """Return True if head inside boundaries.""" return -200 < head.x < 190 and -200 < head.y < 190 def move(): """Move snake forward one segment.""" head = snake[-1].copy() head.move(aim) if not inside(head) or head in snake: square(head.x, head.y, 9, 'red') update() return snake.append(head) if head == food: print('Snake:', len(snake)) food.x = randrange(-15, 15) * 10 food.y = randrange(-15, 15) * 10 else: snake.pop(0) clear() for body in snake: square(body.x, body.y, 9, 'black') square(food.x, food.y, 9, 'green') update() ontimer(move, 100) setup(420, 420, 370, 0) hideturtle() tracer(False) listen() onkey(lambda: change(10, 0), 'Right') onkey(lambda: change(-10, 0), 'Left') onkey(lambda: change(0, 10), 'Up') onkey(lambda: change(0, -10), 'Down') move() done()
这段代码是一个经典的贪吃蛇(Snake)游戏的实现,使用Python的turtle库和自定义的freegames库来创建游戏界面和功能。
代码中首先导入了需要使用的库和模块,包括randrange
函数用于生成随机数,turtle
库用于创建游戏界面,square
函数用于绘制方块,vector
类用于表示蛇的位置和方向。
接下来定义了一些变量,包括蛇的初始位置和方向(snake和aim),以及食物的位置(food)。
然后定义了几个函数:
change
函数用于改变蛇的方向,根据传入的参数修改aim的x和y值,从而控制蛇的移动方向。inside
函数用于判断蛇头是否在游戏界面内,如果在界面内则返回True,否则返回False。move
函数用于移动蛇的位置,首先复制蛇头的位置,并根据aim的值移动蛇头到新的位置。然后判断蛇头是否超出界限或者与蛇身重叠,如果是则游戏结束,显示蛇头的位置为红色方块。如果蛇头与食物位置重合,则蛇的长度加一,并随机生成新的食物位置。否则,移除蛇尾的位置,更新游戏界面。clear
函数用于清除之前的游戏界面。square
函数用于绘制方块,根据传入的位置和颜色参数,在游戏界面上绘制一个方块。update
函数用于更新游戏界面的显示。ontimer
函数用于定时调用move
函数,实现蛇的连续移动。
接下来设置游戏界面的大小、隐藏光标、关闭动画效果,并监听键盘事件,根据不同的按键调用change
函数改变蛇的方向。
最后调用move
函数开始游戏,调用done
函数表示游戏结束。
这段代码实现了一个简单的贪吃蛇游戏,玩家通过控制方向键来移动蛇,目标是吃到尽可能多的食物,蛇的长度会随着吃食物而增长,如果蛇头碰到边界或者与自己的身体相撞,则游戏结束。