python和pygame_用Python和Pygame写游戏(发布)

这是一个使用Python和Pygame创建游戏的脚本,并通过py2exe工具将其打包成可执行文件的过程。脚本首先导入所需模块,然后定义了一个Hack函数以包含特定的非系统DLL。接着,定义了一个自定义的pygame2exe类,用于拷贝pygame的默认字体。最后,创建了一个BuildExe类,包含了游戏的各种元数据和配置,如游戏名、版本、作者信息,以及如何打包额外的资源文件和排除不需要的模块。
摘要由CSDN通过智能技术生成

#!python

# -*- coding: gb2312 -*-

# 这个脚本专为pygame优化,使用py2exe打包代码和资源至dist目录

#

# 使用中若有问题,可以留言至:

#  http://eyehere.net/2011/python-pygame-novice-professional-py2exe/

#

# 安装需求:

#         python, pygame, py2exe 都应该装上

# 使用方法:

#         1: 修改此文件,指定需要打包的.py和对应数据

#         2: python pygame2exe.py

#         3: 在dist文件夹中,enjoy it~

try:

from distutils.core import setup

import py2exe, pygame

from modulefinder import Module

import glob, fnmatch

import sys, os, shutil

except ImportError, message:

raise SystemExit,  "Sorry, you must install py2exe, pygame. %s" % message

# 这个函数是用来判断DLL是否是系统提供的(是的话就不用打包)

origIsSystemDLL = py2exe.build_exe.isSystemDLL

def isSystemDLL(pathname):

# 需要hack一下,freetype和ogg的dll并不是系统DLL

if os.path.basename(pathname).lower() in ("libfreetype-6.dll", "libogg-0.dll", "sdl_ttf.dll"):

return 0

return origIsSystemDLL(pathname)

# 把Hack过的函数重新写回去

py2exe.build_exe.isSystemDLL = isSystemDLL

# 这个新的类也是一个Hack,使得pygame的默认字体会被拷贝

class pygame2exe(py2exe.build_exe.py2exe):

def copy_extensions(self, extensions):

# 获得pygame默认字体

pygamedir = os.path.split(pygame.base.__file__)[0]

pygame_default_font = os.path.join(pygamedir, pygame.font.get_default_font())

# 加入拷贝文件列表

extensions.append(Module("pygame.font", pygame_default_font))

py2exe.build_exe.py2exe.copy_extensions(self, extensions)

# 这个类是我们真正做事情的部分

class BuildExe:

def __init__(self):

#------------------------------------------------------#

##### 对于一个新的游戏程序,需要修改这里的各个参数 #####

#------------------------------------------------------#

# 起始py文件

self.script = "MyGames.py"

# 游戏名

self.project_name = "MyGames"

# 游戏site

self.project_url = "about:none"

# 游戏版本

self.project_version = "0.0"

# 游戏许可

self.license = "MyGames License"

# 游戏作者

self.author_name = "xishui"

# 联系电邮

self.author_email = "blog@eyehere.net"

# 游戏版权

self.copyright = "Copyright (c) 3000 xishui."

# 游戏描述

self.project_description = "MyGames Description"

# 游戏图标(None的话使用pygame的默认图标)

self.icon_file = None

# 额外需要拷贝的文件、文件夹(图片,音频等)

self.extra_datas = []

# 额外需要的python库名

self.extra_modules = []

# 需要排除的python库

self.exclude_modules = []

# 额外需要排除的dll

self.exclude_dll = ['']

# 需要加入的py文件

self.extra_scripts = []

# 打包Zip文件名(None的话,打包到exe文件中)

self.zipfile_name = None

# 生成文件夹

self.dist_dir ='dist'

def opj(self, *args):

path = os.path.join(*args)

return os.path.normpath(path)

def find_data_files(self, srcdir, *wildcards, **kw):

# 从源文件夹内获取文件

def walk_helper(arg, dirname, files):

# 当然你使用其他的版本控制工具什么的,也可以加进来

if '.svn' in dirname:

return

names = []

lst, wildcards = arg

for wc in wildcards:

wc_name = self.opj(dirname, wc)

for f in files:

filename = self.opj(dirname, f)

if fnmatch.fnmatch(filename, wc_name) and not os.path.isdir(filename):

names.append(filename)

if names:

lst.append( (dirname, names ) )

file_list = []

recursive = kw.get('recursive', True)

if recursive:

os.path.walk(srcdir, walk_helper, (file_list, wildcards))

else:

walk_helper((file_list, wildcards),

srcdir,

[os.path.basename(f) for f in glob.glob(self.opj(srcdir, '*'))])

return file_list

def run(self):

if os.path.isdir(self.dist_dir): # 删除上次的生成结果

shutil.rmtree(self.dist_dir)

# 获得默认图标

if self.icon_file == None:

path = os.path.split(pygame.__file__)[0]

self.icon_file = os.path.join(path, 'pygame.ico')

# 获得需要打包的数据文件

extra_datas = []

for data in self.extra_datas:

if os.path.isdir(data):

extra_datas.extend(self.find_data_files(data, '*'))

else:

extra_datas.append(('.', [data]))

# 开始打包exe

