一.写程序

# -*- coding:utf-8 -*-
import random
import pygame
import sys
from pygame.locals import *pygame.init()
pygame.mixer.init()#创建窗口
ScreenX = 800
ScreenY = 800
ScreenSize = (ScreenX, ScreenY)
Screen = pygame.display.set_mode(ScreenSize, 0, 32)
pygame.display.set_caption("楚楚的 small snake")Difficulty = 11#背景音乐
pygame.time.delay(100)#等待1秒让mixer完成初始化pygame.mixer.music.load('D://game//a.mp3')
pygame.mixer.music.play(-1, 0.0) #第一个参数为播放次数,如果是-1表示循环播放,省略表示只播放1次。第二个参数和第三个参数分别表示播放的起始和结束位置。# 蛇
class snake():def __init__(self):self.Direction = K_RIGHTself.Body = []self.AddBody()self.AddBody()def AddBody(self):NewAddLeft, NewAddTop = (0, 0)if self.Body:NewAddLeft, NewAddTop = (self.Body[0].left, self.Body[0].top)NewAddBody = pygame.Rect(NewAddLeft, NewAddTop, 20, 20)if self.Direction == K_LEFT:if NewAddBody.left == 0:NewAddBody.left = 780else:NewAddBody.left -= 20elif self.Direction == K_RIGHT:if NewAddBody.left == 780:NewAddBody.left = 0else:NewAddBody.left += 20elif self.Direction == K_UP:if NewAddBody.top == 0:NewAddBody.top = 780else:NewAddBody.top -= 20elif self.Direction == K_DOWN:if NewAddBody.top == 780:NewAddBody.top = 0else:NewAddBody.top += 20self.Body.insert(0, NewAddBody)def DelBody(self):self.Body.pop()def IsDie(self):if self.Body[0] in self.Body[1:]:return Truereturn Falsedef Move(self):self.AddBody()self.DelBody()def ChangeDirection(self, Curkey):LR = [pygame.K_LEFT, pygame.K_RIGHT]UD = [pygame.K_UP, pygame.K_DOWN]if Curkey in LR + UD:if (Curkey in LR) and (self.Direction in LR):returnif (Curkey in UD) and (self.Direction in UD):returnself.Direction = Curkey# 食物
class food():def __init__(self):self.Obj = pygame.Rect(-20, 0, 20, 20)def Remove(self):self.Obj.x = -20def SendFood(self):if self.Obj.x == -20:AllPos = []for pos in range(20, ScreenX - 20, 20):AllPos.append(pos)self.Obj.left = random.choice(AllPos)self.Obj.top = random.choice(AllPos)# 难度选择及游戏
def GameMain():global DifficultyFPSClock = pygame.time.Clock()Score = 0Snake = snake()Food = food()BackgroungImg = pygame.image.load('D://game//b.jpg').convert()DifficultyChoiceImg = pygame.image.load('D://game//a.jpg').convert()ChoiceHintFont = pygame.font.SysFont('arial',35)ChoiceFont = pygame.font.SysFont('arial', 130)# DifficultyChoicewhile True:IsChoice = Falsefor event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()if event.type == KEYDOWN:if event.key == K_SPACE:IsChoice = Truebreakif event.type == KEYDOWN:if event.key == K_UP:Difficulty = Difficulty + 1elif event.key == K_DOWN:if Difficulty > 1:Difficulty = Difficulty - 1if IsChoice:break#按上下键选择你稀罕我的程度(小蛇的速度)按空格键开始你奇妙的旅程Screen.blit(DifficultyChoiceImg, (0, 0))ChoiceHintSurface = ChoiceHintFont.render('choose a difficulty(the degree of missing) by direction key:', True, (0, 0, 0))Screen.blit(ChoiceHintSurface, (30, 60))ChoiceSurface = ChoiceFont.render(str(Difficulty), True, (0, 0, 0))Screen.blit(ChoiceSurface, (620, 150))EntranceHintSurface = ChoiceHintFont.render('Press Space (journey of love) to enter the game(my heart):', True, (0, 0, 0))Screen.blit(EntranceHintSurface, (20, 650))pygame.display.update()ScoreFont = pygame.font.SysFont('arial', 30)while True:     # main game loopfor event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()if event.type == KEYDOWN:#ClickMusic.play()Snake.ChangeDirection(event.key)Screen.blit(BackgroungImg, (0, 0))pygame.draw.rect(Screen, (0, 0, 0), Food.Obj, 0)Snake.Move()for rect in Snake.Body:pygame.draw.rect(Screen, (0, 0, 0), rect, 0)if Snake.IsDie():return Scoreif Food.Obj == Snake.Body[0]:#EatFoodMusic.play()Score += DifficultyFood.Remove()Snake.AddBody()Food.SendFood()ScoreSurface = ScoreFont.render(str(Score), True, (0, 0, 0))Screen.blit(ScoreSurface, (0, 0))pygame.draw.rect(Screen, (0, 0, 0), Food.Obj, 0)pygame.display.update()FPSClock.tick(Difficulty)# 游戏结果
def GameResult(Score):if Score < 666 :GameResultBackgroundImg = pygame.image.load('D://game//c.jpg').convert()ScoreHintFont = pygame.font.SysFont('arial', 30)ScoreFont = pygame.font.SysFont('arial', 150)while True:for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()if event.type == KEYDOWN:if event.key == K_SPACE:return TrueScreen.blit(GameResultBackgroundImg, (0, 0))ChoiceHintSurface = ScoreHintFont.render('Your Score / the degree of your beauty is:', True, (0, 0, 0))Screen.blit(ChoiceHintSurface, (100, 50))ChoiceSurface = ScoreFont.render(str(Score), True, (0, 0, 0))Screen.blit(ChoiceSurface, (450, 100))EntranceHintSurface = ScoreHintFont.render('Press Space (journey of love) to restart the game', True,(0, 0, 0))Screen.blit(EntranceHintSurface, (50, 650))pygame.display.update()else:GameResultBackgroundImg = pygame.image.load('D://game//e.jpg').convert()ScoreHintFont = pygame.font.SysFont('arial', 30)ScoreFont = pygame.font.SysFont('arial', 150)while True:for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()if event.type == KEYDOWN:if event.key == K_SPACE:return TrueScreen.blit(GameResultBackgroundImg, (0, 0))ChoiceHintSurface = ScoreHintFont.render('Your Score / the degree of your beauty is:', True, (0, 0, 0))Screen.blit(ChoiceHintSurface, (40,50))ChoiceSurface = ScoreFont.render(str(Score), True, (0, 0, 0))Screen.blit(ChoiceSurface, (600, 5))EntranceHintSurface = ScoreHintFont.render('chuchu,I miss you !!!', True, (0, 0, 0))Screen.blit(EntranceHintSurface, (50, 480))pygame.display.update()if __name__ == '__main__':flag = Truewhile flag:Score = GameMain()flag = GameResult(Score)

