关于“Python”的核心知识点整理大全30

news2024/11/16 1:32:18

目录

12.2.3 在 OS X 系统中安装 Pygame

12.2.4 在 Windows 系统中安装 Pygame

12.3 开始游戏项目

12.3.1 创建 Pygame 窗口以及响应用户输入

首先,我们创建一个空的Pygame窗口。使用Pygame编写的游戏的基本结构如下: alien_invasion.py

12.3.2 设置背景色

alien_invasion.py

12.3.3 创建设置类

settings.py

alien_invasion.py

12.4 添加飞船图像

12.4.1 创建 Ship 类

ship.py

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!


12.2.3 在 OS X 系统中安装 Pygame

要安装Pygame依赖的有些包,需要Homebrew。如果你没有安装Homebrew,请参阅附录A的 说明。

为安装Pygame依赖的库,请执行下面的命令:

$ brew install hg sdl sdl_image sdl_ttf

这将安装运行游戏《外星人入侵》所需的库。每安装一个库后,输出都会向上滚动。 如果你还想启用较高级的功能,如在游戏中包含声音,可安装下面两个额外的库:

$ brew install sdl_mixer portmidi

使用下面的命令来安装Pygame(如果你运行的是Python 2.7,请将pip3替换为pip):

$ pip3 install --user hg+http://bitbucket.org/pygame/pygame

启动一个Python终端会话,并导入Pygame以检查安装是否成功(如果你运行的是Python 2.7, 请将python3替换为python):

$ python3
>>> import pygame
>>> 

如果导入成功,请跳到12.3节。

12.2.4 在 Windows 系统中安装 Pygame

Pygame项目托管在代码分享网站Bitbucket中。要在Windows系统中安装Pygame,请访问 https://bitbucket.org/pygame/pygame/downloads/,查找与你运行的Python版本匹配的Windows安装 程序。如果在Bitbucket上找不到合适的安装程序,请去http://www.lfd.uci.edu/~gohlke/pythonlibs/ #pygame看看。

下载合适的文件后,如果它是.exe文件,就运行它。

如果该文件的扩展名为.whl,就将它复制到你的项目文件夹中。再打开一个命令窗口,切换 到该文件所在的文件夹,并使用pip来运行它:

> python -m pip install --user pygame-1.9.2a0-cp35-none-win32.whl

12.3 开始游戏项目

现在来开始开发游戏《外星人入侵》。首先创建一个空的Pygame窗口,供后面用来绘制游戏 元素,如飞船和外星人。我们还将让这个游戏响应用户输入、设置背景色以及加载飞船图像。

12.3.1 创建 Pygame 窗口以及响应用户输入

首先,我们创建一个空的Pygame窗口。使用Pygame编写的游戏的基本结构如下: alien_invasion.py
import sys
import pygame
def run_game():
 # 初始化游戏并创建一个屏幕对象
1 pygame.init()
2 screen = pygame.display.set_mode((1200, 800))
pygame.display.set_caption("Alien Invasion")
# 开始游戏的主循环
3 while True:
 # 监视键盘和鼠标事件
4 for event in pygame.event.get():
5 if event.type == pygame.QUIT:
 sys.exit()
 # 让最近绘制的屏幕可见
6 pygame.display.flip()
run_game() 

首先,我们导入了模块sys和pygame。模块pygame包含开发游戏所需的功能。玩家退出时,我 们将使用模块sys来退出游戏。

游戏《外星人入侵》的开头是函数run_game()。1 处的代码行pygame.init()初始化背景设置, 让Pygame能够正确地工作。在2处,我们调用pygame.display.set_mode()来创建一个名为screen 的显示窗口,这个游戏的所有图形元素都将在其中绘制。实参(1200, 800)是一个元组,指定了 游戏窗口的尺寸。通过将这些尺寸值传递给pygame.display.set_mode(),我们创建了一个宽1200 像素、高800像素的游戏窗口(你可以根据自己的显示器尺寸调整这些值)。

