pygame - 图片移动优化 - 引入面向对象思想

news2024/11/19 6:25:41

目录

一、基本框架

二、代码段

1、附注释 

2、无注释

三、效果展示


备注:pygame - 图片移动优化中未对属性和方法进行封装,本篇文章将引入面向对象思想

一、基本框架

import sys
import time
import pygame

pygame.init()

SCREEN_WIDTH = 680
SCREEN_LENGTH = 1000
BG_COLOR = pygame.Color(0,0,0)


class picture():
    def __init__(self,left,top):

    def display(self):

    def move(self):


class main():
    screen = None
    my_picture = None

    def __init__(self):
        pass
    def getEvent(self):

    def start(self):

    def end(self):



if __name__ == '__main__':
    main().start()

二、代码段

1、附注释 

import sys
import time
import pygame

pygame.init()
# 使用pygame之前必须初始化

SCREEN_WIDTH = 680             # 主屏窗口宽度
SCREEN_LENGTH = 1000           # 主屏窗口长度
BG_COLOR = pygame.Color(0,0,0) # 主屏窗口背景颜色



class picture(): # 图片类

    def __init__(self,left,top):
        self.img = pygame.image.load("t02_img.png") # 加载本地图片
        self.rect = self.img.get_rect()             # 获取图片区域
        self.rect.left = left                       # 设置显示位置
        self.rect.top = top                         # 设置显示位置
        self.speed = 5                              # 移动速度
        self.stop = True                            # 图片移动开关
        self.direction = 'U'                        # 图片移动方向

    def display(self): # 图片显示函数
        main.screen.blit(self.img,self.rect)  # 传送

    def move(self):    # 图片移动函数
        # 说明:图片移动实质是改变rect.top或rect.left,并确保图片不会移出主屏窗口
        if self.rect.top - self.speed >= 0 and self.direction == 'U':
            self.rect.top -= self.speed
        elif self.rect.top + self.rect.height + self.speed <= SCREEN_WIDTH and self.direction == 'D':
            self.rect.top += self.speed
        elif self.rect.left - self.speed >= 0 and self.direction == 'L':
            self.rect.left -= self.speed
        elif self.rect.left + self.rect.width + self.speed <= SCREEN_LENGTH and self.direction == 'R':
            self.rect.left += self.speed



class main(): # 主类

    screen = None     # 接收pygame.display.set_mode()的返回值
    my_picture = None # picture的实例

    def __init__(self):
        pass

    def getEvent(self): # 获取事件函数
        for event in pygame.event.get():              # 循环获取事件并监听事件状态
            if event.type == pygame.KEYDOWN:          # 按下了按键
                if event.key == pygame.K_UP:          # 上
                    main.my_picture.stop = False
                    main.my_picture.direction = 'U'
                elif event.key == pygame.K_DOWN:      # 下
                    main.my_picture.stop = False
                    main.my_picture.direction = 'D'
                elif event.key == pygame.K_LEFT:      # 左
                    main.my_picture.stop = False
                    main.my_picture.direction = 'L'
                elif event.key == pygame.K_RIGHT:     # 右
                    main.my_picture.stop = False
                    main.my_picture.direction = 'R'
            elif event.type == pygame.KEYUP:          # 松开了按键
                if event.key == pygame.K_UP or event.key == pygame.K_DOWN or event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    main.my_picture.stop = True
            elif event.type == pygame.QUIT:           # 点击了关闭按钮
                self.end()

    def start(self):
        main.screen = pygame.display.set_mode((SCREEN_LENGTH, SCREEN_WIDTH))
        # 说明:set_mode()可以短时间显示主屏窗口
        pygame.display.set_caption("图片移动优化测试")
        # 说明:若不设置窗口标题,则窗口标题默认为“pygame window”
        main.my_picture = picture(500,340)
        # 说明:实例化picture,并指定显示位置
        while True:
            # 说明:while True循环可以使得主屏窗口得以保留
            time.sleep(0.02)             # 使得循环速度变慢,从而使得图片移动速度变慢
            main.screen.fill(BG_COLOR)   # 填充
            self.getEvent()              # 获取事件
            main.my_picture.display()    # 图片显示
            if not self.my_picture.stop:
                self.my_picture.move()   # 图片移动
            pygame.display.update()      # 更新

    def end(self):
        print('感谢体验图片移动优化测试!')
        exit()                # 退出程序



if __name__ == '__main__':
    main().start()

2、无注释

import sys
import time
import pygame

pygame.init()

SCREEN_WIDTH = 680             
SCREEN_LENGTH = 1000           
BG_COLOR = pygame.Color(0,0,0) 



