热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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


 

目录

一、项目成果

二、项目架构

三、项目代码

四、环境搭建

五、矢量图标库

六、程序打包

七、程序运行




一、项目成果

 


二、项目架构


三、项目代码

# -*- coding: utf-8 -*-
# @Time : 2022/11/7 14:40
# @Author : Tuomasi
# @File : Snake.py
# @CSDN : http://tuomasi.blog.csdn.net/import pygame
import sys
import random
from pygame.locals import *class Snake(object):# 制作背景和蛇、果实的的颜色, 0-255, 0,0,0,是代表黑色, 255,255,255代表白色def __init__(self):self.black = pygame.Color(0, 0, 0)self.red = pygame.Color(255, 0, 0)self.white = pygame.Color(255, 255, 255)# 游戏结束def gameover(self):print("******游戏结束!******")pygame.quit()sys.exit()# 初始化def initialize(self):pygame.init()# 定义蛇运动的速度clock = pygame.time.Clock()# 定义一个游戏界面playSurface = pygame.display.set_mode((800, 600))# 设置界面名字pygame.display.set_caption(&#39;python贪吃蛇小游戏&#39;)# 初始化变量snakePosition = [80, 80] # 贪吃蛇起始位置,前面的参数数水平方向的距离,后面的参数是垂直方向的距离# 贪吃蛇的长度,设定为方块的三百,每个方块的长度为25snakebody = [[80, 80], [60, 80], [40, 80]]targetPosition = [200, 400] # 方块的初始位置targetflag = 1 # 定义一个标记,目的用来判断果实是否被吃掉direction = &#39;right&#39; # 初始化运动方向changeDirection = direction # 改变方向变量self.main(snakebody, targetPosition, targetflag, direction, changeDirection, snakePosition, playSurface, clock)# 主函数def main(self, snakebody, targetPosition, targetflag, direction, changeDirection, snakePosition, playSurface,clock):while True:# 用循环来获得pygame中的所有事件for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()# 创建一个键盘的事件elif event.type == KEYDOWN:# 判断键盘的方向if event.key == K_RIGHT:changeDirection = &#39;right&#39;print(&#39;向右&#39;)if event.key == K_LEFT:changeDirection = &#39;left&#39;print("向左")if event.key == K_DOWN:print(&#39;向下&#39;)changeDirection = &#39;down&#39;if event.key == K_UP:print(&#39;向上&#39;)changeDirection = &#39;up&#39;# 判断是否按下了esc键if event.key == K_ESCAPE:pygame.event.post(pygame.event.Event(QUIT))# 判断蛇的方向if changeDirection == &#39;left&#39; and not direction == &#39;right&#39;:direction = changeDirectionif changeDirection == &#39;right&#39; and not direction == &#39;left&#39;:direction = changeDirectionif changeDirection == &#39;down&#39; and not direction == &#39;up&#39;:direction = changeDirectionif changeDirection == &#39;up&#39; and not direction == &#39;down&#39;:direction = changeDirection# 根据方向移动蛇头位置if direction == &#39;right&#39;:snakePosition[0] += 20if direction == &#39;left&#39;:snakePosition[0] -= 20if direction == &#39;up&#39;:snakePosition[1] -= 20if direction == &#39;down&#39;:snakePosition[1] += 20# 增加蛇的长度# 判断蛇是否吃掉了果实snakebody.insert(0, list(snakePosition))if snakePosition[0] == targetPosition[0] and snakePosition[1] == targetPosition[1]:targetflag = 0else:snakebody.pop()# 随机再生成一个新的方块if targetflag == 0:x = random.randrange(1, 40) # 水平方向y = random.randrange(1, 30) # 垂直方向targetPosition = [int(x * 20), int(y * 20)]targetflag = 1# 绘制显示图playSurface.fill(self.black) # 背景for position in snakebody:pygame.draw.rect(playSurface, self.white, Rect(position[0], position[1], 20, 20)) # 蛇的身体pygame.draw.rect(playSurface, self.red, Rect(targetPosition[0], targetPosition[1], 20, 20)) # 果实# 游戏结束pygame.display.flip()if snakePosition[0] > 900 or snakePosition[0] <0:snake.gameover()elif snakePosition[1] > 800 or snakePosition[1] <0:snake.gameover()for i in snakebody[1:]:if snakePosition[0] == i[0] and snakePosition[1] == i[1]:snake.gameover()# 控制游戏速度,值越大速度越快clock.tick(5)snake = Snake()
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程序打包完成,发给你的朋友,双击开始属于你们的快乐吧!





推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
author-avatar
Sadness_小妖_619
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有