|Python新手小白中级教程|第二十六章:面向对象编程(示例操作)(2)

本文主要是介绍|Python新手小白中级教程|第二十六章:面向对象编程(示例操作)(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 实操一、分析游戏《外星人入侵》的初始化代码
  • 实操二、自制游戏的初始化数据
  • 总结

前言

大家好,我是你们的BoBo仔吖,今天我们学习的东东是续上节课的内容。上节课我们初识对象编程操作class类,今天我们就来实操

实操一、分析游戏《外星人入侵》的初始化代码

《外星人入侵》这个pygame经典游戏是我们pygame初学者的入门菜,今天我们就来研究一下它的游戏初始化代码
首先是主代码:

import sysimport pygamefrom settings import Settings
from ship import Shipclass AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))self.screen = pygame.display.set_mode((400, 300))pygame.display.set_caption("Alien Invasion")self.bg_color = (0, 0, 255)def run_game(self):"""开始游戏的主循环"""while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()self.screen.fill(self.settings.bg_color)pygame.display.flip()if __name__ == '__main__':ai = AlienInvasion()ai.run_game()

这是游戏的部分主代码
然后就是设置(Settings)

class Settings:"""存储游戏《外星人入侵》中所有设置的类"""def __init__(self):"""初始化游戏的设置"""self.screen_width = 400self.screen_height = 300self.bg_color = (0, 0, 255)

其次就是游戏飞船角色

class Ship:"""管理飞船的类"""def __init__(self, ai_game):"""初始化飞船并设置其初始位置。"""self.screen = ai_game.screenself.screen_rect = ai_game.screen_rect()self.image = pygame.image.load('C:\images\ship.bmp')self.rect = self.image.get_rect()self.rect.midbottom = self.screen_rect.midbottomdef blitime(self):"""在指定位置绘制飞船。"""self.screen.blit(self.image, self.rect)

这么多,大家是不是蒙了?
别担心,我们今天只是学习一下部分代码
先来看一下主代码的一段:

class AlienInvasion:"""管理游戏资源和行为的类"""def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))self.screen = pygame.display.set_mode((400, 300))pygame.display.set_caption("Alien Invasion")self.bg_color = (0, 0, 255)def run_game(self):"""开始游戏的主循环"""while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()self.screen.fill(self.settings.bg_color)pygame.display.flip()if __name__ == '__main__':ai = AlienInvasion()ai.run_game()

呵呵,因为里面的东东非常多,所以我几乎直接全搬过来了
先来看第一行:

class AlienInvasion:"""管理游戏资源和行为的类"""

这是我们的大类:游戏资源和行为类的主心骨:AlienInvasion类
这个类在接下来的游戏中会出现次,所以这个类的集合内容会非常的多
然后就是下面的一大堆:

def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))self.screen = pygame.display.set_mode((400, 300))pygame.display.set_caption("Alien Invasion")self.bg_color = (0, 0, 255)def run_game(self):"""开始游戏的主循环"""while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()self.screen.fill(self.settings.bg_color)pygame.display.flip()

。。。。。。
啊,好复杂。。。。。。

我们先从第一块开始看吧

    def __init__(self):"""初始化游戏并创建游戏资源"""pygame.init()self.settings = Settings()self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))self.screen = pygame.display.set_mode((400, 300))pygame.display.set_caption("Alien Invasion")self.bg_color = (0, 0, 255)

这是游戏初始化。首先呢,我们的参数self又重生了。。。
然后,就是方法pygame.init()
再然后,就是使用Settings设置类
这里我们前面导入过了,对应的是这个类:

class Settings:"""存储游戏《外星人入侵》中所有设置的类"""def __init__(self):"""初始化游戏的设置"""self.screen_width = 400self.screen_height = 300self.bg_color = (0, 0, 255)

顺带看一下这里的Settings类
这里运用__init__方法之后有使用了参数self
然后,我们使用pygame里的方法设置了画布的长宽和颜色,在主代码中成功调用

self.settings = Settings()

这就是self.对象结构(=类)
其次就是一些复杂的高级操作,运用到了pygame里的指令