class picture(): 

    def __init__(self,left,top):
        self.img = pygame.image.load("t02_img.png") 
        self.rect = self.img.get_rect()             
        self.rect.left = left                       
        self.rect.top = top                         
        self.speed = 5                              
        self.stop = True                            
        self.direction = 'U'                        

    def display(self): 
        main.screen.blit(self.img,self.rect)  

    def move(self):
        if self.rect.top - self.speed >= 0 and self.direction == 'U':
            self.rect.top -= self.speed
        elif self.rect.top + self.rect.height + self.speed <= SCREEN_WIDTH and self.direction == 'D':
            self.rect.top += self.speed
        elif self.rect.left - self.speed >= 0 and self.direction == 'L':
            self.rect.left -= self.speed
        elif self.rect.left + self.rect.width + self.speed <= SCREEN_LENGTH and self.direction == 'R':
            self.rect.left += self.speed



class main(): 

    screen = None     
    my_picture = None 

    def __init__(self):
        pass

    def getEvent(self): 
        for event in pygame.event.get():              
            if event.type == pygame.KEYDOWN:          
                if event.key == pygame.K_UP:          
                    main.my_picture.stop = False
                    main.my_picture.direction = 'U'
                elif event.key == pygame.K_DOWN:      
                    main.my_picture.stop = False
                    main.my_picture.direction = 'D'
                elif event.key == pygame.K_LEFT:      
                    main.my_picture.stop = False
                    main.my_picture.direction = 'L'
                elif event.key == pygame.K_RIGHT:     
                    main.my_picture.stop = False
                    main.my_picture.direction = 'R'
            elif event.type == pygame.KEYUP:          
                if event.key == pygame.K_UP or event.key == pygame.K_DOWN or event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    main.my_picture.stop = True
            elif event.type == pygame.QUIT:           
                self.end()

    def start(self):
        main.screen = pygame.display.set_mode((SCREEN_LENGTH, SCREEN_WIDTH))
        pygame.display.set_caption("图片移动优化测试")
        main.my_picture = picture(500,340)
        while True:
            time.sleep(0.02)             
            main.screen.fill(BG_COLOR)   
            self.getEvent()              
            main.my_picture.display()    
            if not self.my_picture.stop:
                self.my_picture.move()   
            pygame.display.update()      

    def end(self):
        print('感谢体验图片移动优化测试!')
        exit()                



if __name__ == '__main__':
    main().start()

三、效果展示 

pygame图片移动优化(面向对象)测试 20230108

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

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

相关文章

基于机器学习预测销售门店的商品销量详细教程

项目概述: 使用时间序列预测来预测来Corporacin Favorita 的数据的商店销售额。 具体来说,构建一个模型来更准确地预测在不同 Favorita 商店销售的数千种商品的单位销售额。您将使用包含日期、商店和商品信息、促销和单位销售的易于理解的训练数据集来练习您的机器学习技能。…

【debug日记】安装包后还是有下划线可以运行、gensim包的安装及版本不同引起的参数不匹配问题

文章目录gensim包版本不同引起的参数不匹配问题安装gensim包后还是有下划线可以运行gensim包的安装问题今天的debug历程可谓一步一个坑。首先我去github上下载了一个项目&#xff0c;关于graph embedding https://github.com/shenweichen/GraphEmbedding 我下载下来直接运行&a…

软件测试 -- 进阶 10 常见软件测试类型

业精于勤&#xff0c;荒于嬉&#xff1b;行成于思&#xff0c;毁于随。-- 韩愈 释译&#xff1a;学业因勤奋而专精&#xff0c;因玩乐而荒废&#xff1b;德行因独立思考而有所成就&#xff0c;因因循随俗而败坏。 是否执行程序/测试执行方法 - 静态测试 - 动态测试 …

如何简单的做量化交易

介绍 首先我不是量化工程师&#xff0c;我只是个后端工程师&#xff1b;其次我对量化也不感兴趣&#xff0c;自己有几把刷子还是了解的&#xff0c;自己不适合做量化交易&#xff1a; 自己没有优秀的模型设计能力自己是个长线投资&#xff0c;一般一个股票都是至少拿一年以上…

【五】Netty 传输Java对象

Netty 传输Java对象介绍业务场景模拟流程图代码展示订购采购消息 POJO 类订购应答消息 POJO 类服务端启动类 SubscribeReqServer服务端业务处理类 SubscribeServerHandler客户端启动类 SubscribeClient客户端 业务处理类 SubscribeClientHandler效果展示服务端打印客户端打印总…

20230109网安陈之琳材料大纲-web渗透

目录 引言 正文 信息收集 端口扫描 敏感目录的扫描 主机漏洞扫描 常见的漏洞及防御 SQL注入漏洞 目录遍历漏洞/文件包含漏洞 提权 删日志 引言 首先呢&#xff0c;经过我本人对此篇论文的研读&#xff0c;发现此篇论文属于web方向的一篇入门文章 梁本来前辈对常见…

使用Docker Compose一键部署前后端分离项目

目录 一、安装Docker和docker Compose &#xff08;1&#xff09;Docker安装 &#xff08;2&#xff09;Docker Compose安装 &#xff08;3&#xff09;查看版本信息 二、准备工作 1. 新建工作目录 2. 工作目录结构 3. 后台打包 4. 前台打包 5. 数据库文件上传 6. 编…

