QT-Creator C/C++ 打地鼠小游戏

废话少说先上图:

这个游戏纯属土鳖思路,没有用到什么游戏引擎。

1.使用按钮或QLabel铺满窗口。

2.通过简单算法随机动态的设置按钮矩阵中某个按钮的背景图像。

3.同步2过程反复设置多个按钮背景实现图像动起来,注意调节刷新时间。

4.重写按钮组鼠标事件,设置鼠标移入时光标的图案,可以是个小锤子。

5.单击事件后鼠标同理切换鼠标图案打下和抬起。

6.加入一点声音。

7.没有了。

相关代码:

main.cpp

#include "widget.h"
#include <QApplication>
int Widget::score;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w ,*pW;
    pW = &w;
    w.setWindowTitle("打地鼠   难度:★   成绩:5只 ");
    w.setFixedSize(400,350);
    w.show();
    ////保持窗口指针
    return a.exec();
}

  

mybutton.cpp

#include "mybutton.h"
#include <QWidget>
#include <QMouseEvent>
#include <QIcon>
#include <QSize>
#include <QString>
#include<QPixmap>
#include<Qtimer>
#include<QSound>
#include "widget.h"
MyButton::MyButton(QWidget *parent):QPushButton(parent)
{
    upTime = new QTimer(this);//恢复锤子状态
    upTime->connect(upTime,SIGNAL(timeout()),this,SLOT(upCZ()));
   // btnGroup = Widget();
      this->image = 0;
}
void MyButton::mousePressEvent(QMouseEvent *e){
     this->setCursor(QCursor(QPixmap("C:/src/c1.png")));
     upTime->start(100);
     this->hit();
     //处理
}
void MyButton::hit(){
    QSound::play("hit.wav");
        if(this->image != 0){
                 this->setIcon(QIcon("C:/src/hit.jpg"));
                 QSound::play("dead.wav");//相对路径
                 Widget::score++;
        }
}
void MyButton::upCZ(){
    this->setCursor(QCursor(QPixmap("C:/src/c0.png")));
}

  

mybutton.h

#ifndef MYBUTTON_H
#define MYBUTTON_H
#include<QTimer>
#include <QPushButton>
#include <QWidget>
#include <QMouseEvent>
class MyButton : public QPushButton
{
    Q_OBJECT
public:

    int image;//图片张数
    MyButton(QWidget *parent);
    void hit();
    void mousePressEvent(QMouseEvent *e);

private:
    QTimer *upTime;
    MyButton *btnGroup;
public slots:
    void upCZ();//抬起锤子
};

#endif // MYBUTTON_H

  

widget.cpp

#include "widget.h"
#include "mybutton.h"
#include <QIcon>
#include <QSize>
#include <QTimer>
#include<QDebug>
#include<QCursor>
#include<QPixmap>
Widget::Widget(QWidget *parent):QWidget(parent)
{

   initBtn(5);
   time= QTime::currentTime();
   qsrand(time.msec()+time.second()*1000);
   //随机数进程
   srand[0] = 0;//地鼠具体位置
   srand[1] = 0;//地鼠具体位置
   srand[2] = 0;//地鼠具体位置
   srand[3] = 0;//地鼠具体位置
   srand[4] = 0;//地鼠具体位置
   timer = new QTimer(this);
   timer->connect(timer,SIGNAL(timeout()),this,SLOT(startRun()));
   timer->start(200);
   QPixmap qp(40,40);
   qp.load("C:/src/c0.png");
   qp.scaled(60,60);
   this->setCursor(QCursor(qp));
}
void Widget::initBtn(int num){
    int counter = 0;
    for(int i= 0;i < num;i++){
        for(int j = 0; j < 5;j++){
            buttonGroup[counter] = new MyButton(this);
            buttonGroup[counter]->resize(80,70);//400/5=80一行5个
            buttonGroup[counter]->move(80*j,70*i);
          //  buttonGroup[counter]->setText(QString::number(counter));
          //  buttonGroup[counter]->setStyleSheet("border:0px;");
            buttonGroup[counter]->setIcon(QIcon("C:/src/emptyhole.jpg"));
            buttonGroup[counter]->setIconSize(QSize(85,87));
            counter++;
        }
    }

    //载入图像资源
    for(int i = 0; i < 6 ;i++){
    icoGroup[i] = new QIcon("C:/src/"+QString::number(i)+".jpg");
    }
}
void Widget::startRun(){
    this->setCursor(QCursor(QPixmap("C:/src/c0.png")));//鼠标抬起
    for(int i = 0;i< 5;i++){//一次性更新5个位置
        if(buttonGroup[srand[i]]->image < 6){
            buttonGroup[srand[i]]->setIcon(*icoGroup[buttonGroup[srand[i]]->image++]);
            buttonGroup[srand[i]]->setIconSize(QSize(85,87));
        }else{
            buttonGroup[srand[i]]->setIcon(QIcon("C:/src/emptyhole.jpg"));
            buttonGroup[srand[i]]->setIconSize(QSize(85,87));
            buttonGroup[srand[i]]->image = 0;
            srand[i] = qrand()%25;
            qDebug("地鼠位置:%d",srand[i]);
            //分数
            setWindowTitle("打地鼠   难度:★   成绩:"+QString::number(score)+"只 ");
        }
    }

}

