pygame例子1

第一段代码相对简单,一旦编写完成,就可以在你所创造的每款游戏中重复使用。它们将完成所有乏味的、通用的任务,如加载模块、加载图像、打开网络连接、播放音乐等等。它们还将包括一些简单但有效的错误处理,以及您希望在sys和pygame等模块提供的函数之上提供的任何定制。

第一行,以及加载模块
首先,你需要开始游戏并加载模块。
它总是一个好主意来设置一些东西直接在顶部的主要源文件,如文件的名称,它包含什么,许可下,和其他有用的信息你可能想要给那些将会看它。
然后可以加载模块,进行一些错误检查,这样Python就不会打印出非程序员无法理解的讨厌的回溯信息。
代码相当简单,所以我就不解释了

#!/usr/bin/env python
#
# 汤姆的乒乓球
#一个简单的乒乓球游戏与现实的物理和AI
# http://www.tomchance.uklinux.net/projects/pong.shtml
#
# 根据GNU通用公共许可证发布

VERSION = "0.4"

try:
    import sys
    import random
    import math
    import os
    import getopt
    import pygame
    from socket import *
    from pygame.locals import *
except ImportError, err:
    print "couldn't load module. %s" % (err)
    sys.exit(2)

资源处理功能
在Line By Line Chimp的例子中,我们编写的第一个代码是用于加载图像和声音。
因为它们是完全独立于任何游戏逻辑或游戏对象的,所以它们是作为独立的函数编写的,并且是先编写以便于以后的代码能够使用它们。
我通常把所有这类代码放在它们自己的无类函数中;
一般来说,这些将是资源处理函数。
你当然可以为这些创建类,这样你就可以把它们组合在一起,也许你可以有一个对象,你可以用它来控制你所有的资源。
与任何良好的编程环境一样,您需要自行开发自己的最佳实践和风格。
编写自己的资源处理函数总是一个好主意,因为尽管Pygame有打开图像和声音的方法,而其他模块也有自己打开其他资源的方法,这些方法可能会占用不止一行,它们可能需要自己进行一致的修改,
而且它们通常不能提供令人满意的错误处理。
编写资源处理函数可以为您提供复杂的、可重用的代码,并为您提供对资源的更多控制。
以图像加载函数为例

def load_png(name):
    """ Load image and return image object"""
    fullname = os.path.join('data', name)
    try:
        image = pygame.image.load(fullname)
        if image.get_alpha() is None:
            image = image.convert()
        else:
            image = image.convert_alpha()
    except pygame.error, message:
        print 'Cannot load image:', fullname
        raise SystemExit, message
    return image, image.get_rect()

这里我们制作了一个比pygame.image.load()提供的更复杂的图像加载函数从文件(或类文件对象)加载新图像。
注意,函数的第一行是一个文档字符串,描述了函数做什么,以及它返回什么对象。
该函数假定您的所有图像都在一个名为data的目录中,因此它使用文件名并创建完整的路径名,例如data/ball.png,使用os模块来确保跨平台兼容性。
然后它会尝试加载图像,并转换任何alpha区域,这样你就可以实现透明度,如果出现问题,它会返回一个更容易读懂的错误。
你可以用类似的函数来加载其他资源,比如加载声音。
您还可以创建资源处理类,以便对更复杂的资源提供更大的灵活性。
例如,你可以创建一个音乐类,使用__init__函数加载声音(可能借用load_sound()函数),一个函数暂停音乐,一个函数重新启动。
另一个方便的资源处理类用于网络连接。
打开套接字、通过适当的安全性和错误检查的数据、关闭套接字、手指地址和其他网络任务的函数,可以让编写具有网络能力的游戏变得相对轻松。
记住,这些函数/类的主要任务是确保当你开始编写游戏对象类和主循环时,几乎没有什么事情可做。
类继承可以使这些基本类特别方便。
但不要过火;
只被一个类使用的函数应该作为该类的一部分来编写,而不是作为全局函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值