PyGame基础知识-Making Games with Python & Pygame

1. 例子
例1. 创建一个空窗口

import pygame, sys #退出用到了sys
from pygame.locals import * #容易使用locals中的变量,但如果模块过多,容易产生混乱

pygame.init()#初始化,必须在使用pygame的其他函数之前调用
DISPLAYSURF = pygame.display.set_mode((400, 300))#创建一个pygame.Surface对象,操作此对象实现绘图。
pygame.display.set_caption('Hello Pygame World!')#标题
while True: # 主循环,重复做三件事情:处理event,更新游戏状态,显示游戏状态。
     for event in pygame.event.get():#获取上一次调用get()之后的事件队列
          if event.type == QUIT:#QUIT这种事件常量来源于pygame.locals
               pygame.quit()#init()的逆过程
               sys.exit()
     pygame.display.update()#将Surface object绘制到屏幕上

函数:如foo()或者somemodule.foo()。
方法:与对象相关,用以改变对象,如object.foo()。
构造函数:与函数一样,只是会返回一个对象,通常首字母大写(因此自己代码中的函数首字母通常小写)。


例2.绘制图形
import pygame, sys
from pygame.locals import *


pygame.init()


# set up the window
DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32)#Surface 对象代表了一个2d的矩形画布,调用update()后会显示在屏幕上。32代表使用32颜色值。
pygame.display.set_caption('Drawing')


# set up the colors
#颜色是三元元组(RGB)或四元元组(RGB+alpha value,即透明度,只能用在convert_alpha()返回的surface对象上)
BLACK = (  0,   0,   0)#等价BLACK =pygame.Color(0, 0, 0),也就是说颜色对象是一个元组
WHITE = (255, 255, 255)
RED   = (255,   0,   0)
GREEN = (  0, 255,   0)
BLUE  = (  0,   0, 255)


# draw on the surface object
DISPLAYSURF.fill(WHITE)#填充背景色
pygame.draw.polygon(DISPLAYSURF, GREEN, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))
pygame.draw.line(DISPLAYSURF, BLUE, (60, 60), (120, 60), 4)#宽度,如果没有或者是0,则填充整个图形。
pygame.draw.line(DISPLAYSURF, BLUE, (120, 60), (60, 120))
pygame.draw.line(DISPLAYSURF, BLUE, (60, 120), (120, 120), 4)
pygame.draw.circle(DISPLAYSURF, BLUE, (300, 50), 20, 0)
pygame.draw.ellipse(DISPLAYSURF, RED, (300, 200, 40, 80), 1)
pygame.draw.rect(DISPLAYSURF, RED, (200, 150, 100, 50))


pixObj = pygame.PixelArray(DISPLAYSURF)#将画布转化为矩阵,可以通过坐标来获取像素值或者修改像素,此函数会将画布锁定,导致不能执行其他的draw操作。
pixObj[380][280] = BLACK
pixObj[382][282] = BLACK
pixObj[384][284] = BLACK
pixObj[386][286] = BLACK
pixObj[388][288] = BLACK
del pixObj#解除画布的锁定。


# run the game loop
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()


例3.显示图片
import pygame, sys
from pygame.locals import *

pygame.init()

FPS = 30 # frames per second setting
fpsClock = pygame.time.Clock()#配合fpsClock.tick(FPS),控制刷新频率,如果执行过快,则会等待一段时间,再进行下一次刷新

# set up the window
DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('Animation')

WHITE = (255, 255, 255)
catImg = pygame.image.load('cat.png')#创建图片
catx = 10
caty = 10
direction = 'right'

while True: # the main game loop
    DISPLAYSURF.fill(WHITE)

    if direction == 'right':
        catx += 5
        if catx == 280:
            direction = 'down'
    elif direction == 'down':
        caty += 5
        if caty == 220:
            direction = 'left'
    elif direction == 'left':
        catx -= 5
        if catx == 10:
            direction = 'up'
    elif direction == 'up':
        caty -= 5
        if caty == 10:
            direction = 'right'

    DISPLAYSURF.blit(catImg, (catx, caty))#将一个surface(这里是Image)显示(复制)到另外一个Surface的指定位置,此时Surface不能处于锁定状态

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    pygame.display.update()
    fpsClock.tick(FPS)#必须放在最后,这样才能根据程序执行的时间和刷新频率计算需要等待的时间。