def run_game(self):"""开始游戏的主循环"""while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()self.screen.fill(self.settings.bg_color)pygame.display.flip()

这里我们用了死循环while True,意思是直到我们手动按下×关闭游戏。这里还有一个功能就是持续填充画布,又运用到了类settings
这里我们封装了一个功能函数:run_game(self),然后使用变量来干许多有意思的事

这就是AlienInvasion类的全部内容了,接下来就是调用执行

if __name__ == '__main__':ai = AlienInvasion()ai.run_game()

这里我们用到了方法__name__,并将主程序赋给__main__,其次就是把AlienInvasion类赋给ai,在让ai不断运行(ai.run_game()
这就是主程序的所有内容了
还有一段代码,就是ship类

class Ship:"""管理飞船的类"""def __init__(self, ai_game):"""初始化飞船并设置其初始位置。"""self.screen = ai_game.screenself.screen_rect = ai_game.screen_rect()self.image = pygame.image.load('C:\images\ship.bmp')self.rect = self.image.get_rect()self.rect.midbottom = self.screen_rect.midbottomdef blitime(self):"""在指定位置绘制飞船。"""self.screen.blit(self.image, self.rect)

这里我们创建了Ship类,方法__init__使用了self参数和对象ai_game,并使用pygame中的指令完成了飞船的导入和初始化操作
其次,就是放置飞船的函数

好了,这个游戏的部分代码我们都讲完了,大家是不是觉得pygame游戏没有那么困难了呢?

有兴趣的,可以找我要源代码哟!

实操二、自制游戏的初始化数据

现在我们要做一款游戏,游戏的玩家再开始时具有的经验值和等级是初始的
我们假设初始经验值(EXP)为0,初始等级为1级
我们先创建一个基础结构类GameB

class GameB:

然后就是功能函数
这里我们首先得确定2样东西:对象内容和对象样式
这里的对象内容是灰常重要的,因为我们会时不时地调用它们
其次就是对象样式,这里我们主要指的是使用方法
这两点确定以后,就能完成许多内容了

先使用方法init构造对象
这里我们依旧要使用self参数
现在我们确定等级为grade参数,经验值为exp参数。

class GameB:def __init__(self,exp,grade):

创建对象之后,就是使用self来激活

class GameB:def __init__(self,exp,grade):self.exp = expself.grade = grade

这就是init方法的所有内容,接下来就是封装功能函数,用于打印经验值和等级

class GameB:def __init__(self,exp,grade):self.exp = expself.grade = gradedef print_message(self):

按部就班,还是像之前一样使用self参数来封装一个新的函数
然后,就是使用self执行打印操作

class GameB:def __init__(self,exp,grade):self.exp = expself.grade = gradedef print_message(self):print('经验值',self.exp)print('等级',self.grade)

这就是GameB类的所有内容,接下来就是调用
这里的调用我们采用的方法是变量调用
具体就是这样:

game_begin = GameB('0',1)
game_begin.print_message()

这里的GameB里遵从使用init方法时的格式
然后,就是使用这个变量来调用GameB里的函数
这就是这个程序的所有内容了,所有代码如下:

class GameB:def __init__(self,exp,grade):self.exp = expself.grade = gradedef print_message(self):print('经验值',self.exp)print('等级',self.grade)game_begin = GameB('0',1)
game_begin.print_message()

是不是感觉学会了好多?
这就是类的魅力


总结

好啦,本节课对类的讲解暂时到这里吧
下节课,我们会通过第三方库Turtle让我们的类调用更加灵活
大家做好准备了吗?期待下节课的精彩内容!

最后,制作不易,别忘了一圈三连,点个关注!

这篇关于|Python新手小白中级教程|第二十六章:面向对象编程(示例操作)(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961864

相关文章

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Python装饰器之类装饰器详解

《Python装饰器之类装饰器详解》本文将详细介绍Python中类装饰器的概念、使用方法以及应用场景,并通过一个综合详细的例子展示如何使用类装饰器,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. 引言2. 装饰器的基本概念2.1. 函数装饰器复习2.2 类装饰器的定义和使用3. 类装饰

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指