二,执行效果

三.将python打包成exe文件(复杂安装)

1、环境

Windows 10 x64

Python 3.6.4

需要包
pyinstaller 3.3

pywin32

这里需要注意!!!

2.pywin32安装

在网上找很多使用pyinstaller库将python程序打包成exe的方法都是需要python3.3版本以前的。而python3.6想要打包pyinstaller库不支持,但是经过很多轮尝试之后发现pyinstaller 3.3这个版本的包可以成功将python3.6版本的程序打包成exe。

还有一点需要注意,打包成exe都需要pywin32这个包,但是这个包很顽固,python2可以很好安装,但是python3安装时出现很多问题,需要下载本地安装。但是pywin32本地安装不像其它库直接运行python setup.py install就行,pywin32这个包需要下载一个exe文件的安装包然后点击运行才行。pywin32包连接:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/ 下载时需注意自己python是32位的还是64位的,比如我的是python3.6 64位,我就下载这个:

python3.6无法安装PYWIN32的问题

下载pywin32后,点击运行,会发现出现下面的界面

很多同学到这个界面时,会报错,提示检测不到系统安装了python3.6!!!,而且不能手动添加路径。这个原因是你的python3.6不在系统的注册表中,所以需要写一个脚本把python加入到系统注册表,脚本文件在这sys.py。简单运行该sys.py程序后,就能添加python3.6到系统注册表了。下一步就是安装pywin32这个包了,还是像上面,运行该exe包,这时候就能出现上面那个能检测到python目录的界面,一直点击下一步,完成。

import sys
from winreg import *# tweak as necessary
version = sys.version[:3]
installpath = sys.prefixregpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (installpath, installpath, installpath
)def RegisterPy():try:reg = OpenKey(HKEY_CURRENT_USER, regpath)except EnvironmentError as e:try:reg = CreateKey(HKEY_CURRENT_USER, regpath)SetValue(reg, installkey, REG_SZ, installpath)SetValue(reg, pythonkey, REG_SZ, pythonpath)CloseKey(reg)except:print ("*** Unable to register!")returnprint (" Python", version, "is now registered!")returnif (QueryValue(reg, installkey) == installpath andQueryValue(reg, pythonkey) == pythonpath):CloseKey(reg)print ("=== Python", version, "is already registered!")returnCloseKey(reg)print ("*** Unable to register!")print ("*** You probably have another Python installation!")if __name__ == "__main__":RegisterPy()

3.pyinstaller 3.3安装

3.1.pip。

首先直接用pip安装的pyinstaller是3.2.1版本(我这是17年11月份的情况,后来可能自动安装更高版本),但是pyinstaller 3.2.1不能打包成exe,会出现很多溢出错误。

3.2.替换。

所以需要更新包,网上很多人说去github上下载最新版的pyinstaller,地址:https://github.com/pyinstaller/pyinstaller,下载后解压安装运行该包,然后将其中的PyInstaller 文件夹 复制到你安装pyinstaller的相应目录Python36\Lib\site-packages,进行替换。

四.将python打包成exe文件(简易安装)

