Python 和 PyQt5 实现打地鼠小游戏

news2024/11/19 23:19:40

Python 和 PyQt5 实现打地鼠小游戏

实现效果:

视频效果:

https://live.csdn.net/v/264602icon-default.png?t=M85Bhttps://live.csdn.net/v/264602

 代码:

import random
import sys

from PyQt5.QtCore import QBasicTimer, Qt, QTimer
from PyQt5.QtGui import QColor, QImage, QPixmap
from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QMainWindow

class WhackAMole(QMainWindow):
    def __init__(self):
        super().__init__()

        # 设置窗口属性
        self.setWindowTitle("Whack-A-Mole")
        self.setGeometry(300, 300, 250, 150)

        # 创建一个图形场景
        self.scene = QGraphicsScene()
        self.view = QGraphicsView(self.scene)

        # 创建一个计时器
        self.timer = QBasicTimer()
        self.interval = 1000  # 每一秒发生一次事件

        # 创建一个地鼠
        self.mole = self.scene.addPixmap(QPixmap("mole.png"))
        self.mole.setPos(random.randint(0, 200), random.randint(0, 100))
        self.mole.setZValue(1)

        # 设置窗口布局
        self.setCentralWidget(self.view)

    def startGame(self):
        self.timer.start(self.interval, self)

    def timerEvent(self, event):
        if event.timerId() == self.timer.timerId():
            # 随机移动地鼠
            self.mole.setPos(random.randint(0, 200), random.randint(0, 100))
        else:
            super().timerEvent(event)

    def mousePressEvent(self, event):
        # 点击地鼠时,将地鼠隐藏
        if self.mole.isUnderMouse():
            self.mole.hide()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    game = WhackAMole()
    game.show()
    game.startGame()
    sys.exit(app.exec_())

这个程序使用 PyQt5 创建了一个窗口,并在窗口中添加了一个图形场景和一个地鼠图像。它还创建了一个计时。

如果你想让窗口能够随用户的操作自由改变大小,可以使用 PyQt5 的 setWindowFlag 方法将窗口标记设置为 Qt.Window。例如:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow

app = QApplication(sys.argv)
window = QMainWindow()
window.setWindowTitle("My Window")
window.setGeometry(300, 300, 250, 150)

# 设置窗口标记为 Qt.Window,使窗口能够自由改变大小
window.setWindowFlag(Qt.Window)

window.show()
sys.exit(app.exec_())
如果你想在窗口大小改变时执行某些操作,可以使用 resizeEvent 事件处理器。例如,下面的代码在窗口大小改变时输出当前窗口的宽度和高度:
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("My Window")
        self.setGeometry(300, 300, 250, 150)
        self.setWindowFlag(Qt.Window)

    def resizeEvent(self, event):
        # 在窗口大小改变时输出当前窗口的宽度和高度
        print(f"Window resized: {event.size().width()} x {event.size().height()}")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

 注意,在使用 resizeEvent 事件处理器时,需要调用父类的 resizeEvent 方法。这是因为,在 PyQt5 中,事件处理器是通过覆盖父类的方法来实现的。

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

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

相关文章

CSS3【基础选择器、字体样式、文本样式、行高样式】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录基础选择器1. 标签选择器2. 类选择器3. id选择器字体和文本样式1.字体样式1.1 字体大小1.2 字体粗细1.3 字体样式(是否倾斜)1.4 常见字体系列…

JAVA中实现多线程-单例双重锁(DCL(Double Check Lock)双重锁检查)

一 .多线程 继承 Thread 类实现 Runnable 接口实现 Callable 接口线程池 重写run方法,创建对象,调用start()方法启动线程 1,新生状态 – 用new关键字建立一个线程后,该线程对象就处于新生状态。 – 处于新生状态的线程有自己的…

Netty前置知识

传统IO 这里以文件输入输出流:FileInputStream 、 FileOutputStream 来进行解释。由继承关系得知,这两个输入和输出类继承自 InputStream 和 OutputStream 这两个基础的输入、输出的抽象类,这时我们可以看到当我们需要读写文件的时候&#x…

leetcode--搜索

搜索1.深度优先搜索(DFS)(1)岛屿的最大面积(695)(2)省份数量(3)太平洋大西洋水流问题(417)2.回溯法(1)全排列(46)(2)组合(77)(3)单词搜…

C++ allocator设计内存管理器

文章目录allocator内存管理器基本属性类的设计关键功能的实现完整的内存管理器内存管理器的测试:设计自定义的String类。前情回顾: allocator内存管理类 allocator内存管理器 某些类需要在运行时分配可变大小的内存空间,一般来说我们使用容器…

从零搭建完整python自动化测试框架(UI自动化和接口自动化)

