广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >基于Qt实现电子木鱼小游戏
  • 797
分享到

基于Qt实现电子木鱼小游戏

Qt电子木鱼游戏Qt电子木鱼Qt 木鱼 2023-01-03 18:01:13 797人浏览 薄情痞子
摘要

目录前言一、界面展示二、功能模块1) 木鱼缩放2) 功德+1 显示3) 音乐4) 自动5) 延时三、完整代码前言 今年最火爆的解压小游戏电子木鱼,现在许多软件都上架了这个小程序。我在

前言

今年最火爆的解压小游戏电子木鱼,现在许多软件都上架了这个小程序。我在网上看了一下基本上都是用py和Java写的,所以我用Qt重新写了一下,作为小白练手项目非常适合

一、界面展示

二、功能模块

功能设计

鼠标点击和释放事件,模拟敲打木鱼动作

每一次的敲打木鱼都会缩小和放大一次

并且在木鱼上方显示出"功德+1"字样和播放一次敲打木鱼的声音

背景音乐一直播放

设置一个按钮为自动敲击木鱼

设置一个按钮为背景音乐的开关

1) 木鱼缩放

我是使用的一个label来放图片

缩小的原理是在现有木鱼图片大小上长和宽都同时缩小一个比例m

因为是按照中心点不变的缩小

所以左上点pos的坐标下降m/2

放大同理

// m =  10 图签放大,pos点上移.
// m =  -10 图签缩小,pos点下移.
void Widget::MuYu(int m)
{
    //获取当前label图片宽
    int currentWidth = ui->label->width();
    //获取当前label图片高
    int currentHeight = ui->label->height();
    //改变图片大小
    currentWidth += m;
    currentHeight += m;
    //在标签上重新设置图片大小和图片起始位置
    ui->label->setGeometry(ui->label->pos().x()-m/2,ui->label->pos().y()-m/2,currentWidth, currentHeight);
}

2) 功德+1 显示

用一个label设置文字 “功德+1”

这里文字出现的位置可以是随机的也可以定点出现

随机出现可以跟踪鼠标点击的位置

定点出现要提前写一个QPoint指定地点 (示例这个方式)

每一次出现后先上移一定位置(会使用QT动画函数 QPropertyAnimation ),然后消失

void Widget::Gongde()
{
    ui->label_2->setText("功德+1");
    //QPropertyAnimation *m_TopPropertyAnimation;
    //绑定要移动的label对象
    m_TopPropertyAnimation->setTargetObject(ui->label_2);
    //设置按pos属性移动
    m_TopPropertyAnimation->setPropertyName("pos");
    // set 动画的起点、终点、持续时间
    m_TopPropertyAnimation->setDuration(600);
    m_TopPropertyAnimation->setStartValue(pos);
    m_TopPropertyAnimation->setEndValue(pos+QPoint(0, -120));
    // 启动和结束
    m_TopPropertyAnimation->start();
    //这里加一个延时函数避免,避免动画没有结束直接清除文字
    Delay(600);
    //清除文字
    ui->label_2->clear();
}

3) 音乐

背景音乐BGM<<大悲咒>>直接功德加满

void Widget::bgMusice()
{
    //QMediaPlayer *bg_player;
    qDebug()<<"dmz";
    //BACKMUSICE 宏定义文件路径
    bg_player->setMedia(QUrl::fromLocalFile(BACKMUSICE));
    bg_player->setVolume(10);
    bg_player->play();
    // 槽函数 监听QMediaPlayer::mediaStatusChanged信号 实现背景音乐循环播放
    connect(bg_player, &QMediaPlayer::mediaStatusChanged,this,&Widget::initStatus);
}
void Widget::initStatus(QMediaPlayer::MediaStatus status)
{
    if(status == QMediaPlayer::EndOfMedia)
        {
            bg_player->setPosition(0);
            bg_player->play();
        }
}

敲击木鱼声音

void Widget::MuYuMusice()
{
    //QMediaPlayer *MuYu_player;
    //设置要播放的媒体
    //MUYUMUSICE宏定义文件路径
    MuYu_player->setMedia(QUrl::fromLocalFile(MUYUMUSICE));
    //设置音量
    MuYu_player->setVolume(50);
    //播放
    MuYu_player->play();
}