对象screen是一个surface。在Pygame中,surface是屏幕的一部分,用于显示游戏元素。在这 个游戏中,每个元素(如外星人或飞船)都是一个surface。display.set_mode()返回的surface表 示整个游戏窗口。我们激活游戏的动画循环后,每经过一次循环都将自动重绘这个surface。 这个游戏由一个while循环(见3)控制,其中包含一个事件循环以及管理屏幕更新的代码。 事件是用户玩游戏时执行的操作,如按键或移动鼠标。为让程序响应事件,我们编写一个事件循 环,以侦听事件,并根据发生的事件执行相应的任务。4处的for循环就是一个事件循环。 为访问Pygame检测到的事件,我们使用方法pygame.event.get()。所有键盘和鼠标事件都将 促使for循环运行。在这个循环中,我们将编写一系列的if语句来检测并响应特定的事件。例如, 玩家单击游戏窗口的关闭按钮时,将检测到pygame.QUIT事件,而我们调用sys.exit()来退出游戏(见5)。 6处调用了pygame.display.flip(),命令Pygame让最近绘制的屏幕可见。在这里,它在每次 执行while循环时都绘制一个空屏幕,并擦去旧屏幕,使得只有新屏幕可见。在我们移动游戏元 素时,pygame.display.flip()将不断更新屏幕,以显示元素的新位置,并在原来的位置隐藏元素, 从而营造平滑移动的效果。 在这个基本的游戏结构中,最后一行调用run_game(),这将初始化游戏并开始主循环。 如果此时运行这些代码,你将看到一个空的Pygame窗口。

12.3.2 设置背景色

Pygame默认创建一个黑色屏幕,这太乏味了。下面来将背景设置为另一种颜色:

alien_invasion.py
--snip--
def run_game():
 --snip--
 pygame.display.set_caption("Alien Invasion")
 # 设置背景色
1 bg_color = (230, 230, 230)
 # 开始游戏主循环.
 while True:
 # 监听键盘和鼠标事件
 --snip--
 # 每次循环时都重绘屏幕
2 screen.fill(bg_color)
 # 让最近绘制的屏幕可见
 pygame.display.flip()
run_game()

首先,我们创建了一种背景色,并将其存储在bg_color中(见1)。该颜色只需指定一次, 因此我们在进入主while循环前定义它。

在Pygame中,颜色是以RGB值指定的。这种颜色由红色、绿色和蓝色值组成,其中每个值 的可能取值范围都为0~255。颜色值(255, 0, 0)表示红色,(0, 255, 0)表示绿色,而(0, 0, 255)表示蓝 色。通过组合不同的RGB值,可创建1600万种颜色。在颜色值(230, 230, 230)中,红色、蓝色和 绿色量相同,它将背景设置为一种浅灰色。

在2处,我们调用方法screen.fill(),用背景色填充屏幕;这个方法只接受一个实参:一 种颜色.

12.3.3 创建设置类

每次给游戏添加新功能时,通常也将引入一些新设置。下面来编写一个名为settings的模块, 其中包含一个名为Settings的类,用于将所有设置存储在一个地方,以免在代码中到处添加设置。 这样,我们就能传递一个设置对象,而不是众多不同的设置。另外,这让函数调用更简单,且在 项目增大时修改游戏的外观更容易:要修改游戏,只需修改settings.py中的一些值,而无需查找 散布在文件中的不同设置。 下面是最初的Settings类:

settings.py
class Settings():
 """存储《外星人入侵》的所有设置的类"""
 def __init__(self):
 """初始化游戏的设置"""
 # 屏幕设置
 self.screen_width = 1200
 self.screen_height = 800
 self.bg_color = (230, 230, 230) 

为创建Settings实例并使用它来访问设置,将alien_invasion.py修改成下面这样:

alien_invasion.py
--snip--
import pygame
from settings import Settings
def run_game():
 # 初始化pygame、设置和屏幕对象
 pygame.init()
1 ai_settings = Settings()
2 screen = pygame.display.set_mode(
 (ai_settings.screen_width, ai_settings.screen_height))
 pygame.display.set_caption("Alien Invasion")
 # 开始游戏主循环
 while True:
 --snip--
 # 每次循环时都重绘屏幕
