|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

相关文章

golang panic 函数用法示例详解

《golangpanic函数用法示例详解》在Go语言中,panic用于触发不可恢复的错误,终止函数执行并逐层向上触发defer,最终若未被recover捕获,程序会崩溃,recover用于在def... 目录1. panic 的作用2. 基本用法3. recover 的使用规则4. 错误处理建议5. 常见错

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

一文详解如何在Python中使用Requests库

《一文详解如何在Python中使用Requests库》:本文主要介绍如何在Python中使用Requests库的相关资料,Requests库是Python中常用的第三方库,用于简化HTTP请求的发... 目录前言1. 安装Requests库2. 发起GET请求3. 发送带有查询参数的GET请求4. 发起PO

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

Python中常用的四种取整方式分享

《Python中常用的四种取整方式分享》在数据处理和数值计算中,取整操作是非常常见的需求,Python提供了多种取整方式,本文为大家整理了四种常用的方法,希望对大家有所帮助... 目录引言向零取整(Truncate)向下取整(Floor)向上取整(Ceil)四舍五入(Round)四种取整方式的对比综合示例应

python 3.8 的anaconda下载方法

《python3.8的anaconda下载方法》本文详细介绍了如何下载和安装带有Python3.8的Anaconda发行版,包括Anaconda简介、下载步骤、安装指南以及验证安装结果,此外,还介... 目录python3.8 版本的 Anaconda 下载与安装指南一、Anaconda 简介二、下载 An