本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。

一、pygame简介

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

可以去http://www.pygame.org/hifi.html 下载并安装使用pygame。

二、pygame使用

使用pygame的第一步是将pygame库导入到python程序中,以便来使用它

import pygame

然后需要引入pygame中的所有常量。

from pygame.locals import *

再经过初始化以后我们就可以尽情地使用pygame了。初始化pygame:

pygame.init()

通常来说我们需要先创建一个窗口,方便我们与程序的交互。下面创建了一个600 x 500的窗口

screen = pygame.display.set_mode((600,500))

1.打印字体

pygame支持使用pygame.font将文打印到窗口。要打印文本的话首先需要创建一个文字对象

myfont = pygame.font.Font(None,60)

这个文本绘制进程是一个重量级的进程,比较耗费时间,常用的做法是先在内存中创建文本图像,然后将文本当作一个图像来渲染。

white = 255,255,255
blue = 0,0,200
textImage = myfont.render("Hello Pygame", True, white)

textImage 对象可以使用screen.blit()来绘制。上面代码中的render函数第一个参数是文本,第二个参数是抗锯齿字体,第三个参数是一个颜色值(RGB值)。

要绘制本文,通常的过程是清屏,绘制,然后刷新。

screen.fill(blue)
screen.blit(textImage, (100,100))
pygame.display.update()

如果此时运行程序的话,会出现一个窗口一闪而过。为了让它长时间的显示,我们需要将它放在一个循环中。

 1 import pygame
 2 from pygame.locals import *
 3
 4 white = 255,255,255
 5 blue = 0,0,200
 6
 7 pygame.init()
 8 screen = pygame.display.set_mode((600,500))
 9
10 myfont = pygame.font.Font(None,60)
11 textImage = myfont.render("Hello Pygame", True, white)
12
13 while True:
14     for event in pygame.event.get():
15         if event.type in (QUIT, KEYDOWN):
16             sys.exit()
17
18     screen.fill(blue)
19     screen.blit(textImage, (100,100))
20     pygame.display.update()

pygame除了打印字体,还有绘制各种常见图形的常见功能。(使用pygame.draw())

2.绘制一个圆形。

使用pygame.draw.circle()方法,该方法需要传递圆的大小,颜色和位置参数。

1 color = 255,255,0
2 position = 300,250
3 radius = 100
4 width = 10
5 pygame.draw.circle(screen, color, position, radius, width)

3.绘制一个矩形。

为了增添一些乐趣,咱们这次绘制一个可以移动的矩形,而不只是单单的在屏幕中间绘制。

首先,需要设置pos_x, pos_y 两个变量来记录矩形的位置信息,然后在创建一对速度变量(vel_x,vel_y),在while循环内不断的更新矩形的位置。当矩形到达屏幕边缘的时候,将速度变量取反,这样就可以产生碰撞的效果了。

 1 import pygame
 2 from pygame.locals import *
 3 pygame.init()
 4 screen = pygame.display.set_mode((600,500))
 5 pygame.display.set_caption("Drawing Rectangles")
 6
 7 pos_x = 300
 8 pos_y = 250
 9 vel_x = 2
10 vel_y = 1
11
12 while True:
13     for event in pygame.event.get():
14         if event.type in (QUIT, KEYDOWN):
15             pygame.quit()
16             sys.exit()
17
18     screen.fill((0,0,200))
19
20     #移动矩形
21     pos_x += vel_x
22     pos_y += vel_y
23
24     #使矩形保持在窗口内
25     if pos_x > 500 or pos_x < 0:
26         vel_x = -vel_x
27     if pos_y > 400 or pos_y < 0:
28         vel_y = -vel_y
29
30     #绘制矩形
31     color = 255,255,0
32     width = 0 #solid fill
33     pos = pos_x, pos_y, 100, 100
34     pygame.draw.rect(screen, color, pos, width)
35
36     pygame.display.update()    

4.绘制线条

使用pygame.draw.line()方法,该方法,需要传递起始点和终点,还有线条的颜色和宽度

#绘制线条
color = 255,255,0
width = 8
pygame.draw.line(screen, color, (100,100), (500,400), width)

5.绘制弧形。

弧形是圆的一部分,可以使用pygame.draw.arc方法来绘制它,由于这个形状比较复杂,所以它比前几个函数需要跟更多的参数。

首先,需要一个矩形来表示弧形的边界。(需提供矩形左上角的位置,宽度和高度。)弧形就绘制在这个矩形当中。

