用pygame开发自己的游戏-1. 基础与入门

一、前言

pygame是一个用Python写的SDL库。SDL是一个能访问计算机多媒体硬件组件(包括声卡,视频卡,输入组件等)的跨平台库。本系列主要通过pygame做小游戏来学习编程。对于学过基本语法,刷过一些题目的同学,提高自己的最佳方式就是通过做小游戏等实际的项目,有目标地做项目才能真正将知识内化。初学者一定要学会CRM(Copy Run Modify,又称魔改)大法,把书上网上的例子代码跑起来后,一定要尝试修改下代码,通过关键参数或者关键语句的修改,可以验证自己对代码的理解是否正解。

二、安装

安装pygame的最佳方式是通过pip命令来安装,在Windows下打开CMD窗口(win键 + R,输入 cmd)界面上输入pip install pygame命令便安装好。

有一些同学在这步安装过程中会遇到包无法顺利下载的问题,可以用一下命令来执行,这个命令是通过pip使用豆瓣源的镜像来下载安装pygame。两个命令的区别在于安装过程所需要的文件是在国外还是国内的网站去下载。

pip install pygame -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com

三、Hello world

学习编程任何语言,框架都是从Hello world例子开始的,学习pygame也不例外,我们从以下例子开始。

import pygame, sys

# 初始化
pygame.init()
# 设置屏幕的宽度,高度
SCREEN = pygame.display.set_mode((400, 300))
# 设置窗口的标题
pygame.display.set_caption('Hello World!')

# 游戏主循环
while True: # main game loop
for event in pygame.event.get():
# 处理退出事件
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 将屏幕的背景填充成白色,了解下RGB三原色
SCREEN.fill((255, 255, 255))
# 调用 pygame.display.update() 方法更新整个屏幕的显示
pygame.display.update()

效果如下:

游戏主循环

游戏主循环(事件)是一直在运行着的。无论是在玩游戏,更新游戏状态,渲染画面或者是采集输入数据,它是一直在不间断运行着的。当我们创建一个循环时,必须能保证,我们有方法可以跳出循环,结束程序运行。游戏中经常用各种事件要处理,比如键盘鼠标等操作,pygame把所有类似的事件都放进事件队列,再由用户来处理。我们可以用pygame.event.get()方法来操作它。目前我们只处理游戏的退出事件,上面代码里当收到退出事件后,就退出游戏。

四、常用的知识点

1. 理解游戏坐标系

pygame坐标系的理解是十分关键的,所有的图形图片的绘制都与之相关。原点 在 左上角 (0, 0) x 轴 水平方向向 右,逐渐增加 y 轴 垂直方向向 下,逐渐增加

2. 矩形结构

矩形是一个简单的矩形——仅由左上角的位置、宽度和高度来定义。很多pygame函数都把rects作为参数,它们也取“rectstyle”,这个序列的值与矩形的值相同,所以如果我需要一个矩形来定义10 20 40 50的面积,我可以做以下任何一项:

rect = pygame.Rect(10, 20, 40, 50)
rect = pygame.Rect((10, 20, 40, 50))
rect = pygame.Rect((10, 20), (40, 50))
rect = (10, 20, 40, 50)
rect = ((10, 20, 40, 50))

如果要将结果矩形化画出来,可以使用pygame.draw.rect函数。第一个参数填写屏幕对象,第二参数为矩形的颜色,第三个参数为矩形对象,可以填写前面矩形结构中的一种。

import pygame, sys

# 初始化
pygame.init()
# 设置屏幕的宽度,高度
SCREEN = pygame.display.set_mode((400, 300))
# 设置窗口的标题
pygame.display.set_caption('Hello World!')

# 游戏主循环
while True: # main game loop
for event in pygame.event.get():
# 处理退出事件
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 将屏幕的背景填充成白色,了解下RGB三原色
SCREEN.fill((255, 255, 255))
# 调用 pygame.display.update() 方法更新整个屏幕的显示
pygame.draw.rect(SCREEN, (255, 0, 0), (20, 30, 100, 50))
pygame.display.update()

效果如下:

五、练习题

  1. 在(80, 60)位置画出一个绿色,段度为60,高度100的矩形。

  2. 在(180, 160)位置画出一个蓝色,半径为50的圆形。

    pygame.draw.circle 原型:pygame.draw.circle(Surface, color, pos, radius, width=0): return Rect 用途:用于绘制圆形。第三个参数pos是圆心的位置坐标,radius指定了圆的半径。

  3. 画一条紫色的直线, 起点为(0, 80), 终点为(70, 120)

    pygame.draw.line 原型:pygame.draw.line(Surface, color, start_pos, end_pos, width=1): return Rect   用途:绘制直线段,start_pos 和 end_pos 分别表示起始点和终止点,用坐标表示。width为线条宽度,默认为1。

