python贪吃蛇程序_《贪吃蛇小游戏编程》之用Python语言开发,简单易懂

今天做一个Python版的贪吃蛇游戏,主要用到了pygame包。写这个程序的目的是针对Python语言练练手。使用的开发工具是Pycharm,程序代码如下,另外代码会同步到github一份。原创作品,未经允许不要转载。

动画效果:

5bafa40f4bfbfbed779654cd4b907a30aec31f1f.jpeg?token=939539f776502e2addd599ad6127f1ab

241f95cad1c8a78629aa65d35469443b72cf50d5.jpeg?token=020d1ca54daf35eee3ce47b360eb7d74

b90e7bec54e736d121130bf4af30c2c4d46269b4.jpeg?token=d8ab1ae852907e2e6d589a965b9e0b92

b7003af33a87e9508f7125642458de45fbf2b43f.jpeg?token=ebdcac620bdb76b717d71b3d4a17e1ac

00e93901213fb80ec4d0ab3205b1a228b83894bd.jpeg?token=44150c2f634d1cfe7ae69d6b57e478ad

94cad1c8a786c917eab20276fd5dfdc93ac757b6.jpeg?token=2bcb8a54493a3df0da216f9729aa1d0b

3c6d55fbb2fb4316bfd6eacd13c4cb2508f7d327.jpeg?token=b411ecb4d691a106f8c30677eeaa89d2

8ad4b31c8701a18bae550eb0ab4f8a0e2938fe7d.jpeg?token=eaf20f549c8e4a4aa3b22aced5d16dd6

b3fb43166d224f4a5a57b97c3a971d549922d17e.jpeg?token=fa7c67e4768076c4e136016913f773af

43a7d933c895d14316a4be4247900f045baf0763.jpeg?token=ece2593a21713229c4a2cec404d1c326

a8ec8a13632762d0d76dddcb938c85fc503dc6dd.jpeg?token=9e8e14564bda1ba730bcd5385960be4d

0b7b02087bf40ad131bce2f7634c9cd9a9ecce34.jpeg?token=fb2ed2607801e24d25a35642190de966

0b46f21fbe096b6364d3993739530a42eaf8ac72.jpeg?token=daefbebb344e41280b664dbec9b3be76

0b46f21fbe096b6359d4be7b39530a42eaf8acb7.jpeg?token=efc68a7b4f2285806d3fa69fa6a31e8a

1e30e924b899a9012c7e92a729f5877d0308f5bb.jpeg?token=6586770d931659c14e2545c0d15f75ef

# 4. 实现主体函数循环

def main(): # 4.01 使用全局变量 global snakeBody global infoList # 4.02 初始化窗口 init_playSurface() # 4.03 进入程序主循环 while True : init_span() # 4.03.01 初始化背景 init_snake() # 4.03.03 初始化蛇 init_apple() # 4.03.02 初始化苹果 display() # 4.03.04 更新界面显示(画的新图像需要重新显示) clear_score() # 4.03.05 清空成绩 # 4.03.06 循环以完成蛇不断地爬行 while True: # 每次循环,意味着蛇爬行一步,并且在每次循环中要读取键盘所按方向键,未按方向键则按原来方向继续爬行,如果改变了方向,则调整爬行方向 display() # 4.03.06.01 更新显示画面 exec_delay() # 4.03.06.02 爬行动作频次时钟控制,实现每一步之间的延时 getKeyboardDirection() # 4.03.06.03 读取蛇运动方向(当键盘按方向键后,direction 值会及时更新) nextSnakeHead = get_next_head_with_direction() # 4.03.06.04 得到下步蛇头要走的位置 if is_next_step_touch_the_wall(nextSnakeHead): break; # 4.03.06.05 遇到围墙,即将越界则结束 本局结束 if is_snake_next_head_cover_apple(nextSnakeHead): # 4.03.06.06 # 如果我们的贪吃蛇的位置和苹果重合了,说明吃到了苹果 add_snake_head(nextSnakeHead) # 4.03.06.06.01 新的蛇头数据放入蛇列表数据开头 draw_snake_head() # 4.03.06.06.02 画新的蛇头(身体不需要重新画) get_new_apple_position() # 4.03.06.06.03 # 获取新苹果位置 draw_apple() # 4.03.06.06.04 # 画新的苹果 increment_score() # 增加成绩 else : # 4.03.06.07 如果下一步没有遇到苹果 也没有遇到墙,那么可能是遇到了 空白区域 或者 遇到了自己的身体 clear_snake_tail() # 4.03.06.07.01 前行一步 意味着 自己原来的尾巴位置 应该 变成空白区域,所以删掉旧的尾巴 drop_snake_tail() # 4.03.06.07.02 if is_snake_next_head_cover_body(nextSnakeHead): break # 4.03.06.07.03 如果碰到了自己的身体则 本局结束 else :# 4.03.06.07.04 什么都没有碰到也没吃到苹果,则蛇头顺利前行一步,下一个位置变成蛇头 add_snake_head(nextSnakeHead) # 4.03.06.07.04.01 新的蛇头数据放入蛇列表数据开头 draw_snake_head() # 4.03.06.07.04.02 画新的蛇头(身体不需要重新画) # 4.03.07 打印游戏信息,包括分数 display_info(get_game_over_info(),"notosanscjkjp", 20, yellow, black)# 程序入口if __name__ == '__main__': main()