然后需要提供弧形的起始角度和结束角度。平时在生活中我们一般都是用度为单位来衡量一个角度,但是在几何三角学中,通常使用的是弧度单位。

将角度转化为弧度需要的是math.radians()方法,它包含在math库中,因此使用之前一定不要忘了先引入math库.

 1 import math
 2 import pygame
 3 from pygame.locals import *
 4 pygame.init()
 5 screen = pygame.display.set_mode((600,500))
 6 pygame.display.set_caption("Drawing Arcs")
 7
 8 while True:
 9     for event in pygame.event.get():
10         if event.type in (QUIT, KEYDOWN):
11             pygame.quit()
12             sys.exit()
13
14     screen.fill((0,0,200))
15
16     #绘制弧形的代码
17     color = 255,0,255
18     position = 200,150,200,200
19     start_angle = math.radians(0)
20     end_angle = math.radians(180)
21     width = 8
22     pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
23
24     pygame.display.update()
25             

最后我们通过一个非常简单的小实例来巩固和复习一下上面所学到的知识。

三、画大饼游戏。

当玩家按下1、2、3、4相应的按键时,就会在程序中绘制相应的饼块,当整个饼块都被绘制完成的时候,颜色会变为亮绿色。

 1 import math
 2 import pygame
 3 from pygame.locals import *
 4 pygame.init()
 5 screen = pygame.display.set_mode((600,500))
 6 pygame.display.set_caption("The Pie Game - Press 1,2,3,4")
 7 myfont = pygame.font.Font(None, 60)
 8
 9 color = 200, 80, 60
10 width = 4
11 x = 300
12 y = 250
13 radius = 200
14 position = x-radius, y-radius, radius*2, radius*2
15
16 piece1 = False
17 piece2 = False
18 piece3 = False
19 piece4 = False
20
21 while True:
22     for event in pygame.event.get():
23         if event.type == QUIT:
24             exit()
25         elif event.type == KEYUP:
26             if event.key == pygame.K_ESCAPE:
27                 sys.exit()
28             elif event.key == pygame.K_1:
29                 piece1 = True
30             elif event.key == pygame.K_2:
31                 piece2 = True
32             elif event.key == pygame.K_3:
33                 piece3 = True
34             elif event.key == pygame.K_4:
35                 piece4 = True
36
37     #清屏
38     screen.fill((0,0,200))
39
40     #绘制4个数字
41     textImg1 = myfont.render("1", True, color)
42     screen.blit(textImg1, (x+radius/2-20, y-radius/2))
43     textImg2 = myfont.render("2", True, color)
44     screen.blit(textImg2, (x-radius/2, y-radius/2))
45     textImg3 = myfont.render("3", True, color)
46     screen.blit(textImg3, (x-radius/2, y+radius/2-20))
47     textImg4 = myfont.render("4", True, color)
48     screen.blit(textImg4, (x+radius/2-20, y+radius/2-20))
49
50
51     #判断是否绘制饼
52     if piece1:
53         start_angle = math.radians(0)
54         end_angle = math.radians(90)
55         pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
56         pygame.draw.line(screen, color, (x,y), (x,y-radius), width)
57         pygame.draw.line(screen, color, (x,y), (x+radius,y), width)
58     if piece2:
59         start_angle = math.radians(90)
60         end_angle = math.radians(180)
61         pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
62         pygame.draw.line(screen, color, (x,y), (x,y-radius), width)
63         pygame.draw.line(screen, color, (x,y), (x-radius,y), width)
64     if piece3:
65         start_angle = math.radians(180)
66         end_angle = math.radians(270)
67         pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
68         pygame.draw.line(screen, color, (x,y), (x-radius,y), width)
69         pygame.draw.line(screen, color, (x,y), (x,y+radius), width)
70     if piece4:
71         start_angle = math.radians(270)
72         end_angle = math.radians(360)
73         pygame.draw.arc(screen, color, position, start_angle, end_angle, width)
74         pygame.draw.line(screen, color, (x,y), (x,y+radius), width)
75         pygame.draw.line(screen, color, (x,y), (x+radius,y), width)
76
77     #是否4个饼都被绘制完成
78     if piece1 and piece2 and piece3 and piece4:
79         color = 0,255,0
80
81     pygame.display.update()

现在我们已经了解了一些pygame的基本操作,下个博客我们将会一起学习pygame中的IO、数据相关知识。

