星际争霸之小霸王之小蜜蜂(二)--类的使用

目录

前言

一、将设置内容写在一个类里

 二、设置小蜜蜂的造型

 三、设置猫蜜蜂的参数

 四、绘制猫蜜蜂到窗口

 总结


前言

昨天我们设置好了窗口,下面我们需要向窗口中添加元素了。

一、将设置内容写在一个类里

 我个人理解书上的意思是要创建一个类,将所有需要设置的属性都放在这里,这样后期需要升级改变的时候,在这里修改参数就行了,例如我们昨天设置的窗口背景颜色,可以将这个参数设置放在设置类里,需要的时候再调用,这就是面向对象的编程思维。那么我们现在建立一个settings文件,在里面创建一些参数。代码如下:

class Settings():def __init__(self):self.screen_width = 800self.screen_height = 600self.bg_color = (220,220,220)

 可以看出,我们创建了窗口的长和宽,然后设置了颜色,颜色我做了修改,感觉昨天的青色不好看。现在我们需要修改alien_invasion文件里的代码,导入这个类,从而调用这些参数,我们看代码。

import sys
import pygame
import settingsdef run_game():pygame.init()new_setting=settings.Settings()screen = pygame.display.set_mode((new_setting.screen_width,new_setting.screen_height))pygame.display.set_caption("Alien Invasion")while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()screen.fill(new_setting.bg_color)pygame.display.flip()run_game()

 可以看出,我们首先使用import导入我们创建的类,然后实例化setting类,实例为new_setting,最后通过new_setting调用提前设置好的参数。单看这一段代码来说比之前好像要复杂一点,也要难理解一点,但是当你的程序达到一定的复杂度以后,这样分类编写会更容易维护。下面我们来看一下效果。

 

 运行成功,颜色也变成了灰色(我看是灰色)

 二、设置小蜜蜂的造型

 书上说,pygame默认使用bmp位图,使用其他的文件类型,要安装库,这么麻烦吗?在网上找一下说明看看。

pygame.image.load可以加载多种类型的图片文件,包括但不限于:

  • BMP
  • GIF
  • JPG/JPEG
  • PNG
  • TGA
  • TIFF
  • WebP

需要注意的是,如果加载的图片文件不是pygame支持的格式,将会抛出异常。

 按照网上说的,pygame支持的格式有很多啊,我们就偏偏用JPG格式试试(我个人就喜欢jpg格式)

 现在我们需要注意两点:一是背景为透明的jpg图片,二是免费的。找了半天没找到,为了不浪费时间,找了一只猫,凑合用吧,大家欣赏下。

 

 三、设置猫蜜蜂的参数

 按照之前的编程思维,我们要创建单独的类来定义这只猫蜜蜂的各种属性,包括大小、位置、动作等。跟书上一样,我们创建ship文件,不知道为什么命名为ship,ship不是船的意思吗?

 首先我们先展示类里面的代码:

import pygameclass Ship():def __init__(self,screen):self.screen = screenself.image = pygame.image.load('cat.webp')self.rect = self.image.get_rect()self.screen_rect = screen.get_rect()self.rect.centerx = self.screen_rect.centerxself.rect.bottom=self.screen_rect.bottomdef blitme(self):self.screen.blit(self.image,self.rect)

 这一段代码不是很好理解,书上讲的也不是很清楚,我先说说我的初步理解,后面如果发现错了,再进行解释。

首先初始化方法里传入的screen就是我们的窗口,然后我们导入我们下载好的图片“cat.webp”(我们看看这个格式能不能直接用)。

self.rect = self.image.get_rect()这段代码就是获取图片的边框,同理,下面的代码就是获取窗口的边框,然后通过centerx和bottom属性将图片实现在屏幕最下边居中对齐。

最后我们定义了blitme方法,它里面调用了pygame的blit函数,blit函数的作用就是将图片绘制到屏幕上,self.rect已经设置好了位置。

 四、绘制猫蜜蜂到窗口

 下面我们只需要在主程序调用Ship类的blitme方法就可以绘制猫蜜蜂到指定位置。