# 4.01 使用全局变量 global snakeBody global infoList # 4.02 初始化窗口 init_playSurface() # 4.03 进入程序主循环 while True : init_span() # 4.03.01 初始化背景 init_snake() # 4.03.03 初始化蛇 init_apple() # 4.03.02 初始化苹果 display() # 4.03.04 更新界面显示(画的新图像需要重新显示) clear_score() # 4.03.05 清空成绩 # 4.03.06 循环以完成蛇不断地爬行 while True: # 每次循环,意味着蛇爬行一步,并且在每次循环中要读取键盘所按方向键,未按方向键则按原来方向继续爬行,如果改变了方向,则调整爬行方向 display() # 4.03.06.01 更新显示画面 exec_delay() # 4.03.06.02 爬行动作频次时钟控制,实现每一步之间的延时 getKeyboardDirection() # 4.03.06.03 读取蛇运动方向(当键盘按方向键后,direction 值会及时更新) nextSnakeHead = get_next_head_with_direction() # 4.03.06.04 得到下步蛇头要走的位置 if is_next_step_touch_the_wall(nextSnakeHead): break; # 4.03.06.05 遇到围墙,即将越界则结束 本局结束 if is_snake_next_head_cover_apple(nextSnakeHead): # 4.03.06.06 # 如果我们的贪吃蛇的位置和苹果重合了,说明吃到了苹果 add_snake_head(nextSnakeHead) # 4.03.06.06.01 新的蛇头数据放入蛇列表数据开头 draw_snake_head() # 4.03.06.06.02 画新的蛇头(身体不需要重新画) get_new_apple_position() # 4.03.06.06.03 # 获取新苹果位置 draw_apple() # 4.03.06.06.04 # 画新的苹果 increment_score() # 增加成绩 else : # 4.03.06.07 如果下一步没有遇到苹果 也没有遇到墙,那么可能是遇到了 空白区域 或者 遇到了自己的身体 clear_snake_tail() # 4.03.06.07.01 前行一步 意味着 自己原来的尾巴位置 应该 变成空白区域,所以删掉旧的尾巴 drop_snake_tail() # 4.03.06.07.02 if is_snake_next_head_cover_body(nextSnakeHead): break # 4.03.06.07.03 如果碰到了自己的身体则 本局结束 else :# 4.03.06.07.04 什么都没有碰到也没吃到苹果,则蛇头顺利前行一步,下一个位置变成蛇头 add_snake_head(nextSnakeHead) # 4.03.06.07.04.01 新的蛇头数据放入蛇列表数据开头 draw_snake_head() # 4.03.06.07.04.02 画新的蛇头(身体不需要重新画) # 4.03.07 打印游戏信息,包括分数 display_info(get_game_over_info(),"notosanscjkjp", 20, yellow, black)# 程序入口if __name__ == '__main__': main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值