3 screen.fill(ai_settings.bg_color)
 # 让最近绘制的屏幕可见
 pygame.display.flip()
run_game()

在主程序文件中,我们导入Settings类,调用pygame.init(),再创建一个Settings实例,并 将其存储在变量ai_settings中(见1)。创建屏幕时(见2),使用了ai_settings的属性 screen_width和screen_height;接下来填充屏幕时,也使用了ai_settings来访问背景色(见3)。

12.4 添加飞船图像

下面将飞船加入到游戏中。为了在屏幕上绘制玩家的飞船,我们将加载一幅图像,再使用 Pygame方法blit()绘制它。 为游戏选择素材时,务必要注意许可。最安全、最不费钱的方式是使用http://pixabay.com/等 网站提供的图形,这些图形无需许可,你可以对其进行修改。 在游戏中几乎可以使用任何类型的图像文件,但使用位图(.bmp)文件最为简单,因为Pygame 默认加载位图。虽然可配置Pygame以使用其他文件类型,但有些文件类型要求你在计算机上安 装相应的图像库。大多数图像都为.jpg、.png或.gif格式,但可使用Photoshop、GIMP和Paint等工 具将其转换为位图。 选择图像时,要特别注意其背景色。请尽可能选择背景透明的图像,这样可使用图像编辑器 将其背景设置为任何颜色。图像的背景色与游戏的背景色相同时,游戏看起来最漂亮;你也可以 将游戏的背景色设置成与图像的背景色相同。 就游戏《外星人入侵》而言,你可以使用文件ship.bmp(如图12-1所示),这个文件可在本书 的配套资源(https://www.nostarch.com/pythoncrashcourse/)中找到。这个文件的背景色与这个项 目使用的设置相同。请在主项目文件夹(alien_invasion)中新建一个文件夹,将其命名为images, 并将文件ship.bmp保存到这个文件夹中。

12.4.1 创建 Ship 类

选择用于表示飞船的图像后,需要将其显示到屏幕上。我们将创建一个名为ship的模块,其 中包含Ship类,它负责管理飞船的大部分行为。

ship.py
import pygame
class Ship():
 def __init__(self, screen):
 """初始化飞船并设置其初始位置"""
 self.screen = screen
 # 加载飞船图像并获取其外接矩形
1 self.image = pygame.image.load('images/ship.bmp')
2 self.rect = self.image.get_rect()
3 self.screen_rect = screen.get_rect()
 # 将每艘新飞船放在屏幕底部中央
4 self.rect.centerx = self.screen_rect.centerx
 self.rect.bottom = self.screen_rect.bottom
5 def blitme(self):
 """在指定位置绘制飞船"""
 self.screen.blit(self.image, self.rect) 

首先,我们导入了模块pygame。Ship的方法__init__()接受两个参数:引用self和screen, 其中后者指定了要将飞船绘制到什么地方。为加载图像,我们调用了pygame.image.load()(见1)。 这个函数返回一个表示飞船的surface,而我们将这个surface存储到了self.image中。 加载图像后,我们使用get_rect()获取相应surface的属性rect(见2)。Pygame的效率之所以 如此高,一个原因是它让你能够像处理矩形(rect对象)一样处理游戏元素,即便它们的形状并 非矩形。像处理矩形一样处理游戏元素之所以高效,是因为矩形是简单的几何形状。这种做法的 效果通常很好,游戏玩家几乎注意不到我们处理的不是游戏元素的实际形状。 处理rect对象时,可使用矩形四角和中心的x和y坐标。可通过设置这些值来指定矩形的位置。 要将游戏元素居中,可设置相应rect对象的属性center、centerx或centery。要让游戏元素 与屏幕边缘对齐,可使用属性top、bottom、left或right;要调整游戏元素的水平或垂直位置, 可使用属性x和y,它们分别是相应矩形左上角的x和y坐标。这些属性让你无需去做游戏开发人员 原本需要手工完成的计算,你经常会用到这些属性。