【python游戏编程之旅】第一篇---初识pygame相关推荐

  1. 《Python游戏编程入门》——1.2 初识Python

    本节书摘来自异步社区<Python游戏编程入门>一书中的第1章,第1.2节,作者[美]Jonathan S. Harbour ,李强 译,更多章节内容可以访问云栖社区"异步社区& ...

  2. python动画精灵_【python游戏编程之旅】第六篇---pygame中的Sprite(精灵)模块和加载动画...

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 直到现在我们已经学了很多pygame基础知识了,从这篇博客开始我们将会学习pygame中高级部分,更多和精灵 ...

  3. spring el表达式解析_Spring之旅第一篇-初识Spring

    目录 一.概述 二.模块 三.动手创建 一.概述 只要用框架开发java,一定躲不过spring,Spring是一个轻量级的Java开源框架,存在的目的是用于构建轻量级的J2EE应用.Spring的核 ...

  4. Python奥特曼打怪兽射击游戏(基于海龟画图创作的作品,来自Python创意编程100例sprites篇_Python精灵模块)

    相信这竟然是Python用海龟画图制作的作品吗? sprites模块就是用python的turtle模块开发的!所以本作品仍属于Python海龟画图作品 """奥特曼打怪 ...

  5. python游戏编程培训

    准备好了吗?我们即将开始激动人心的游戏编程之旅. 或许你之前学习过一点编程,但若是你从没接触过游戏编程,那么你仍然会对游戏程序的运行感到不解.游戏程序不像计算一个公式或谜题,得到答案之后程序就结束了, ...

  6. 有奖征集活动系列—— iOS游戏编程之旅 已结束

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 为了帮助 ...

  7. python精彩编程200例-Python创意编程200例turtle篇

    简 介: Python是一种高阶计算机语言.它更接近自然语言,学习成本低,开发效率高.如今越来越多的中小学生都在开始学习Python了.我们可以预见,全民会Python的日子不久就会到来,各行各业的人 ...

  8. python创意turtle作品-Python创意编程200例turtle篇

    简 介: Python是一种高阶计算机语言.它更接近自然语言,学习成本低,开发效率高.如今越来越多的中小学生都在开始学习Python了.我们可以预见,全民会Python的日子不久就会到来,各行各业的人 ...

  9. python游戏编程书籍-《Python游戏编程快速上手》一1.3 如何使用本书

    本节书摘来异步社区<Python游戏编程快速上手>一书中的第1章,第1.3节,作者: [美]Al Sweigart(斯维加特) 译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区& ...

  10. python游戏编程入门-python游戏编程入门

    <Python游戏编程入门> 这些文章负责整理在这本书中的知识点.注意事项和课后习题的尝试实现. 并且对每一个章节给出的最终实例进行分析和注释. 初识pygame:pie游戏 pygame ...

最新文章

  1. C语言实验——保留整数_JAVA
  2. 浅谈代码的执行效率(1):算法是关键
  3. 第五章:数据库交换开发篇
  4. 问题 I: 成对最小公倍数(数学)
  5. java基础(六)多线程/设计模式
  6. I2C总线之(二)---时序
  7. 拆分列成多行_把订单按货品拆分成多行(上)
  8. 多媒体微型计算机必不可少的硬件,第1章计算机基础知识习题材料.doc
  9. 报错,sql语句中尽量不要使用*,只查询需要的字段出来
  10. java非法字符检测_Java Web 一些特殊字符的过滤(appscan检查的安全问题)
  11. cesium画飞线_基于Cesium绘制抛物弧线
  12. 修改R语言安装包的默认路径
  13. 这15个Java多线程面试题及回答你确定不来看看!
  14. 重磅福利 | 知乎上赞同数最高的1000个回答2019最新版
  15. 核密度估计_拔剑-浆糊的传说_新浪博客
  16. 趣图 | EDG牛逼!!!
  17. 微服务的优缺点_支付宝上的好医保长期医疗险这款保险到底怎么样?保障全面吗?有哪些优缺点?值得买吗?...
  18. (原创)设置APP内的字体
  19. 【第九章】vim程序编辑器
  20. 高等数学 - 条件收敛和绝对收敛有什么区别

热门文章

  1. GridView 中DataFormatString失效的原因
  2. vue-cli3 项目从搭建优化到docker部署
  3. 关于apache httpd.conf脚本的理解
  4. LuoguP2764 最小路径覆盖问题(最大流)
  5. 白鹭引擎 - 项目的创建与动态调试
  6. Ruby的case语句
  7. opcache引起的“php-cgi.exe - FastCGI 进程意外退出”,事件ID487
  8. 416. Partition Equal Subset Sum
  9. Remember The Word-Trie
  10. [转]Java程序员们最常犯的10个错误