Nginx反向代理和负载均衡配置

一.什么是反向代理 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受Internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;并将从服务器上得到的结果返回给Internet上请求连接的客户端&#xff0c;此时代理服务器对外就…

Sentinel-限流 冷启动

概述 当流量突然增大的时候&#xff0c;我们常常会希望系统从空闲状态到繁忙状态的切换的时间长一些。即如果系统在此之前长期处于空闲的状态&#xff0c;我们希望处理请求的数量是缓步的增多&#xff0c;经过预期的时间以后&#xff0c;到达系统处理请求个数的最大值。Warm U…

在Mac上配置Vue开发环境

因为Vue是NodeJS的模块&#xff0c;要想使用Vue需要先安装NodeJS 在Mac中安装NodeJS通过brew包管理器就会很方便, 因为访问源速度问题建议使用5&#xff08;阿里&#xff09;&#xff0c;Homebrew开源项目地址&#xff1a;https://gitee.com/cunkai/HomebrewCN/blob/master/REA…

千锋教育+计算机四级网络-计算机网络学习-02

目录 分组交换的两种传输方式 数据报方式 ​编辑 虚电路方式 OSI参考模型 IP地址分类 公有IP 私有IP 回环ip地址 子网掩码 端口 端口号 端口分类 数据包的组装、拆解 网络应用程序开发流程 选择合适的协议&#xff08;TCP或UDP) TCP—面向连接 UDP—面向无连接 …

第八章面向对象编程(中级)

8.1访问修饰符 8.1.1基本介绍 java提供四种访问控制修饰符号&#xff0c;用于控制方法和属性&#xff08;成员变量&#xff09;的访问权限&#xff08;范围&#xff09;&#xff1a; 公开级别:用 public 修饰,对外公开受保护级别:用 protected 修饰,对子类和同一个包中的类公开…

基于Docker安装Nginx

基于Docker安装Nginx 1.安装Nginx 先启动一个 Nginx 实例, 可以得到相关配置 1.这里我将安装的软件放在/mydata目录下 #进入mydata目录 cd mydata/ #创建nginx目录 mkdir nginx # 拉取nginx 1.10版本镜像并允许容器 docker run -p 80:80 --name nginx -d nginx:1.10将容器内…

RHCE第四天之Web服务器详解

文章目录一、网址及HTTP简介二、www服务器的类型三、 www服务器的基本配置四、基于https协议的静态网站五、实验练习web服务器提供的数据大部分都是文件&#xff0c;那么我们需要在服务器端先将数据文件写好&#xff0c;并且放置在某个特殊的目录下面&#xff0c;这个目录就是我…

Profiler导致的严重性能问题

背景客户反馈系统突然运行非常缓慢&#xff0c;持续了近20分钟的时间&#xff0c;通过SQL专家云定位到有人开启了Profiler导致&#xff0c;但是不能定位是谁开启的&#xff0c;请我们协助分析。现象登录SQL专家云&#xff0c;进入实时可视化页面&#xff0c;在活动会话中看到在…

【Ctfer训练计划】——(十)

作者名&#xff1a;Demo不是emo主页面链接&#xff1a; 主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…

智公网:这几类人员报考公务员无法被录取

对于很多人来讲&#xff0c;毕业之后都想找一份稳定的工作&#xff0c;目前最受欢迎的就是公务员和教师编了&#xff0c;我们今天来说下公务员这个铁饭碗。 公务员考试可是很不容易的&#xff0c;有两场考试&#xff0c;第一场是笔试&#xff0c;第二场是面试。笔试通过之后才…

2021-06-10 Multisim的74LS192功能表及555时基74LS190

缘由https://ask.csdn.net/questions/7445811?spm1005.2025.3001.5141以及60s倒计时电路连接后没有显示 - 24小时必答区 74LS192芯片是一个具有双计数功能的芯片&#xff0c;既可以做加计数&#xff0c;也可以做减计数。 1、A、B、C、D 置数输入端&#xff0c;管脚悬空相当…

Web端接入视频设备(NVR/IPC)

概述 本文主要介绍视频监控设备&#xff0c;视频监控设备接入&#xff0c;常用的开源流媒体及接入过程中的一些问题。 第一章 视频监控设备 目前常见的视频监控设备主要有NVR和IPC&#xff0c;以海康为例。 1.1 视频监控设备介绍 IPC即IP Camera&#xff0c;可以接入网络的…

06-GC垃圾收集器有那些?

如图展示了HotSpot虚拟机中7种不同的垃圾收集, 连线代表两者可搭配使用 1.Serial 垃圾收集器&#xff08;单线程、复制算法&#xff09; Serial&#xff08;英文连续&#xff09;是最基本垃圾收集器&#xff0c;使用复制算法&#xff0c;曾经是JDK1.3.1 之前新生代唯一的垃圾…