(0)

相关推荐

  • 童年记忆第四弹!!! 如何用Python写一个胖鸟快飞

    前言 写到童年游戏第四弹了,突然想到以前玩过的一个很有意思的游戏,叫胖鸟快飞,就是一只鸟,通过不断的点击调整位置,通过钢管的游戏,今天我们就来写写这个游戏吧~ 游戏开发:(胖鸟快飞)"> ...

  • 用 Python 动态模拟太阳系运转

    来源:Python 技术「ID: pythonall」 提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深 ...

  • 飞机大战编程

    飞机大战没有封装的前的代码 import pygame from pygame.locals import * import random import time class HeroBullet() ...

  • 用 Python 实现微信版飞机大战

    来源:Python 技术「ID: pythonall」 2013 年微信 5.0 版本内置了一款经典小游戏-灰黑色版飞机大战,被称为微信经典飞机大战,在这个版本中微信甚至将欢迎设置了成了这款小游戏,用 ...

  • (1条消息) Pygame详解(十一):Rect 对象

    class pygame.Rect Rect 是用于存储矩形坐标的 Pygame 对象. Rect(left, top, width, height) -> Rect Rect((left, t ...

  • 用 Python 写个消消乐小游戏

    来源:Python 技术「ID: pythonall」 提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python ...

  • 带薪玩一周游戏,还要涨工资

    来源:Python 技术「ID: pythonall」 带薪玩游戏,是多么开心的事情,我就找到了. 前段时间,公司接到一个模拟业务场景的项目,需要在图形界面上模拟业务场景,比如人跑动,拖拽物体等,从而 ...

  • 用pygame开发自己的游戏-2.让方块动起来

    一.引言 前面的文章中,我们学习了如何画出一个方块,今天我们来学习如何让方块运动起来. 二.让方块自行移动 我们将前面文章出现的代码进行修改,我们将方块的x坐标改成变量x,while循环语句里每次将x ...

  • 用pygame开发自己的游戏-3.用键盘控制方块的移动

    一.引言 前面文章中我们学会让方块随着时间运动,本文我们实现用键盘控制方块的移动. 二.pygame事件概念 事件在计算机术语常用来指系统中发生的重要事情,比如用户输入.定时器到期等.pygame提供 ...

  • Python可以开发IOS吗?Python基础!

    在大家的印象中,Python是一门应用领域非常广泛的编程语言,可以说无所不能,那么Python可以开发IOS或安卓APP吗?我想很多人都好奇这个问题,接下来我们一起来看看. 当然可以,Python是可 ...

  • 如何用C语言开发图形化游戏

    https://m.toutiao.com/is/eAdqUaF/ 当你C语言学到一段时间后,也许对命令行程序感到厌倦了,也许你想要做一款游戏,但是光目前的知识,无法用命令行达到你想要的效果,那么恭喜 ...

  • Python可以开发网页吗?Python基础!

    什么是Python?Python是一种计算机程序设计语言,也是一种面向对象的动态类型语言,被用于独立的.大型项目的开发,可应用于各大领域.那么Python适合网页编程吗?我们一起来看看吧. Pytho ...

  • 什么样团队开发出来的游戏陪玩源码才称得上是优秀

    很多想要做游戏陪玩系统的个人和公司,往往在开发初期不了解定制游戏陪玩系统开发的步骤都有哪些,在游戏陪玩源码的选择上也比较盲目,直接去找开发公司的也不是不可以,但是在后期的了解沟通方面可能还需要耗费大量 ...

  • 2021年,开发一款游戏到底有多难?

    开篇语:北京的夏季是炎热的.5月30日下午,"Unity技术开放日"北京站正式开启,此次活动报名人数突破了800人,这远远超出了Unity官方的预期.为了符合防疫要求并让所有来现场 ...

  • 基于 Blazor 开发五子棋⚫⚪小游戏

    今天是农历五月初五,端午节.在此,祝大家端午安康! 端午节是中华民族古老的传统节日之一.端午也称端五,端阳.此外,端午节还有许多别称,如:午日节.重五节.五月节.浴兰节.女儿节.天中节.地腊.诗人节. ...

  • 开发儿童思维游戏,小游戏大智慧

    手表准不准 汤姆买了一块新手表.这块手表比他家里的闹钟每小时快30秒,而那只闹钟又比标准时间每小时慢30秒. 汤姆新买的这块手表到底准不准? 看起来闹钟每小时慢30秒,手表每小时快30秒,两相抵消,所 ...