注意 在Pygame中,原点(0, 0)位于屏幕左上角,向右下方移动时,坐标值将增大。在1200×800 的屏幕上,原点位于左上角,而右下角的坐标为(1200, 800)。


我们将把飞船放在屏幕底部中央。为此,首先将表示屏幕的矩形存储在self.screen_rect中 (见3),再将self.rect.centerx(飞船中心的x坐标)设置为表示屏幕的矩形的属性centerx(见 4),并将self.rect.bottom(飞船下边缘的y坐标)设置为表示屏幕的矩形的属性bottom。Pygame 将使用这些rect属性来放置飞船图像,使其与屏幕下边缘对齐并水平居中。 在5处,我们定义了方法blitme(),它根据self.rect指定的位置将图像绘制到屏幕上。



关于“Python”的核心知识点整理大全25-CSDN博客

关于“Python”的核心知识点整理大全12-CSDN博客

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1323585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零刻EQ12 N100 双2.5G网口 All In One新手教程

零刻EQ12 N100 双2.5G网口 All In One新手教程 前言1.硬件配置2.准备工作2.1. ESXI8.0U2镜像2.2. Rufus磁盘工具下载2.3. ikuai镜像下载2.4. StarWindConverter虚拟磁盘格式转换工具下载2.5. OpenWrt镜像下载2.6. 黑群晖RR引导镜像下载(DSM7.2)2.7. 需要准备的硬件2.8. 格式化需…

【C语言(十五)】

动态内存管理 一、为什么要有动态内存分配? 我们已经掌握的内存开辟方式有: int val 20 ; // 在栈空间上开辟四个字节 char arr[ 10 ] { 0 }; // 在栈空间上开辟 10 个字节的连续空间 但是上述的开辟空间的方式有两个特点: • 空间开辟大小是固…

vCenter HA拆分和部署

原创作者:运维工程师 谢晋 vCenter HA拆分和部署 拆分vCenter HA部署vCenter HA 拆分vCenter HA 客户vCenter HA内一台虚拟机出现故障无法连接,报错如下: 点击移除集群报错如下: 查找官方KB,按照官方KB进行移除…

货仓选址

title: 货仓选址 date: 2023-12-19 15:06:02 tags: 排序 categories: 算法进阶指南 题目大意 解题思路 将数组排序后&#xff0c;将货仓建在 x x x 坐标处&#xff0c;其左侧和右侧的商家数量相同的时候最优 实现代码 #include<bits/stdc.h>using namespace std; type…

SQL进阶理论篇(十三):数据库的查询优化器是什么?

文章目录 简介什么是查询优化器查询优化器的两种优化方式总结参考文献 简介 事务可以让数据库在增删改查的过程中&#xff0c;保证数据的正确性和安全性&#xff0c;而索引可以帮数据库提升数据的查找效率。查询优化器&#xff0c;则是帮助我们获取更高的SQL查询性能。 本节我…

FreeRTOS的heap文件

在动态创建任务的时候, 只需要提供一个任务句柄, 内存的分配, TCB的分配, 都是系统来进行的, 也是这个文件做的工作. heap文件一共有5个, 都是内存管理文件, 工程只需要一个就行, 这五个的内存分配方法都不一样. heap1: 只实现了malloc功能, 没有实现free功能.(不用) heap2: 实…

小程序使用web-view无法打开该H5页面不支持打开的解决方法

我在正式上线版小程序使用 web-view 组件测试时提示&#xff1a;“无法打开该页面&#xff0c;不支持打开 https://xxxxxx&#xff0c;请在“小程序右上角更多->反馈与投诉”中和开发者反馈。” 奇怪的是&#xff0c;“真机调试”、“开发模式”都可以使用 web-view 组件访…

【Netty】NIO与Netty核心概念

目录 NIO编程NIO介绍NIO和BIO的比较缓冲区(Buffer)基本介绍常用API缓冲区对象创建添加数据读取数据 通道(Channel)基本介绍Channel常用类ServerSocketChannelSocketChannel Selector (选择器)基本介绍常用API介绍示例代码 NIO 三大核心原理 Netty核心概念Netty 介绍原生 NIO 存…

