手把手教你完成贪吃蛇的编写(Python)

优秀源码 无标签
0 1077
WIZ
WIZ 自成一派 2023-06-26 20:00:11
Lv:45级

游戏操作及游戏规则

  1. 游戏开始后,通过键盘上下左右键控制贪吃蛇移动寻找食物;
  2. 贪吃蛇每吃一个食物,身长会增加一个单位;
  3. 在正常模式中,贪吃蛇如果碰到墙面或咬到自身,则游戏失败;
  4. 在可穿墙模式中,贪吃蛇可以穿过墙面,但咬到自身后,游戏失败。

游戏总体设计

编译语言以及用到的库文件描述

Python语言

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),Python语言具有非常简洁且清晰的语法特点,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。目前,基于Python语言的相关技术正在飞速发展,用户数量急剧增大,相关的资源越来越多。

pygame

Pygame是跨平台Pyth,Pygame 作者是 Pete Shinners, 协议为 GNU Lesser General Public License。Pygame包含图像、声音。建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚。基于这样一个设想,所有需要的游戏功能和理念(主要是图像方面)都完全简化为游戏逻辑本身,所有的资源结构都可以由高级语言提供,如Python。

random

Random是产生随机数的库,即随机数发生器,random产生的是伪随机数或者说是用一种复杂的方法计算得到的序列值,因此每次运算时需要一个不同的种子值。种子值不同,得到的序列值也不同。

time

time库是Python中处理时间的标准库,用于计算机时间的表达,提供获取系统时间并格式化输出功能,提供系统级精确计时功能,也可用于程序性能分析。

sys

sys.exit([ arg ])用于程序的退出,sys.exit(n) 退出程序,正常退出时exit(0)。这是通过引发SystemExit 异常来实现的,因此遵循finally语句的子句所指定的清理操作try ,并且可以拦截外层的退出尝试。可选参数arg可以是一个整数,给出退出状态(默认为零)或其他类型的对象。如果它是整数,则零被认为是“成功终止”,并且任何非零值等视为“异常终止”。

游戏整体设计

  1. 定义贪吃蛇对象,包括蛇头和蛇身两个部分,蛇头单独设置,蛇身使用列表来存储;
  2. 定义食物对象,包括食物对象的初始化、随机颜色和随机位置的设置;
  3. 定义初始化界面,在该界面中设置文本为“正常模式”、“可穿墙模式”和“退出”的三个按钮供玩家选择;
  4. 定义正常模式,包括游戏窗口显示、主循环和判断贪吃蛇死亡的设置;
  5. 定义可穿墙模式,包括游戏窗口显示、主循环和判断贪吃蛇死亡的设置;
  6. 定义游戏结束窗口,包括窗口显示和最后得分显示的设置。

主要函数解析

new_food()函数

食物对象初始化函数,传入形参为贪吃蛇蛇头坐标。当贪吃蛇吃掉食物后,通过该函数生成新的食物。通过传入形参判断新生成的食物坐标是否与蛇头坐标相同,若相同则重新生成新的坐标。

start_game()函数

正常模式的主循环函数,通过该函数进行正常模式下贪吃蛇和食物的初始化、玩家控制贪吃蛇运动、蛇头和蛇身的判断更新和得分统计实现。

die_snake()函数

正常模式下贪吃蛇死亡判断函数,传入形参为贪吃蛇蛇头和蛇身坐标数据。在该函数中设置布尔型变量die_flag,若死亡设置为Ture并返回,没有死亡为False。通过遍历蛇身存储列表,判断蛇身坐标是否与蛇头坐标相同,若相同则判定贪吃蛇咬到自身,死亡。同时,判断贪吃蛇是否撞墙,及判断蛇头的x和y坐标是否窗体的宽高,若超过则死亡。

start_kgame()函数

可穿墙模式的主循环函数,通过该函数进行可穿墙模式下贪吃蛇和食物的初始化、玩家控制贪吃蛇运动、蛇头和蛇身的判断更新和得分统计实现。

through_snake()函数

可穿墙模式下贪吃蛇死亡判断函数,传入形参为贪吃蛇蛇头和蛇身坐标数据。在该函数中设置布尔型变量die_flag,若死亡设置为Ture并返回,没有死亡为False。通过遍历蛇身存储列表,判断蛇身坐标是否与蛇头坐标相同,若相同则判定贪吃蛇咬到自身,死亡。

show_end()函数

游戏结束时,结束界面设置函数。在该函数中进行结束界面窗体的初始化,在窗体中显示玩家的最终得分,并在改函数中调用pygame库quit方法,使该库停止工作。

into_game()函数

游戏初始界面实现函数,在该函数中进行游戏初始界面窗体的初始化。在该界面窗体中设置文本为“正常模式”、“可穿墙模式”和“退出”的三个点击按钮,通过设置循环,调用button函数(详细见6.2.8)监听玩家的点击。

button()函数

游戏初始界面按钮监听函数,在该函数中实现对玩家鼠标点击事件和键盘输入事件的监听。并根据玩家选择,运行按钮对应的触发函数。即点击“正常模式”按钮,运行正常模式的主循环函数,以此类推。

 主页面代码:


      if __name__ == '__main__':
         # 定义画布颜色
          white = (255, 255, 255)
          red = (200, 0, 0)
          green = (0, 128, 0)
          blue = (0, 202, 254)
          violte = (194, 8, 234)
          brightred = (255, 0, 0)
          brightgreen = (0, 255, 0)
          black = (0, 0, 0)
          grey = (129, 131, 129)
          score = 0
         # 设计窗口
         # 定义窗口大小
          width = 960
          height = 600
          window = pygame.display.set_mode((width, height))
         # 定义标题
          pygame.display.set_caption("贪吃蛇大冒险")
         # 定义背景图片
          init_background = pygame.image.load("image/init_bgimg.jpg")
          background = pygame.image.load("image/bgimg.jpg")
         # 背景音乐
          pygame.mixer.init()
          pygame.mixer.music.load("background.mp3")
          pygame.mixer.music.play(-1)
         # 创建时钟
          clock = pygame.time.Clock()
         # 初始化
          pygame.init()
         # 初始界面
          into_game()
  
 

运行截图:

 获取源码:GitHub - yyf0101/snake

楼主签名:DNSWIZ 站长故事
回帖
回复列表

    请遵守各国法律法规 严禁违规内容

    • QQ群:1140251126
    • Email:m@max.ooo
    • 本站可以自由发布外链
    • 本站域名皆为闲置域名,均可出售
    Hot posts
    01 迅雷推广激励平台:官方高收益网盘拉新赚钱项目 550
    02 kupid.ai和herahaven.com应该选哪个? 544
    03 a.icu b.icu c.icu d.icu 同时掉 514
    04 今天把所有的google广告去掉了 511
    05 aigc.cx又多了一个域名 503
    06 秀秀新米(已出) 501
    07 迅雷 12 精简绿色版(12.1.6.2780) 489
    08 Windows 11 LTSC 优化版 - placeholder(2025.02.27) 463
    09 deepseek给我的域名的建议 439
    10 音频文件转换软件 XRecode 3(1.164) 419
    推荐主机