• 使用Python语言制作贪吃蛇游戏,并制作成为exe可执行文件


    本项目为贪吃蛇游戏,上下左右控制蛇的行走路径,并将游戏打包为exe文件,可供其他没有python环境和代码的电脑 Play 游戏!

     

    目录

    一、项目成果

    二、项目架构

    三、项目代码

    四、环境搭建

    五、矢量图标库

    六、程序打包

    七、程序运行


    一、项目成果

     

    二、项目架构

    三、项目代码

    1. # -*- coding: utf-8 -*-
    2. # @Time : 2022/11/7 14:40
    3. # @Author : Tuomasi
    4. # @File : Snake.py
    5. # @CSDN : http://tuomasi.blog.csdn.net/
    6. import pygame
    7. import sys
    8. import random
    9. from pygame.locals import *
    10. class Snake(object):
    11. # 制作背景和蛇、果实的的颜色, 0-255, 0,0,0,是代表黑色, 255,255,255代表白色
    12. def __init__(self):
    13. self.black = pygame.Color(0, 0, 0)
    14. self.red = pygame.Color(255, 0, 0)
    15. self.white = pygame.Color(255, 255, 255)
    16. # 游戏结束
    17. def gameover(self):
    18. print("******游戏结束!******")
    19. pygame.quit()
    20. sys.exit()
    21. # 初始化
    22. def initialize(self):
    23. pygame.init()
    24. # 定义蛇运动的速度
    25. clock = pygame.time.Clock()
    26. # 定义一个游戏界面
    27. playSurface = pygame.display.set_mode((800, 600))
    28. # 设置界面名字
    29. pygame.display.set_caption('python贪吃蛇小游戏')
    30. # 初始化变量
    31. snakePosition = [80, 80] # 贪吃蛇起始位置,前面的参数数水平方向的距离,后面的参数是垂直方向的距离
    32. # 贪吃蛇的长度,设定为方块的三百,每个方块的长度为25
    33. snakebody = [[80, 80], [60, 80], [40, 80]]
    34. targetPosition = [200, 400] # 方块的初始位置
    35. targetflag = 1 # 定义一个标记,目的用来判断果实是否被吃掉
    36. direction = 'right' # 初始化运动方向
    37. changeDirection = direction # 改变方向变量
    38. self.main(snakebody, targetPosition, targetflag, direction, changeDirection, snakePosition, playSurface, clock)
    39. # 主函数
    40. def main(self, snakebody, targetPosition, targetflag, direction, changeDirection, snakePosition, playSurface,
    41. clock):
    42. while True:
    43. # 用循环来获得pygame中的所有事件
    44. for event in pygame.event.get():
    45. if event.type == QUIT:
    46. pygame.quit()
    47. sys.exit()
    48. # 创建一个键盘的事件
    49. elif event.type == KEYDOWN:
    50. # 判断键盘的方向
    51. if event.key == K_RIGHT:
    52. changeDirection = 'right'
    53. print('向右')
    54. if event.key == K_LEFT:
    55. changeDirection = 'left'
    56. print("向左")
    57. if event.key == K_DOWN:
    58. print('向下')
    59. changeDirection = 'down'
    60. if event.key == K_UP:
    61. print('向上')
    62. changeDirection = 'up'
    63. # 判断是否按下了esc键
    64. if event.key == K_ESCAPE:
    65. pygame.event.post(pygame.event.Event(QUIT))
    66. # 判断蛇的方向
    67. if changeDirection == 'left' and not direction == 'right':
    68. direction = changeDirection
    69. if changeDirection == 'right' and not direction == 'left':
    70. direction = changeDirection
    71. if changeDirection == 'down' and not direction == 'up':
    72. direction = changeDirection
    73. if changeDirection == 'up' and not direction == 'down':
    74. direction = changeDirection
    75. # 根据方向移动蛇头位置
    76. if direction == 'right':
    77. snakePosition[0] += 20
    78. if direction == 'left':
    79. snakePosition[0] -= 20
    80. if direction == 'up':
    81. snakePosition[1] -= 20
    82. if direction == 'down':
    83. snakePosition[1] += 20
    84. # 增加蛇的长度
    85. # 判断蛇是否吃掉了果实
    86. snakebody.insert(0, list(snakePosition))
    87. if snakePosition[0] == targetPosition[0] and snakePosition[1] == targetPosition[1]:
    88. targetflag = 0
    89. else:
    90. snakebody.pop()
    91. # 随机再生成一个新的方块
    92. if targetflag == 0:
    93. x = random.randrange(1, 40) # 水平方向
    94. y = random.randrange(1, 30) # 垂直方向
    95. targetPosition = [int(x * 20), int(y * 20)]
    96. targetflag = 1
    97. # 绘制显示图
    98. playSurface.fill(self.black) # 背景
    99. for position in snakebody:
    100. pygame.draw.rect(playSurface, self.white, Rect(position[0], position[1], 20, 20)) # 蛇的身体
    101. pygame.draw.rect(playSurface, self.red, Rect(targetPosition[0], targetPosition[1], 20, 20)) # 果实
    102. # 游戏结束
    103. pygame.display.flip()
    104. if snakePosition[0] > 900 or snakePosition[0] < 0:
    105. snake.gameover()
    106. elif snakePosition[1] > 800 or snakePosition[1] < 0:
    107. snake.gameover()
    108. for i in snakebody[1:]:
    109. if snakePosition[0] == i[0] and snakePosition[1] == i[1]:
    110. snake.gameover()
    111. # 控制游戏速度,值越大速度越快
    112. clock.tick(5)
    113. snake = Snake()
    114. snake.initialize()

    四、环境搭建

    安装pygame库

    pip install pygame -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
    

    安装pyinstaller库

    pip install pyinstaller -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

    五、矢量图标库

    1、https://www.iconsdb.com/

    这个网站可以直接下载  .ico 文件,下载后放在同级目录下,如上:项目架构图

    2、iconfont-阿里巴巴矢量图标库

    下载png等格式图片后,可以去在线图片转 ico 网站(https://www.easyicon.net/covert/),转换一下格式,下载后放在同级目录下,如上:项目架构图

    六、程序打包

    pyinstaller打包的语法为:

    pyinstaller -F -i 图标文件路径 .py文件路径
    

    但是在控制台运行后你可能会遇到:

     此报错为系统未找到pyinstaller程序,回到刚才安装pyinstaller的地方,找到这个目录处,pyinstaller被安装在了此处,在这个目录处可以看到这些包

     

     于是,我的命令行为:pyinstaller -F -i D:\pycharm\Snake\snake-5-32.ico D:\pycharm\Snake\Snake.py
    145 INFO: PyInstaller: 5.6.2

     打包完成后,看最下方提示,此提示为exe文件存放位置,如下

     

    七、程序运行

     找到路径文件后,exe程序打包完成,发给你的朋友,双击开始属于你们的快乐吧!


  • 相关阅读:
    NodeMCU ESP8266 的定时器使用以及非堵塞程序的实现
    ASM字节码插桩:打印方法名、入参、返回值、方法耗时
    第2/100天 阅读笔记
    STP生成树(端口状态+端口角色+收敛机制 )|||| STP优化技术( uplinkfast技术+Portfast技术+backbonefast技术 )详解
    spring ExpressionParser 四则运算表达式解析参数提取
    [附源码]java毕业设计流浪动物救助网站
    uvm factory机制的实现-转载
    登入验证安全 上(验证码、忘记密码、客户端验证)
    MATLAB中的数据类型
    自主实现qsort函数
  • 原文地址:https://blog.csdn.net/m0_54925305/article/details/127732654