当前位置:   article > 正文

教你用322行Python代码编写贪吃蛇_python贪吃蛇编程代码

python贪吃蛇编程代码

目录

安装和导入 

规则

初始化

设定Surface,变量和显示数字的坐标 

函数

线程 

主要部分

总结

源码下载 


 贪吃蛇是一个很常见的小游戏,我们如何用Python去实现呢。


安装和导入 

  1. pip install pygame
  2. pip install keyboard
  3. pip install pickledb

通过命令提示符安装所需模块。(以上非Python代码)

  1. #导入
  2. import pygame, keyboard, random, threading, time, pickledb

这个程序用到了pygame作为显示模块,keyboard捕获键盘操,pickledb记录最高纪录。


规则

  1. #显示规则
  2. print()
  3. print('方向键控制方向')
  4. print('\'esc\'退出')
  5. print('\'alt\'暂停')
  6. print('\'space\'继续')
  7. print('每吃掉一个莓果,蛇身长长一格')
  8. print('撞到蛇身或窗口边缘即为死亡')
  9. print('死亡后\'esc\'退出,\'enter\'再来一局')

初始化

  1. #初始化
  2. pygame.init()
  3. #设定窗口
  4. screen = pygame.display.set_mode((500, 500))
  5. pygame.display.set_caption('Greedy Snake')

 执行以上代码就设定好了贪吃蛇的窗口。


设定Surface,变量和显示数字的坐标 

  1. #设定蛇身
  2. body = pygame.Surface((20, 20))
  3. body.fill('yellow')
  4. #设定莓果
  5. berries = pygame.Surface((20, 20))
  6. berries.fill('red')
  7. #设定数字方块(用于显示数字)
  8. block = pygame.Surface((4, 4))
  1. #设定变量
  2. T = 0
  3. db = pickledb.load('Mark.db', False)
  4. HI = db.get('HiMark')
  5. B = False

函数

  1. def keyname(key) :
  2. #键盘捕获
  3. global KEY
  4. KEY = key.name
  5. keyboard.on_press(keyname)

用on_press绑定了keyname后,当键盘按下时会执行keyname函数。(key.name是按键的名称)

  1. def snake() :
  2. #显示蛇身
  3. global path
  4. for xy in path :
  5. screen.blit(body, xy)
  6. def food() :
  7. #显示食物
  8. global fx, fy
  9. screen.blit(berries, (fx, fy))
  10. def eat() :
  11. #检测是否吃掉食物
  12. if (x, y) == (fx, fy) :
  13. return True
  14. else :
  15. return False
  16. def crash() :
  17. #检测是否碰撞
  18. if path.count((x, y)) != 0 :
  19. return True
  20. elif x < 0 or x > 480 or y < 0 or y > 480 :
  21. return True
  22. else :
  23. return False
  24. def count() :
  25. #计时线程函数
  26. global T
  27. while True :
  28. if B :
  29. time.sleep(1)
  30. T += 1
  31. def timer() :
  32. #显示时间
  33. global T, number
  34. a = T // 100
  35. b = T % 100 // 10
  36. c = T % 10
  37. a = number[a]
  38. b = number[b]
  39. c = number[c]
  40. X, Y = 6, 10
  41. block.fill('white')
  42. for n in (a, b, c) :
  43. for xy in n :
  44. x = X + xy[0] * 4
  45. y = Y + xy[1] * 4
  46. screen.blit(block, (x, y))
  47. X += 32
  48. def mark() :
  49. #显示分数
  50. global M, number
  51. a = M // 100
  52. b = M % 100 // 10
  53. c = M % 10
  54. a = number[a]
  55. b = number[b]
  56. c = number[c]
  57. X, Y = 395, 10
  58. block.fill('white')
  59. for n in (a, b, c) :
  60. for xy in n :
  61. x = X + xy[0] * 4
  62. y = Y + xy[1] * 4
  63. screen.blit(block, (x, y))
  64. X += 32
  65. def hi() :
  66. #显示最高纪录
  67. global HI, number
  68. a = HI // 100
  69. b = HI % 100 // 10
  70. c = HI % 10
  71. a = number[a]
  72. b = number[b]
  73. c = number[c]
  74. X, Y = 263, 10
  75. block.fill('grey')
  76. for n in (a, b, c) :
  77. for xy in n :
  78. x = X + xy[0] * 4
  79. y = Y + xy[1] * 4
  80. screen.blit(block, (x, y))
  81. X += 32