从零搭建完整python自动化测试框架(UI自动化和接口自动化) 文章目录 总体框架 PO模式、DDT数据驱动、关键字驱动 框架技术选择 框架运行结果 各用例对应的定义方式(PO/DDT) 测试执行结果 从零开始搭建项目 一、开发环境搭…

泪目,终于有P8大佬把困扰我多年的《计算机网络原理》全部讲明白了

前言 为什么网络协议这么重要呢?集群规模一大,我们首先想到的就是网络互通的问题;应用吞吐量压不上去,我们首先想到的也是网络互通的问题。所以,要成为技术牛人,搞定大系统,一定要过网络这一关&…

Mac怎么清理缓存?这两种方法都非常好用哦

与电脑系统或应用程序非常相似,您的Mac也有自己的系统缓存,它可以在后台临时存储数据,以加快软件安装速度并减少互联网数据使用量(通过Apple)。与电脑系统或应用程序类似,缓存数据可能会开始堆积——占用存…

unordered系列关联式容器以及哈希表原理实现

Ⅰ. unordered 系列关联式容器 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 log2nlog_2 nlog2​n,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的…

Android Studio Profiler 检查内存

Android Studio Profiler 检查内存简单介绍 如何使用? 第一步:点击Profiler按钮 第二步:选择 第三步:选择Capture heap dump 并点击Record 解释相关按钮的功能 垃圾桶按钮:用于强制执行垃圾回收事件的按钮&#xff…

LinkedList(JDK1.8)源码+底层数据结构分析

文章目录前言一、双向链表1.1 双向链表示意图1.2 LinkedList 属性1.3 Node 节点对象二、双向链表的操作2.1 添加元素-add2.2 删除元素-remove2.3 修改元素-set2.4 查询元素-get前言 双向链表是一种数据结构,由若干个节点构成,其中每个节点均由三部分构成…

疯狂游戏笔试题-2022秋招

编程题 1.假设数组第一个元素是k, 如果k在数组内, 则k*21 和 k*31也在数组内. 在已知k的情况下, 需算出另一个数是否也在数组内? 例子: 输入1,2 输出False 输入1,4 输出True 解题思路:暴力(doge),实在想不到其它好方法,有…

生成模型详解

一、生成模型的定义 给定的训练集X{x1,x2,...,xn}X \{x^1,x^2,...,x^n\}X{x1,x2,...,xn}隐变量zzz满足p(z)N(0,I)p(z) \mathcal{N} (0,I)p(z)N(0,I)定义一个条件分布pθ(x∣z)p_{\theta}(x|z)pθ​(x∣z),θ\thetaθ可以理解为生成模型的参数训练好模型后&#xff…

java高校宿舍费缴纳报修管理系统ssm1561

系统选用B/S模式,应用jsp技术, MySQL为后台数据库。系统主要包括个人中心、学生管理、宿管管理、宿舍信息管理、宿舍预订管理,在线报修管理、费用缴纳管理、投诉建议管理、论坛交流、系统管理等功能模块。 本系统采用从上往下的步骤开发&…

爬虫学习-数据解析三种方式:正则、bs4、xpath,以及一些实例操作

若出现乱码page_text page_text.encode(iso-8859-1).decode(gbk)或者查看源码head里面的说明,设置成相同的即可 数据解析原理概述 解析的局部的文本内容都会在标签之间或者标签对应的属性中进行储存数据解析就是 1、进行指定标签的定位2、标签或者标签对应的属性中…

设计模式之美总结(结构型篇)

title: 设计模式之美总结(结构型篇) date: 2022-12-21 09:59:11 tags: 设计模式 categories:设计模式 cover: https://cover.png feature: false 文章目录1. 代理模式(Proxy Design Pattern)1.1 原理解析1.2 动态代理1.3 应用场景…

排查Java服务CPU使用率高达100%的原因

排查Java服务CPU使用率高达100%的原因 Java服务在服务器运行一段时间,有一天CPU使用率突然高达100%,通过jstack工具分别在CPU使用率为100%时执行了一次堆线程dump和cpu使用率降下来后执行了一次堆线程dump 目录排查Java服务CPU使用率高达100%的原因一、环…

【SQL】一文详解嵌入式SQL(建议收藏)

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…

SQLMap 扫描利用SQL注入

一、SQLMap介绍 SQLMap 是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库是MySQL 、Oracle 、PostgreSQL 、Microsoft SQL Server、Microsoft Access 、IBM DB2, SQ Lite 、Fir…

光伏行业管理亟待变革,数商云供应链系统订单流程自动化流转助力企业降本增效

作为实现“3060”双碳目标的主力军,光伏产业正迎来空前的政策、市场、资本三重加持的红利期。有业内人士预测,到2025年全球新增光伏装机量将达到270-330GW,国内新增光伏装机量将达到90-110GW,十四五期间年均新增光伏装机量将达到7…