import sys
import pygame
import settings
from ship import Shipdef run_game():pygame.init()new_setting=settings.Settings()screen = pygame.display.set_mode((new_setting.screen_width,new_setting.screen_height))ship = Ship(screen)pygame.display.set_caption("Alien Invasion")while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()screen.fill(new_setting.bg_color)ship.blitme()pygame.display.flip()run_game()

 这段代码就没有设么好解释的了,只是调用函数。我们直接看效果。

 

 成功了,证明图片的格式不是bmp也是可以的,但是我们的猫蜜蜂有点太大了,我们需要把它改小一点,最好在窗口里像一只小苍蝇,这里就不赘述怎么改了,我们直接看效果。

 

 嗯,这样效果好多了。

 总结

 今天主要学习如何设置绘制图像的位置,以及如何绘制。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv5基础知识入门(7)— NMS(非极大值抑制)原理解析

前言:Hello大家好,我是小哥谈。NMS是指非极大值抑制(non maximum suppression),它是一种常用于物体检测任务的算法。在物体检测中,通常会有多个预测框(bounding box)被提议出来&…

大数据培训前景怎么样?企业需求量大吗

大数据行业对大家来说并不陌生,大数据行业市场人才需求量大,越早入行越有优势,发展机会和上升空间等大。不少人通过大数据培训来提升自己的经验和自身技术能力,以此来获得更好的就业机会。 2023大数据培训就业前景怎么样呢?企业需…

Web和云开发,Rust会起飞?

Web和云开发,Rust会起飞? 一、前言 二、大厂偏爱,Rust的未来 三、Rust做Web的雄心 四、有必要换Rust做Web? 1.效率和性能 2.可靠性和可维护性 五、Rust先苦后甜 六、用Rust前的几个问题 七、开发界的强者 一、前言 去年…

面试之快速学习STL-无序关联式容器

和关联式容器一样,无序容器也使用键值对(pair 类型)的方式存储数据。不过,本教程将二者分开进行讲解,因为它们有本质上的不同: 关联式容器的底层实现采用的树存储结构,更确切的说是红黑树结构&a…

【eNSP】交换机(vlan和vlan间通信)

【eNSP】交换机(vlan和vlan间通信) 原理术语过程 实验根据图片连接模块配置设备名称和IP地址配置交换机交换机链路指定sw1配置sw2配置 设置网关交换机互联实验设置查看设置结果 ospf配置 原理 HUB集线器:它的作用可以简单的理解为将一些机器…

Tomcat 部署及优化

Tomcat概述 Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。在中小型系统和并发访问用户不是很…

Spring Boot 知识集锦之actuator监控端点详解

文章目录 0.前言1.参考文档2.基础介绍默认支持的端点 3.步骤3.1. 引入依赖3.2. 配置文件3.3. 核心源码 4.示例项目5.总结 0.前言 背景: 一直零散的使用着Spring Boot 的各种组件和特性,从未系统性的学习和总结,本次借着这个机会搞一波。共同学…

ai写真制作让你的照片焕发异彩

最近,越来越多的人开始使用ai写真应用程序来美化他们的照片。这些应用程序使用人工智能技术来将人们的照片变成更有艺术感的写真照,是人们的照片看起来更加生动、自然。今天,我将通过几幅生动的ai写真照片,来带你深入探索ai写真ap…

【数据结构OJ题】相交链表

原题链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 看到这道题,很容易想到的方法就是暴力求解,就是将一个链表的每个结点的地址…

elasticsearch 基础

ES 搜索技术历史 今天看的是《Elasticsearch实战与原理解析》 第一章 搜索技术发展史 1、搜索技术发展史 宏观而言,搜索引擎的发展经历了五个尖端和两大分类。五个阶段分别是ftp文件检索阶段、分类目录阶段、文本相关性检索阶段、网页链接分析阶段和用户意图识别…

809协议nodejs编写笔记(还在更新)

一、总体流程 数据首先通过receiver接受层接收,去掉标识头和标识尾;再进入depacker解包层进行解包,把标识头分解出来并解析;之后发给handler处理层根据不同的消息id选择使用不同的业务逻辑;如果有应答,则通…

js 构造函数

js 构造函数 new Pig() ---- 创建新的空对象 this 指向新对象 this.name name --------修改this,添加新的属性。 最后返回新的对象