线程 

  1. #启动计时线程
  2. time_count_thread = threading.Thread(target = count)
  3. time_count_thread.start()

 线程可以在主线程的运行过程中运行,起到计时的作用。


主要部分

以下就是程序的主要部分,实现了对按键名称进行判断、蛇的移动、蛇吃掉食物后的生长和判断死亡。

  1. while True :
  2. #变量初始化
  3. KEY = 'up'
  4. lKEY = KEY
  5. x, y = 240, 240
  6. path = []
  7. path.append((x, y))
  8. fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20)
  9. while path.count((fx, fy)) != 0 :
  10. fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20)
  11. T = 0
  12. M = 0
  13. B = True
  14. while True :
  15. time.sleep(0.1)
  16. #检测是否按下退出按钮
  17. for event in pygame.event.get() :
  18. if event.type == pygame.QUIT :
  19. pygame.quit()
  20. exit()
  21. #检测键盘按键
  22. if (KEY == 'up' and lKEY != 'down') or (KEY == 'w' and lKEY != 's') :
  23. y -= 20
  24. lKEY = KEY
  25. elif (KEY == 'down' and lKEY != 'up') or (KEY == 's' and lKEY != 'w') :
  26. y += 20
  27. lKEY = KEY
  28. elif (KEY == 'left' and lKEY != 'right') or (KEY == 'a' and lKEY != 'd') :
  29. x -= 20
  30. lKEY = KEY
  31. elif (KEY == 'right' and lKEY != 'left') or (KEY == 'd' and lKEY != 'a') :
  32. x += 20
  33. lKEY = KEY
  34. elif KEY == 'alt' or KEY == 'right alt' :
  35. B = False
  36. while True :
  37. pygame.event.wait()
  38. if KEY == 'space' :
  39. KEY = lKEY
  40. B = True
  41. break
  42. elif KEY == 'esc' :
  43. pygame.quit()
  44. if M > HI :
  45. HI = M
  46. db.set('HiMark', HI)
  47. db.dump()
  48. exit()
  49. continue
  50. elif KEY == 'esc' :
  51. pygame.quit()
  52. if M > HI :
  53. HI = M
  54. db.set('HiMark', HI)
  55. db.dump()
  56. exit()
  57. else :
  58. KEY = lKEY
  59. continue
  60. #检测是否碰撞或吃掉食物
  61. if crash() :
  62. break
  63. if eat() :
  64. M += 1
  65. fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20)
  66. while path.count((fx, fy)) != 0 :
  67. fx, fy = random.randrange(20, 460, 20), random.randrange(20, 460, 20)
  68. else :
  69. del path[0]
  70. #更新屏幕内容
  71. path.append((x, y))
  72. screen.fill('black')
  73. snake()
  74. food()
  75. timer()
  76. mark()
  77. hi()
  78. pygame.display.flip()
  79. #保存最高纪录
  80. if M > HI :
  81. HI = M
  82. db.set('HiMark', HI)
  83. db.dump()
  84. B = False
  85. #检测是否退出或再来一局
  86. while True :
  87. event = pygame.event.wait()
  88. if event.type == pygame.QUIT :
  89. pygame.quit()
  90. exit()
  91. elif KEY == 'esc' :
  92. pygame.quit()
  93. exit()
  94. elif KEY == 'return' or KEY == 'enter' :
  95. break

总结

如果你将以上所有的代码按顺序编写在一些,就可以运行完整的贪吃蛇了。这些代码都很简单,适合初学者学习。

希望这篇文章对您有帮助,感谢浏览。

源码下载 

GitHub源码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/396545
推荐阅读
相关标签
  

闽ICP备14008679号