环境:

python 3.6.4pyinstaller 3.4pywin32上述包安装后还是会出问题,跟新包 setuptools
pip install --upgrade  setuptools

步骤

1.准备我的chuchu_small_snake.py

注意:python里面的文件目录必须和压缩成.exe文件的目录一致(图片必须放在相应的目录下一起形成整个文件)

2,将chuchu_small_snake.py放到目录下。 
3,在CMD命令行进入该目录,并执行命令:

4.文件查看

一定要在指定目录下(与代码中音乐图片目录相同)查看有效!!!

pyinstaller -F chuchu_small_snake.py

执行效果如下:

制作小游戏贪吃蛇即解决将python制作成exe相关推荐

  1. 【从入门到入土系列】C语言制作小游戏-贪吃蛇:Copy+运行即可另附注释

    系列文章 本系列持续更新中,欢迎您的访问! 系列简介 本系列由唐文疏撰写,负责记录博主的学习生涯中的一点一滴.独乐乐不如众乐乐,故此分享给大家.欢迎大家一起讨论.学习和批评指点. 博主只是一个普普通通 ...

  2. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

  3. 微信小游戏——贪吃蛇

    博客简介 本篇博客介绍的是微信小游戏贪吃蛇的案例,详细的开发过程,并且提供代码压缩包下载. 案例简介 布局 构建对象 响应事件 蛇头对象的移动 蛇身的移动 食物刷新 绘制得分 碰撞检验 开始界面和结束 ...

  4. JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)

    目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1  ...

  5. 小游戏贪吃蛇的c++源代码

    小游戏贪吃蛇的c++源代码,快来看看,还带解释 #include #include #include #include #include <conio.h> #include #inclu ...

  6. C#winform 经典小游戏贪吃蛇V1.0(一)

    关于V1.0   为什么我给这个版本定义为V1.0嘞,因为在这个版本中仅仅实现了蛇的自动行进,按键对蛇的行进方向的操作和吃掉食物蛇身的增长等操作. 但是任何事情都必须一步一步来,当我们完成这个乞丐版的 ...

  7. Python命令行小游戏—贪吃蛇

    Python命令行小游戏-贪吃蛇 前言 一.贪吃蛇游戏初始界面及地图 1.游戏初始界面 2.游戏地图 二.命令符的设置.输出刷新和按键检测 1.库支持 2.c语言代码 3.Python代码(变量初始化 ...

  8. 我的小游戏——贪吃蛇

    我的小游戏--贪吃蛇 简介 最近学习了Java的GUI编程写一个贪吃蛇的游戏来玩玩. 游戏主要涉及到Java的GUI编程和多线程等技术. 游戏一共有两种模式:窗墙模式和撞墙模式,默认是窗墙模式,选择不 ...

  9. GUI编程详解:小游戏贪吃蛇

    GUI编程 1.简介 Gui的核心技术:Swing.AWT 界面不美观 需要jre环境 为什么要学习? 可以写出自己想要的小工具 工作时候,也可能需要维护到swing界面 了解MVC架构,了解监听 ( ...

  10. 做一个简单的java小游戏--贪吃蛇

    做一个简单的java小游戏–贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/article/detail ...

最新文章

  1. 从面试角度分析ArrayList源码
  2. What’s the Difference between a Hue, Tint, Shade and Tone ?
  3. linux转mysql_转linux下mysql命令
  4. Java设计模式-Proxy代理模式
  5. 【AI初识境】给深度学习新手做项目的10个建议
  6. 杭十四计算机教室,杭十四中学生做了个图书馆智能机器人
  7. 第一百二十三期:免费在线制图神器!不上水印支持中文版,GitHub标星已破1万2
  8. 如何ping端口_干货 | 如何正确处理常见的8大网络故障
  9. [UE4]函数和事件的区别
  10. 【服务器防护】centos iptables 防火墙设置 mac过滤
  11. SQL进阶六:字符串函数
  12. golang语言os.Stat()用法及功能
  13. Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE
  14. [A133 Android11] 连接pc板子掉电
  15. 《信号完整性分析》的读书笔记和总结
  16. 微信运动小红心点赞脚本
  17. html整体结构图,用html+css制作的组织结构图
  18. 受约束的 Delaunay 2D
  19. ElasticSearch自定义分析器(custom analyzer)
  20. node-sass 替换为 sass

热门文章

  1. tomcat 日志catalina.out 按天自动分割 设定时任务定时清除
  2. Pure Storage到底是一家怎样的企业?
  3. 再议FastReport.NET(转)
  4. 【转】从CSDN的趣味题学C# 3.0
  5. SQL Server中SMO备份数据库进度条不显示?
  6. MySQL数据以全量和增量方式,同步到ES搜索引擎
  7. Linux设备管理(三):sysfs文件系统的功能及其应用
  8. 十八、完成登录与注册页面的前端
  9. Codeforces Round #442 (Div. 2) D. Olya and Energy Drinks
  10. hihoCoder - 1079 - 离散化 (线段树 + 离散化)