setup(

cmdclass = {'py2exe': pygame2exe},

version = self.project_version,

description = self.project_description,

name = self.project_name,

url = self.project_url,

author = self.author_name,

author_email = self.author_email,

license = self.license,

# 默认生成窗口程序,如果需要生成终端程序(debug阶段),使用:

# console = [{

windows = [{

'script': self.script,

'icon_resources': [(0, self.icon_file)],

'copyright': self.copyright

}],

options = {'py2exe': {'optimize': 2, 'bundle_files': 1,

'compressed': True,

'excludes': self.exclude_modules,

'packages': self.extra_modules,

'dist_dir': self.dist_dir,

'dll_excludes': self.exclude_dll,

'includes': self.extra_scripts} },

zipfile = self.zipfile_name,

data_files = extra_datas,

)

if os.path.isdir('build'): # 清除build文件夹

shutil.rmtree('build')

if __name__ == '__main__':

if len(sys.argv) < 2:

sys.argv.append('py2exe')

BuildExe().run()

raw_input("Finished! Press any key to exit.")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
玩法 1)不设过关卡的设置,砖块是一层层压下来的,随着时间或者分数的推移,压的速度变快,每一层生成的砖的均衡的生命值在不断的提高,记录玩家所获得的最高分。 2)两边的墙会随着玩家分数的提高,逐步的变软,最终消失。消失的时候两边的墙会变成两块挡板,也需要玩家的控制,当球在左右两边没有接住的时候,损失生命值。 3)挡板也是有生命的,随着球的不断的打击,挡板的生命值也在不断的减少,需要补充道具掉下来的生命值,不然也会死亡。(现在不处理) 4)球有三种能量类型,火球,冰球,电球,相对应,挡板也有三种类型。每种类型对砖和挡板造成的伤害会不同,例如火球是一种范围伤害,冰球可以降低挡板移动的速度。(还是设想) 挡板三种能量类型有不同的性质,挡板可以吃道具变形(或者特定分数强制变形)。 火球能量类型的挡板的速度,加速度,摩擦力都比较适中,容易控制,但是生命最大值比较小。 冰球能量类型的挡板的加速度,摩擦力,最大的速度都很大,虽然不容易控制,但是生命值最大。 电球能量类型的挡板的加速度,和最大速度都是最大的,摩擦力比较小,很容易达到非常快的速度,适合与喜欢高速的玩家。 挡板吃到掉落的物品能够改变能量类型,球落到挡板上的时候改变成同样的能量类型。 6)物品能够改变生命值,加速度和能量类型。
PythonPygame游戏-从入门到精通 中文pdf版本 部分目录如下: 系统学习部分 用PythonPygame游戏-从入门到精通(1) Pygame的历史,安装Pygame,第一个Pygame脚本 用PythonPygame游戏-从入门到精通(2) 理解游戏中的事件 用PythonPygame游戏-从入门到精通(3) Pygmae的屏幕显示 用PythonPygame游戏-从入门到精通(4) 使用字体模块,Pygame 的错误处理 用PythonPygame游戏-从入门到精通(5) 像素和颜色 用PythonPygame游戏-从入门到精通(6) 使用图像,理解Surface 用PythonPygame游戏-从入门到精通(7) 绘制图形 用PythonPygame游戏-从入门到精通(8) 产生动画和控制帧率 用PythonPygame游戏-从入门到精通(9) 向量基础 用PythonPygame游戏-从入门到精通(10) 用户输入 用PythonPygame游戏-从入门到精通(11) 使用鼠标控制精灵。一个在鼠标旁不断游动的小鱼的例程。 用PythonPygame游戏-从入门到精通(12) 手柄操作,暂无 用PythonPygame游戏-从入门到精通(13) AI初探 用PythonPygame游戏-从入门到精通(14) 状态机 用PythonPygame游戏-从入门到精通(15) 开始AI编程 用PythonPygame游戏-从入门到精通(16) AI编程总结。一个蚂蚁采集食物,攻击蜘蛛的系统模拟例程。 用PythonPygame游戏-从入门到精通(17) 3D基础 用PythonPygame游戏-从入门到精通(18) 3D中的概念 用PythonPygame游戏-从入门到精通(19) 第一个 3D 程序(伪)。一个空间中的3D立方体的例程。 用PythonPygame游戏-从入门到精通(20) 声音原理 用PythonPygame游戏-从入门到精通(21) 使用声音,播放音效。一个重力模拟金属球碰撞的例程。 用PythonPygame游戏-从入门到精通(22) 播放长时间的背景音乐。一个建议播放器的例程。 额外提高部分 用PythonPygame游戏-从入门到精通(py2exe编) 使用py2exe将pygame脚本转换为exe可执行文件 用PythonPygame游戏-从入门到精通(Sprite篇) 介绍Pygame中不是必须但又很重要的Sprite模块,游戏中的角色实现,大多都要靠它。 实践部分 用PythonPygame游戏-从入门到精通(实战一:涂鸦画板1) 一个类似于Windows画图板的小玩意儿,精简了很多功能但是有更帅的笔刷。这一次主要是将笔刷的实现。 用PythonPygame游戏-从入门到精通(实战一:涂鸦画板2) 加上了按钮,我们的涂鸦画板可以用了! 用PythonPygame游戏-从入门到精通(实战二:恶搞俄罗斯方块1) 俄罗斯方块,却有不是普通的俄罗斯方块。 用PythonPygame游戏-从入门到精通(实战二:恶搞俄罗斯方块2) 代码构架 用PythonPygame游戏-从入门到精通(实战二:恶搞俄罗斯方块3) 实现说明 用PythonPygame游戏-从入门到精通(实战二:恶搞俄罗斯方块4) 完成,提供下载 用PythonPygame游戏-从入门到精通(实战三:植物大战僵尸1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值