使用 Python Turtle 制作贪吃蛇游戏

发表于:2022-6-07 09:44

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:TeamCode    来源:稀土掘金

  贪吃蛇游戏是一款于 1976 年由格雷姆林工业(Gremlin Industries)开发,并由世嘉游戏(SEGA)发行的街机迷宫游戏。这款游戏曾经登上多款诺基亚黑白机,对上世纪的玩家来说颇有怀旧感。
  贪吃蛇的玩法
  玩家在贪吃蛇游戏中使用方向键操作贪吃蛇前进,尽可能收集食物取得高分。贪吃蛇在获取食物后,身体长度会进一步加长,而当玩家不小心撞向墙壁或自己时,游戏便结束。
  对 Python 初学者而言,玩法逻辑较为简单的贪吃蛇游戏正适合用来练习 Turtle 框架,而这款以 Python 为核心的游戏将会使用以下三个库:
  ·Turtle - 用于在虚拟画布中绘制图形
  · Time - 计算游戏中的用时
  · Random - 在 Python 中生成随机数字,对应随机出现的食物
  这篇教程将使用 Lightly 在线编写 Python 代码,无需下载任何应用或安装环境依赖即可在浏览器中编程。
  第一步:导入模块
  在开始其他编写其他代码前,我们需要使用 import 代码分别导入 turtle、time 及 random 等模块。由于这些模块都已预安装在 Python 中,我们只需在代码中导入即可。若模块缺失,你也可以在 Lightly 中使用 Quick Fix 进行快速安装。
  第二步:设置游戏界面
  完成模块导入后,我们需要绘制游戏窗口、蛇头及食物等游戏内容,同时也需要在顶部显示游戏得分。
  # 绘制窗口
  wn = turtle.Screen()
  wn.title("Snake Game")
  wn.bgcolor("blue")
  # 用户可以自行调整窗口的长度与宽度
  wn.setup(width=600, height=600)
  wn.tracer(0)
  # 蛇头
  head = turtle.Turtle()
  head.shape("square")
  head.color("white")
  head.penup()
  head.goto(0, 0)
  head.direction = "Stop"
  # 游戏中的食物
  food = turtle.Turtle()
  colors = random.choice(['red', 'green', 'black'])
  shapes = random.choice(['square', 'triangle', 'circle'])
  food.speed(0)
  food.shape(shapes)
  food.color(colors)
  food.penup()
  food.goto(0, 100)
  pen = turtle.Turtle()
  pen.speed(0)
  pen.shape("square")
  pen.color("white")
  pen.penup()
  pen.hideturtle()
  pen.goto(0, 250)
  pen.write("得分 : 0 最高得分 : 0", align="center",
  font=("candara", 24, "bold"))

  代码效果:

  第三步:监听按键
  添加物体后还需要监听按键,才能通过按键控制蛇的动作。在这个游戏中,我们使用 WASD 四键分别控制上下左右移动。
  # 设定按键方向
  def group():
      if head.direction != "down":
          head.direction = "up"
  def godown():
      if head.direction != "up":
          head.direction = "down"
  def goleft():
      if head.direction != "right":
          head.direction = "left"
  def goright():
      if head.direction != "left":
          head.direction = "right"
  def move():
      if head.direction == "up":
          y = head.ycor()
          head.sety(y+20)
      if head.direction == "down":
          y = head.ycor()
          head.sety(y-20)
      if head.direction == "left":
          x = head.xcor()
          head.setx(x-20)
      if head.direction == "right":
          x = head.xcor()
          head.setx(x+20)
  wn.listen()
  wn.onkeypress(group, "w")
  wn.onkeypress(godown, "s")
  wn.onkeypress(goleft, "a")
  wn.onkeypress(goright, "d")

  第四步:完善游戏机制
  我们现在已经可以通过键盘按键控制贪吃蛇移动,但我们还需要进一步添加游戏机制,让游戏变得更完善。例如:改变蛇身的长度和颜色、贪吃蛇吃下食物后计分、检查蛇头碰撞情况、计分并保存最高分等。
  游戏最终的效果:

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号