Python游戏系列之一_pygame

  Python游戏系列之一_pygame


  学习Python如果一直在啃语法书,那样学一阵子就会没劲了,总得找点成就感吧。

  之前的爬虫小程序就是一个很好的示范,我们可以快速得到正反馈。

  因此学习Python的时候,要找准一个应用方向,不断地建立小案例,积累小知识,这样学习就越来越有乐趣。

  这段时间我想研究一下Python在游戏制作方面的应用。


  主要目标是实现像微信中“打飞机游戏”的功能,参考文章:

  http://www.cnblogs.com/wuzhanpeng/p/4261015.html


  一、环境配置

  我已经安装了Python2.7,现在还需要安装pygame库。pygame库是Python游戏制作的库。

  官网:

  http://www.pygame.org/download.shtml




  下载之后,安装一下就可以了。

  注意:

  1. pygame版本要与Python版本配合,下载链接上有标明。

  2. 官网上没有64位版本,如果需要64位版本,请百度“pygame 64位”。


  二、pygame的模块说明

  pygame的模块很多,例如:

  pygame,顶级模块

  pygame.locals,pygame的常量定义

  pygame.display,pygame的显示表面(surface)

  pygame.event,pygame的事件

  不一一描述,在用到哪个模块时再详细解说。参考在线文档:http://www.pygame.org/docs/


  三、第一个程序



  源代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pygame
from sys import exit

SCREEN_WIDTH = 480  # 屏幕宽度
SCREEN_HEIGHT = 640  # 屏幕高度

# pygame.init()将会初始化所有导入的pygame模块
pygame.init()
# set_mode()函数将会创建一个显示面板(surface),即游戏窗口
# 参数一为surface的分辨率,即窗口的大小
# 参数二为surface的显示模式
# 参数三为surface的位深
screen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])
# set_caption()函数设置窗口的标题
pygame.display.set_caption('飞机游戏')
# 载入图片
bg = pygame.image.load('bg1.jpg')

while True:
    # 在surface上绘图,参数一是图像,参数二是左上角的位置
    screen.blit(bg, [0, 0])
    # 更新屏幕
    pygame.display.update()

    # pygame.event.get()方法可以从事件队列得到所有事件的列表
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

  1. 导入库

  导入pygame库,还用到了sys库中的exit()函数,这时可以使用语法:from sys import exit,单独导入exit函数。


  2. 初始化pygame

  pygame模块中的init()函数将会初始化所有导入的pygame模块。


  3. 创建surface

  “surface”概念相当于是windows编程中的窗口概念。使用pygame.display模块中的set_mode()函数可以生成一个surface。

  set_mode()函数有三个参数:

  (1) 窗口的大小,例如:[480, 640]。

  (2) 窗口的显示模式:

    pygame.FULLSCREEN:全屏

    pygame.HWSURFACE:硬件加速

    pygame.OPENGL:使用OPENGL

    pygame.DOUBLEBUF:双缓冲,只能在硬件加速和OPENGL中使用

    pygame.RESIZABLE:可以改变大小

    pygame.NOFRAME:无边框

    可以组合使用这些常量,用“|”连接。

  (3) 位深,即用多少位来表现颜色。


  4. 游戏主循环

  任何游戏都应创建一个不间断的循环,称为游戏主循环。

  在游戏主循环中,主要做三件事:

  (1) 更新界面显示

  (2) 处理用户事件

  (3) 程序逻辑处理

  例如在《帝国时代2》游戏中,每一次循环,“处理用户事件”就是处理用户的鼠标点击或键盘上的按键,“程序逻辑处理”就是判断士兵攻击敌人或被敌人攻击时怎么扣血,“更新界面显示”就是根据物体的状态重新绘制游戏界面,例如建筑快被打爆时显示燃烧的火焰。


  5. 在surface上绘图

  首先,通过bg = pygame.image.load('bg1.jpg')载入图片。应把图片和Python文件放在一个目录中,如果图片在子目录中,则需使用相对路径。

  然后,在游戏主循环中,调用surface.blit()方法可以在surface上绘图:screen.blit(bg, [0, 0]),绘图时参数一为图像,参数二为左上角坐标。

  最后,调用pygame.display模块的update()函数刷新界面。


  6. 事件处理

  调用pygame.event模块的get()函数,可以得到事件队列中的事件列表,对事件列表进行遍历,如果恰好是退出事件,则退出程序。


  至此,我们实现了游戏窗口的创建,还在游戏窗口中绘制了背景图案,还实现了点击窗口右上方的“X”退出游戏的功能。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值