pycharm制作一个色子游戏_【C++学习笔记】用Qt制作一个打地鼠游戏

界面设计

首先在MainWindow上采用一个垂直布局。放入一个GraphicsView作为游戏的显示界面,放入一个LCD Number作为记分器,放入三个PushButton并分别修改他们的Text属性,改为“开始” “暂停” “停止”,并修改他们的objectName属性,改为btn_start btn_pulse btn_stop

5c48f541d25b1d9bbbfdfd681e1c82db.png

填充背景

Qt填充Graphicsview的顺序是这样的:view-scene-item,所以我们要在GraphicsView中添加scene,在scene中添加item。这里我分别创建了MyScene和MyItem两个类,其中MyScene继承自QGraphicsScene,MyItem继承自QGraphicsPixmapItem。其中MyScene的私有属性有MyItem类型的长度为16的数组,因为画面大小是4X4,所以长度为16,每一个item对应场景中的一张图片。在MyItem中我定义了每张图片的背景(background图片)

bf0313ff3483a42044b7bbb5f0df5799.png

并将光标改为了锤子(hammerUp图片)

61182d368060aaa4f5633a55f4052ca9.png

重写了鼠标按下事件,使鼠标按下时候光标从hammerDown这张图片变成hammerUp这张图片。

7da886f17d97721b6b6fae8e8fdc627b.png

弹出地鼠

先随机出数值为1-3的一个随机数,作为弹出地鼠的数量,在随机出一个数值为0-15的数,作为弹出地鼠的位置,同时在把backgrpung图片变为地鼠图片的时候,把MyItem中mouse属性设为true,这个属性是作为之后记分的依据。

4eeb51ab430f7a337f19d642439ed6a5.png

记分

在MainWindow类中写了一个updateScore函数,每次接收到信号时,lcdNumber上的数字就变一次。

bc6aa9bc9ab8483914900abce65cd5a5.png

为了自定义一个信号,我创建了一个名为handler的类,采用单例模式,定义了信号函数beatMouse()和公有函数addScore(),每次调用这个addScore时函数都会发送beatMouse()信号。

388ad11f1a00be103a7ebc26d62b0dff.png

895154cad1a2e2de2a1eb790b9796094.png

在MyItem类中重写的鼠标按下事件函数中获取handler实例,如果mouse属性为true,则调用handler的addScore()函数记分。并且在MyItem中新增一个hit属性,这是为了防止鼠标连续点击同一个地鼠造成重复记分

ae1c48e50ce5e89ae89e05a896a32ff4.png

三个PushButton的功能与其他杂项。

在MainWindow中重写关闭事件,使用户点击关闭时不会立刻关闭,而是弹出一个窗口询问用户是否确定要关闭

1f75cd2ddfb4a57c7d1357cdcdb244ee.png

“开始” “暂停” “停止”按钮功能

先绑定信号与槽,startGame() pulseGame() stopGame()都是自己定义的槽函数

b10ae101c0eb0852520182f79da85988.png

0a6c3561818f064528daa93ed7a6231c.png

效果图

909772af2b89b0e56015a2f8a925b609.png

完整代码

handler.h

#ifndef HANDLER_H

handler.cpp

#include 

mainwindow.h

#ifndef MAINWINDOW_H

maindow.cpp

#include 

myitem.h

#ifndef MYITEM_H

myitem.cpp

#include 

myscene.h

#ifndef MYSCENE_H

myscene.cpp

#include 

main.cpp和默认的一致,就不放了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值