4) 自动

写个槽函数,定时器定时触发,可以绑定滑杆设置一个敲打频率,同理可以调节背景音乐大小

void Widget::Auto()
{
    qDebug()<<"Auto";
    //图片缩小
    MuYu(-10);
    //敲到木鱼声音
    MuYuMusice();
    //功德+1文字
    gongde();
    //图片放大
    MuYu(10);
}

5) 延时

void Widget::Delay(int delay_time)
{
    QEventLoop loop;
    QTimer::singleShot(delay_time,&loop,SLOT(quit()));
    loop.exec();
}

三、完整代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QRect>
#include <QPropertyAnimation>
#include <QMediaPlayer>
#include <QTime>
#include <QTimer>
#include <QSystemTrayIcon>
#include <QLabel>
#include <QPainter>
#include <QRect>

#define WIDTH 480
#define HEIGH 640
#define MUYUMUSICE "C:\\Users\\Liu\\Desktop\\code\\QT\\muyu\\untitled\\musice\\muyu.mp3"
#define BACKMUSICE "C:\\Users\\Liu\\Desktop\\code\\QT\\muyu\\untitled\\musice\\bg.mp3"
#define ICON ":/img/muy.ico"

QT_BEGIN_NAMESPACE

namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void mousePressEvent(QMouseEvent *event);   //点击
    void mouseReleaseEvent(QMouseEvent *event); //释放
    void MuYu(int);
    void gongde();
    void MuYuMusice();
    void bgMusice();
    void Delay(int);
    void tray();
    void initStatus(QMediaPlayer::MediaStatus status); // 槽函数 监听QMediaPlayer::mediaStatusChanged信号
private slots:
    void on_toolButton_2_clicked(bool checked);
    void on_toolButton_clicked(bool checked);
    void Auto();

private:
    Ui::Widget *ui;
    QMediaPlayer *MuYu_player;
    QMediaPlayer *bg_player;
    QPoint pos;
    QPropertyAnimation *m_TopPropertyAnimation;
    QTimer *timer;
    QSystemTrayIcon *m_systemTray;
    int conut=0;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QMouseEvent>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    setMouseTracking(true);
    ui->setupUi(this);
    bg_player = new QMediaPlayer;
    MuYu_player = new QMediaPlayer;

    this->setWindowTitle("电子木鱼");
    this->setFixedSize(WIDTH,HEIGH);
    this->setWindowIcon(QIcon(ICON));
    m_TopPropertyAnimation = new QPropertyAnimation(this);
    pos=ui->label_2->pos();

    timer = new QTimer;
    connect(timer,SIGNAL(timeout()),this,SLOT(Auto()));
    bgMusice();
    tray();

}

Widget::~Widget()
{
    delete ui;
}

void Widget::tray()
{
    m_systemTray = new QSystemTrayIcon(this);
    m_systemTray->setIcon(QIcon(ICON));
    m_systemTray->setToolTip("SystemTray Program");
    m_systemTray->show();
}

// m=10 图签放大 pos点上移
// m=-10 图签缩小 pos点下移
void Widget::MuYu(int m)
{
    //获取当前label图片宽
    int currentWidth = ui->label->width();
    //获取当前label图片高
    int currentHeight = ui->label->height();
    //改变图片大小
    currentWidth += m;
    currentHeight += m;
    //在标签上重新设置图片大小和图片起始位置
    ui->label->setGeometry(ui->label->pos().x()-m/2,ui->label->pos().y()-m/2,currentWidth, currentHeight);
}
void Widget::MuYuMusice()
{
    //设置要播放的媒体
    MuYu_player->setMedia(QUrl::fromLocalFile(MUYUMUSICE));
    //设置音量
    MuYu_player->setVolume(50);
    //播放
    MuYu_player->play();
}