MyButton **Widget::getBtnGroup(){
    return buttonGroup;
}

Widget::~Widget()
{

}

  

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "mybutton.h"
#include <QIcon>
#include <QTimer>
#include<QTime>
class Widget : public QWidget
{
    Q_OBJECT

public:
    static int score;//分数统计
    Widget(QWidget *parent = 0);
    void initBtn(int num);
    MyButton **getBtnGroup();
    ~Widget();

private:
    MyButton *buttonGroup[25];
    QTimer *timer;//刷新界面事务
    QIcon *icoGroup[6];
    QTime time;
    int srand[5];//具体位置
public slots:
   void startRun();//开始游戏
};

#endif // WIDGET_H

思路原始,写法丑陋,大神请无视,初学者可以学习下。

FROM CTGU HOMEWORK

时间: 2024-10-12 18:46:02

QT-Creator C/C++ 打地鼠小游戏的相关文章

5Unity-3d Day05 打地鼠小游戏

用GUI写了一个打地鼠的小游戏   hiahia 摄像机的脚本里加代码: using UnityEngine; using System.Collections; public class MoleScript : MonoBehaviour { public GUISkin skin; public Texture2D bgImg; public int num; public Texture2D[] susliks = new Texture2D[12]; public Rect[] pos

屏幕坐标和世界坐标的转换+对象池技术(3D打地鼠小游戏)

游戏中可能经常会遇到需要某个物体跟着鼠标移动,然后又需要把物体放在某个鼠标指定的位置 实现方式 Camera.main.WorldToScreenPoint Camera.main.ScreenToWorldPoint 3D打地鼠实例 我这里用到的素材都比较简陋,几乎全是用Unity做的 首先是锤子 就是两个Cylinder,在把手的位置放一个空物体用于模拟锤子的动作,命名为Hammer,把锤子作为Hammer的子物体,给Hammer添加Animation动画: 在三个关键帧位置设置Hammer

一个基于Myeclipse开发的Java打地鼠小游戏(Appletcation)

1 package javaes.zixue.wangshang.daima; 2 3 import java.awt.Cursor; 4 import java.awt.Image; 5 import java.awt.Point; 6 import java.awt.Toolkit; 7 import java.awt.event.ActionEvent; 8 import java.awt.event.ActionListener; 9 import java.awt.event.Mous

用html+css+js做打地鼠小游戏

html 代码 first.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>打地鼠</title> <link rel="stylesheet" href="first.css"> </head> <body> <

jquery制作打地鼠小游戏

效果图: 素材: bg.jpg hole.pngmole.png <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scal

MFC制作打地鼠小游戏

游戏说明如下: 打中老鼠加一分,一局时间为60秒,上面有个进度条和文字进行计时. 难度可以自己选择,难度低是老鼠每一秒出现一次,难度中是老鼠每0.6秒出现一次,难度高是老鼠每0.2秒出现一次. 效果图(背景.美化可以自己去改进): 代码如下: 1. // y10Dlg.h : header file// #if !defined(AFX_Y10DLG_H__8D9895CE_53DF_4FA0_823C_1B5C468F422E__INCLUDED_)#define AFX_Y10DLG_H__

Qt Quick实现的疯狂算数游戏

使用 Qt Quick 写了个小游戏:疯狂算数.支持 Windows 和 Android 两个平台. 就差您这一票了亲:博客之星评选,点击投我一票,谢谢.投过了也可以点哦,每天都可以投投一票. 游戏简单,但牵涉到下面你的 Qt Quick 主题: 自己实现一个按钮 自适应分辨率 国际化 QML与C++混合编程 APK图标设置 APK名称汉化 动画 其实所有这些内容,在我的书<Qt Quick核心编程>里都讲到了,感兴趣的朋友可以看我的书. 大概来看一下吧,先看效果. Android 手机运行效

C++_DOS命令下_猫狗大战小游戏(初识QT小练习)

最近马上就要学习QT了,在此复习一下C++一些基本的知识.即:封装,继承,多态.还有this,new,delete,namespace等关键字的用法. IDE:QT creator 2.8.0 操作系统:windows XP 游戏介绍:游戏才用回合制,相互“伤害”,血量为0或者为负值的一方战败,游戏结束.               在血量>=%80时,  其战斗力系数为  1       防御力系数为 1               在血量>=%60时,  其战斗力系数为  0.75  防御

利用javascript实现的小游戏-打地鼠

随着html5的兴起,那些公司对大型游戏的开发正在慢慢疏远,一.开发周期长:二.运营花费高:他们正找一些能够克服这些缺点的替代品.正好,html5的出现可以改变这些现状,在淘宝.京东等一些大型电商网站.QQ.微信等聊天软件都出现了html5的小游戏,这说明html5越来越受到大家的青睐.接下来我用javascript实现一个小型游戏---打地鼠. 打地鼠其实很好实现,主要思路有:先用表格做一个3*3的九宫格,然后放9张坑的图片-->设置一个小于等于9的随机数k,然后让k的坑的图片替换成地鼠的图片