扑克牌炸金花

1.创建类 使用权限修饰符定义所需要参数&#xff0c;使用this关键字生成方法 public class gamejinhua { private String suit;//花色 private int rank;//数字 public gamejinhua(String suit, int rank) { this.suit suit; this.rank rank; } 2.使用快捷键生成get和…

基于ssm生鲜配送系统设计及实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对生鲜配送信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

换热站数字孪生 | 图扑智慧供热 3D 可视化

换热站作为供热系统不可或缺的一部分&#xff0c;其能源消耗对城市环保至关重要。在双碳目标下&#xff0c;供热企业可通过搭建智慧供热系统&#xff0c;实现供热方式的低碳、高效、智能化&#xff0c;从而减少碳排放和能源浪费。通过应用物联网、大数据等高新技术&#xff0c;…

Java多线程技术三:锁的使用——使用ReentrantReadWriteLock类

1 概述 ReentrantLock类具有完全互斥排它的特点&#xff0c;同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务&#xff0c;这样做保证了同时写实例变量的线程安全性&#xff0c;但 效率是非常低下的。在JDK提供了一种读写锁ReentrantReadWriteLock类&#xff0c;…

Android开发中报错总结之一

在我们开发中经常会遇到报错&#xff0c;今天主要是记录一下&#xff0c;我在开发中遇到的问题&#xff1a; 问题一&#xff1a;material-1.5.0-alpha03\res\values-v31\values-v31.xml:3:5-94: AAPT: error: resource android:color/system_neutral1_1000 not found 解决方案…

基于“Galera+MariaDB”搭建多主数据库集群的实例

1、什么是多主数据库集群 多主数据库集群是一种数据库集群架构&#xff0c;每个节点都可以接收写入操作和读取操作&#xff0c;并且通过心跳机制同步数据&#xff0c;保证数据一致性和高可用性。因多主数据库集群每个节点都可以承担读写操作&#xff0c;因此它可以充分利用各个…

HarmonyOS应用开发-手写板(二)

在前一篇手写板的文章中&#xff08;HarmonyOS应用开发-手写板-CSDN博客&#xff09;&#xff0c;我们通过使用Path实现了一个基本的手写板&#xff0c;但遗憾的是&#xff0c;无法保存所绘制的图像。在本文中&#xff0c;我们将采用canvas和Path2D来重新构建手写板应用。依然只…

数据可视化---柱状图

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

PHPStorm一站式配置

phpstorm安装好之后&#xff0c;先别急着编码。工欲善其事&#xff0c;必先利其器&#xff0c;配置好下面这些之后让编码事半功倍。 主题 Appearance & Behavior -> Appearance -> Theme 选中 [Light with Light Header] 亮色较为护眼 关闭更新 Appearance & …

在本地通过 k8s 部署一个 nginx 镜像

目标 目标:通过 deployment 启动一个 nginx,并且通过浏览器访问。 目的,熟悉并学习一下 k8s 的一些特性,毕竟看文档和实操是两码事。 本地部署 k8s 简单点,也不用 minikube 和 kubeadmin,直接通过 docker desktop 部署 k8s。 下载 docker desktop 下载完成后会自动…

Docker的安装及使用

目录 安装Docker 安装yum工具 更新本地镜像源 安装docker 启动docker 关闭防火墙 docker启动命令 配置镜像加速 docker的使用 拉取nginx 查看本地镜像 把镜像文件nginx导出成tar文件 查看是否导出成功 ​编辑 删除本地镜像nginx:latest 导入镜像文件nginx 拉取…

springCould中的Eureka-从小白开始【2】

目录 1.什么是Eureka ❤️❤️❤️ 2. 组件❤️❤️❤️ 3.单机Eureka配置❤️❤️❤️ 4.服务8001服务入住eureka ❤️❤️❤️ 5.消费端80入住到eureka ❤️❤️❤️ 6.集群Eureka配置 ❤️❤️❤️ 7.将Client发布到eureka集群上 ❤️❤️❤️ 8.服务端8002集群搭建…