pygame:

ygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础上开发。允许你在 Python 程序中创建功能丰富的游戏和多媒体程序,Pygame 是一个高可移植性的模块可以支持多个操作系统。用它来开发小游戏非常适合。并且只能开发2D游戏

安装:


可以从http://www.pygame.org/wiki/GettingStarted下载安装


也可以用pip: 

python -m pip install pygame


不知道为何去掉pip -m后会超时异常

检验安装成功的方法:

IDE中: 

import pygame
print(pygame.ver)

使用pygame



import pygame
from pygame.locals import * #导入常用的常量
pygame.init()#初始化

初始化后就可以方便的使用pygame了!

简单的例子:

弹窗 蓝色背景  白色字:

import pygame
from pygame.locals import *   #引入pygame中的所有常量
pygame.init() #初始化
screen = pygame.display.set_mode((600,500)) #创建窗口 大小为600*500

#打印字体
font = pygame.font.Font(None,60)  #创建字体对象,None表示默认字体
white = (255,255,255)#字体颜色
blue = (0,0,200)#背景颜色
#在内存中创建文本图像,然后将文本当作一个图像来渲染。
textImage = font.render("Hello pygame",True,white)
#事件循环
while True:
    #退出事件
    for event in pygame.event.get():
        if event.type in (QUIT,KEYDOWN):
            exit()
    #显示
    screen.fill(blue)
    screen.blit(textImage,(100,100))
    pygame.display.update()

    

Pygame的最重要部分是surface。就把surface想当成一张白纸吧。你要用对一个surface做许多的事——你可以在它上面画线,给它的部分填充颜色,把图像拷进去或者拷出来,设置或者读取它上面的某个单独的像素的颜色值。一个surface可以是任何大小(可以理解)并且你要多少就有多少(也可以理解)。有一个surface是特别的——你用pygame.display.set_mode()创建的那一个。这个display surface代表了屏幕;你对它做的任何事情都会呈现在用户屏幕上。你只能有一个这玩意——这是SDL的一个限制,而不是pygame的。

:创建了一个窗口,set_mode会返回一个Surface对象,代表了在桌面上出现的那个窗口,三个参数第一个为元祖,代表分 辨率(必须);第二个是一个标志位,如果不用什么特性,就指定0;第三个为色深。当我们把第二个参数设置为FULLSCREEN时,就能得到一个全屏窗口了

   

render方法的第一个参数是写入的文字内容;第二个是布尔值,说明是否开启抗锯齿;第三个是字体本身的颜色;第四个是背景的颜色。如果不想有背景色,也就是让背景透明的话,可以不加第四个参数。

    screen.blit(textImage,(100,100)):绘制位图 ,第一个参数为加载完成的位图,第二个参数为起始坐标

pygame.display.update()就是把surface对象不断地显示到屏幕 更新窗口

另一个例子:图片加载与简单事件:


     

background_image_filename ='sushiplate.jpg'#背景图
mouse_image_filename='fugu.png'#光标图
import pygame
from pygame.locals import * #导入常用的函数和常量
from sys import exit#借用sys模块的exit函数用于退出

pygame.init()
screen = pygame.display.set_mode((640,480),0,32)
pygame.display.set_caption("Hello World!")#窗口标题
background = pygame.image.load(background_image_filename).convert()
mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()
while True:
    for event in pygame.event.get():
        if event.type==QUIT:
            exit()
    screen.blit(background,(0,0))#画背景图
    x,y = pygame.mouse.get_pos()#得到光标位置
    x-=mouse_cursor.get_width()/2#除以2是为了使图片中心与光标位置对齐,否则默认以光标位置为原点
    y-=mouse_cursor.get_height()/2
    screen.blit(mouse_cursor,(x,y))#将光标移动到新的位置
    pygame.display.update()


convert函数是将图像数据都转化为Surface对象,每次加载完图像以后就应该做这件事件(事实上因为 它太常用了,如果你不写pygame也会帮你做);convert_alpha相比convert,保留了Alpha 通道信息(可以简单理解为透明的部分),这样我们的光标才可以是不规则的形状。


      convert()所指的“格式”并非指文件格式工(如png,jpeg,gif),它是所谓的“像素格式”。它代表了一个surface记录一个特定像素的颜色的方法。如果surface格式跟显示格式不一样,那SDL就要在每次blit的时候去转化它——这是个相当费时的过程。不用关心解释,只要注意到如果想在blit之外获得速度,那你就需要convert()。


    while True:循环 看到crossin 中一段比较形象的话:


如果你看过泥土动画,那么就可以把整个游戏过程想象成拍摄泥土动画的过程:每一次,screen.blit()相当于去把人偶、布景移动一点点位置,pygame.display.update()则是按下快门拍下一帧新的画面。而if event.type == pygame.QUIT:就是在判断,导演是不是喊停收工了。这一切都由计算机在很短的时间内处理,以至于玩家感觉是连贯的。”