void Widget::bgMusice()
{
    qDebug()<<"dmz";
    bg_player->setMedia(QUrl::fromLocalFile(BACKMUSICE));
    bg_player->setVolume(10);
    bg_player->play();
    // 槽函数 监听QMediaPlayer::mediaStatusChanged信号 实现背景音乐循环播放
    connect(bg_player, &QMediaPlayer::mediaStatusChanged,this,&Widget::initStatus);
}
void Widget::initStatus(QMediaPlayer::MediaStatus status)
{
    if(status == QMediaPlayer::EndOfMedia)
        {
            bg_player->setPosition(0);
            bg_player->play();
        }
}

void Widget::gongde()
{
    ui->label_2->setText("功德+1");
    // bind
    m_TopPropertyAnimation->setTargetObject(ui->label_2);
    m_TopPropertyAnimation->setPropertyName("pos");
    // set 动画的起点、终点、持续时间
    m_TopPropertyAnimation->setDuration(600);
    m_TopPropertyAnimation->setStartValue(pos);
    m_TopPropertyAnimation->setEndValue(pos+QPoint(0, -120));
    // 启动和结束
    m_TopPropertyAnimation->start();
    Delay(600);
    ui->label_2->clear();
}

void Widget::mousePressEvent(QMouseEvent *event)
{
    qDebug()<<"press";
    MuYu(-10);
    MuYuMusice();
    gongde();
}

void Widget::mouseReleaseEvent(QMouseEvent *event)
{
    qDebug()<<"release";
    MuYu(10);
}

void Widget::on_toolButton_clicked(bool checked)
{
    if (checked) {
        timer->start(500);
    }
    else {
        timer->stop();
    }
}

void Widget::on_toolButton_2_clicked(bool checked)
{
    if(checked)
    {
        bg_player->stop();
    }else {
        bg_player->play();
    }
}

void Widget::Auto()
{
    qDebug()<<"Auto";
    MuYu(-10);
    MuYuMusice();
    gongde();
    MuYu(10);
}

//延时
void Widget::Delay(int delay_time)
{
    QEventLoop loop;
    QTimer::singleShot(delay_time,&loop,SLOT(quit()));
    loop.exec();
}

到此这篇关于基于Qt实现电子木鱼小游戏的文章就介绍到这了,更多相关Qt电子木鱼内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 基于Qt实现电子木鱼小游戏