例4. 显示文字

fontObj = pygame.font.Font('freesansbold.ttf', 32)#创建字体对象(字体名称和大小)
textSurfaceObj = fontObj.render('Hello world!', True, GREEN, BLUE)#渲染为Surface Object。内容,背景色,前景色。True是抗锯齿
textRectObj = textSurfaceObj.get_rect()#获取矩形Surface 对象
textRectObj.center = (200, 150)
......
DISPLAYSURF.blit(textSurfaceObj, textRectObj)#显示(复制)到DISPLAYSURF上

例5. 声音

import pygame
import time


pygame.mixer.init()#运行之前需要初始化
soundObj = pygame.mixer.Sound('beeps.wav')#创建声音对象
soundObj.play()#程序会立刻执行下一条指令
time.sleep(1) # wait and let the sound play for 1 second
soundObj.stop()


# Loading and playing a sound effect:
soundObj = pygame.mixer.Sound('beepingsound.wav')
soundObj.play()
 
# Loading and playing background music:
pygame.mixer.music.load(backgroundmusic.mp3')
pygame.mixer.music.play(-1, 0.0)#-1指无数次循环,从0.0开始
# ...some more of your code goes here...
pygame.mixer.music.stop()


例6. 断言
assert condition “message“#如果condition不成立,崩溃,显示”message“


例7.事件
Python的事件队列最多容纳127个事件对象,如果满了,新的事件就不能进入队列。
如果取出的对象自己不能处理,则通过post方法将对象放回队列。
def checkForQuit():
    for event in pygame.event.get(QUIT): # get all the QUIT events
        terminate() # terminate if any QUIT events are present
    for event in pygame.event.get(KEYUP): # get all the KEYUP events
        if event.key == K_ESCAPE:
            terminate() # terminate if the KEYUP event was for the Esc key
        pygame.event.post(event) # put the other KEYUP(不是K_ESCAPE) event objects back


例8. main函数
main函数:让你使用局部变量(减少全局变量),还可以导入程序中的单个函数用以测试。
总之是利于代码重用。
def main():
......
if __name__ == '__main__':
    main()
#一个.py文件,如果是自身在运行,那么他的__name__值就是"__main__",这个时候执行py中的main函数;


#如果它是被别的程序导入的(作为一个模块),比如:
#import re
#那么,他的__name__就不是"__main__"了,这个时候不会执行main函数,会由主调用函数决定执行那个函数。

例9. 时间
>>> import time
>>> time.time()
1320460242.118
#the moment the time.time() function was called was a little over 1,320,460,242 seconds since midnight of January 1st, 1970. 

2. 语法知识
......

3. 编程习惯
1. 适当使用常量:
     10. WINDOWWIDTH = 640 # size of window's width in pixels
便于修改程序,便于理解程序。

2.使用常量代替字符串:
      DONUT = 'donut'
如果程序写为:if shape == DUNOT:,会报错,而if shape == 'dunot':不会报错。
2. 让代码更整洁,如:
#                            R     G     B
GRAY           = (100, 100, 100)
NAVYBLUE = ( 60,  60, 100)
3. Crash Early and Crash Often! 尽早发现bug

4. 使用不变量如tuple比list的可读性更强,而且略快。

5. Explicit is Better Than Implicit:To make your code more readable, it is better to have your code be explicit (that is, clearly state something even if it might be obvious) rather than implicit (that is, leaving it up to the person reading code to know how it works without outright telling them).

6. Basically, using global variables might make it easier to write your program but they generally make it harder to debug.
Limiting the number of global variables is a good way to keep the code simple and easier to debug. 
Writing code that is readable is a very important skill.
7. 代码可读性更重要:Nobody Cares About a Few Bytes.Nobody Cares About a Few Million Nanoseconds.

参考:
Making Games with Python & Pygame(1~6章):http://inventwithpython.com/pygame/index.html

pygame的文档:http://www.pygame.org/docs/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《PythonPygame 写游戏 - 从入门到精通.pdf》是一本关于使用Python语言和Pygame库编写游戏的书籍。Python是一种简单易学的编程语言,具有丰富的库和工具,非常适合初学者入门。而Pygame是为了方便开发2D游戏而设计的库,提供了丰富的函数和类,可以帮助开发者轻松地创建游戏。 这本书的目标是帮助读者从游戏开发的基础知识入手,逐步了解PythonPygame的使用方法,并逐渐提高到精通水平。书中按照渐进式的学习方式,从基本的Python语法开始介绍,然后逐步引入Pygame库的功能和特性。读者可以学习如何创建游戏窗口,绘制图形和精灵,处理用户输入,实现游戏逻辑等。 此外,书中还涵盖了一些高级的游戏开发技术,比如碰撞检测、音效处理、动画效果和物理模拟等。通过学习这些内容,读者将能够掌握更多复杂游戏的开发方法,并能够自己设计和实现自己的游戏。 总的来说,《PythonPygame 写游戏 - 从入门到精通.pdf》是一本适合初学者和有一定编程基础的读者学习游戏开发的书籍。读者可以通过学习这本书,掌握使用PythonPygame开发游戏的基本技能,从而进一步提升自己在游戏开发领域的能力。 ### 回答2: 《PythonPygame 写游戏-从入门到精通》是一本关于使用Python编程语言和Pygame游戏开发库来编写游戏的指南。它逐步介绍了从入门到精通的过程,并教会读者如何利用PythonPygame创建自己的游戏。 Python是一种简单易学的高级编程语言,被广泛应用于各种领域,包括游戏开发。Pygame是一个基于Python的库,专门用于开发2D游戏。它提供了许多功能强大的工具和函数,可以帮助开发者处理游戏图形、声音、输入等方面的内容。 《PythonPygame 写游戏-从入门到精通》一书首先向读者介绍了PythonPygame基础知识,包括安装和配置开发环境以及PythonPygame的基本语法和功能。然后,它逐渐深入探讨了游戏开发的不同方面,包括游戏循环、图形绘制、碰撞检测、游戏物理等。书中使用了大量的示例代码和实际案例来帮助读者理解和应用所学知识。 通过学习《PythonPygame 写游戏-从入门到精通》,读者将获得从入门到精通的游戏开发技能。他们将学会创建各种类型的游戏,从简单的益智游戏到复杂的角色扮演游戏。此外,书中还提供了一些高级技巧和技术,如使用人工智能和网络功能来增强游戏体验。 总之,这本书是一本全面而深入的学习资源,适合那些希望利用PythonPygame开发游戏的初学者和有经验的开发者。它将引导读者从零开始掌握游戏开发的基本技能,并帮助他们创建自己的精彩游戏作品。 ### 回答3: 《PythonPygame写游戏-从入门到精通.pdf》是一本专门介绍如何使用Python及其游戏开发库Pygame来编写游戏的书籍。 Python是一种高级编程语言,易于学习和使用。它具有简洁的语法和丰富的标准库,可以进行各种编程任务,包括游戏开发。Pygame是一个基于Python的开源游戏开发库,提供了丰富的功能和工具,方便开发者进行游戏的设计和制作。 这本书从入门到精通的目标,意味着它适合各种编程经验水平的读者。对于初学者,它会介绍PythonPygame的基本知识和概念,例如变量、条件语句、循环和函数等。然后,它将引导读者学习如何使用Pygame库中的各种功能和模块来创建游戏窗口、处理用户输入、绘制图形等。通过实际的示例和练习,读者可以逐步掌握游戏设计和开发的基本技能。 对于有一定编程经验的读者,本书也提供了更高级的内容和技巧,例如碰撞检测、动画效果、游戏物理学等。读者可以通过这些深入的学习,进一步提升自己的游戏开发能力,设计出更加有趣和复杂的游戏。 总的来说,《PythonPygame写游戏-从入门到精通.pdf》是一本对于想要学习如何使用PythonPygame编写游戏的读者来说非常有价值的书籍。通过它的指导,读者可以系统地学习游戏开发的基础知识和技能,并逐步提高自己的水平,成为一名优秀的游戏开发者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值