本文链接: https://www.lsjlt.com/news/176571.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Qt实现电子木鱼小游戏
    目录前言一、界面展示二、功能模块1) 木鱼缩放2) 功德+1 显示3) 音乐4) 自动5) 延时三、完整代码前言 今年最火爆的解压小游戏电子木鱼,现在许多软件都上架了这个小程序。我在...
    99+
    2023-01-03
    Qt电子木鱼游戏 Qt电子木鱼 Qt 木鱼
  • 基于Python实现骰子小游戏
    目录导语一、环境准备 二、代码展示三、效果展示导语 哈喽!大家晚上好,我是木木子吖,很久没给大家更新游戏代码的类型啦~ 骰子,是现在娱乐场所最常见的一种玩乐项目。一般骰子分...
    99+
    2023-02-28
    Python实现骰子游戏 Python骰子游戏 Python游戏
  • 基于C++实现五子棋小游戏
    本文实例为大家分享了C++实现五子棋小游戏的具体代码,供大家参考,具体内容如下  (这是一个颜色会变化的呦) #include <iostream> usi...
    99+
    2022-11-13
  • 基于flask实现五子棋小游戏
    本文实例为大家分享了基于flask实现五子棋小游戏的具体代码,供大家参考,具体内容如下 前言 首先说明一下,本人方向是java后端,只因老师布置了一个作业,要用flask来做一个五子...
    99+
    2022-11-12
  • 基于Python如何实现骰子小游戏
    这篇文章主要讲解了“基于Python如何实现骰子小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于Python如何实现骰子小游戏”吧!一、环境准备 1)运行环境 &...
    99+
    2023-07-05
  • 基于C语言实现三子棋小游戏
    在写三子棋之前,我们要先了解三子棋的一个大概的图形,以便于我们整理思路。          ...
    99+
    2022-11-12
  • 基于JS如何实现接粽子小游戏
    这篇文章主要介绍“基于JS如何实现接粽子小游戏”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于JS如何实现接粽子小游戏”文章能帮助大家解决问题。游戏设计在游戏屏幕内,会随机的从顶部掉落粽子,通过鼠...
    99+
    2023-06-30
  • 基于Python实现五子棋游戏
    本文实例为大家分享了Python实现五子棋游戏的具体代码,供大家参考,具体内容如下 了解游戏的规则是我们首先需要做的事情,如果不知晓规则,那么我们肯定寸步难行。 五子棋游戏规则: 1...
    99+
    2022-11-10
  • 基于jquery实现五子棋游戏
    本文实例为大家分享了jquery实现五子棋游戏的具体代码,供大家参考,具体内容如下 花了一天时间完成一个简单五子棋游戏(非人机) html: <!DOCTYPE html>...
    99+
    2022-11-13
  • 基于python pygame实现的兔子吃月饼小游戏
    目录小游戏规则简介 实现 初始化游戏窗口 游戏逻辑 实现玩家类 实现月饼类 交互逻辑 总结中秋佳节就快来临,给各位大佬整个兔子吃月饼的小游戏助助兴,废话不多说,开整。 小游戏规则简介...
    99+
    2022-11-12
  • 基于JS实现接粽子小游戏的示例代码
    目录游戏设计游戏实现添加粽子元素粽子掉落难度选择开始游戏总结端午节马上就到了,听说你们公司没发粽子大礼包?没关系,这里用 JS 实现了一个简单的接粽子小游戏,能接到多少粽子,完全看你...
    99+
    2022-11-13
  • 基于C语言实现三子棋游戏
    说到三子棋,我想大家一定不陌生吧,它也是我童年中的一部分,今天我们用C语言来实现一下简易版的三子棋。 首先,介绍一下游戏规则: 1.在一个九宫格上进行下棋; 2.玩家两名,双方先后落...
    99+
    2022-11-12
  • 基于MFC实现贪吃蛇小游戏
    本文实例为大家分享了MFC实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 一、功能描述 (1)通过“START”、“PAUSE”、“EXIT”三个控件,控制游戏的开始、暂停和终...
    99+
    2022-11-12
  • 基于Python实现炸弹人小游戏
    目录前言效果展示开发工具环境搭建原理简介主要代码前言 今天用Python实现的是一个炸弹人小游戏,废话不多说,让我们愉快地开始吧~ 效果展示 开发工具 Python版本: 3.6....
    99+
    2022-11-12
  • 基于C语言实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 game.h 设置头文件 #include<stdio.h> #include<s...
    99+
    2022-11-12
  • 基于Python实现自制拼图小游戏
    咱们Python 集中营有一个专题就是分享一些有意思的东西,今天大概看了一下pygame的这个非标准库就想着使用它来做个小游戏-拼图。 通过加入自己定义的图片,对这个图片完成一定数...
    99+
    2022-11-13
    Python拼图游戏 Python拼图
  • C++基于EasyX库实现拼图小游戏
    用C++的EasyX库做的拼图小游戏,供大家参考,具体内容如下   记录一下自己做的第一个项目,还有一些改进空间QWQ,可以支持难度升级,但是通关判断似乎有点...
    99+
    2022-11-12
  • 基于Python实现英语单词小游戏
    目录导语一、敲代码之前的小tips二、运行环境三、素材(图片等)四、代码展示1)主程序(英文打字小游戏主入口模块)2)游戏配置信息模块3)游戏视图模块4)PyGame游戏精灵模块五、...
    99+
    2022-11-16
    Python英语单词游戏 Python 单词游戏 Python 游戏
  • 基于Python怎么实现射击小游戏
    本文小编为大家详细介绍“基于Python怎么实现射击小游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于Python怎么实现射击小游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.游戏画面1.1开始1....
    99+
    2023-06-29
  • 基于Python如何实现格斗小游戏
    本文小编为大家详细介绍“基于Python如何实现格斗小游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于Python如何实现格斗小游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、简易版本格斗impor...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作