QT初探——开发双人小游戏

QT初探

首先是QT creator 这个专门用来写QT的编辑器

信号与槽 (signal and slot)

一共有三种方式连接:

1.直接在UI界面中下面有个框,直接选择发送者、信号、接收者、槽。这也在一定程度上提醒我们用第三种方式的连接参数填什么
2.在UI界面中将你所添加的控件点击右键,选择“转到槽”,它自动给你在Mainwindows.h中添加 private slots:...
在Mainwindows.cpp中添加槽函数具体实现方式
3.直接在 Mainwindows.cpp 中写下 connect(组件名,信号,你当前的界面,槽函数) 

 //连接信号与槽
 具体格式就是:发送方、信号、接收方、槽函数 connect(button,SIGNAL(clicked()),this,SLOT(close()));

常用控件 (即学即查)

QPushbutton

QLabel 用于显示文本,但是不提供用户交互功能

QLineEdit 行编辑允许用户使用一组有用的编辑功能 输入和编辑单行纯文本

QComnoBox 提供一种向用户呈现选项列表的方式,该方式占用的屏幕空间最小

QTimer  为定时器提供了一个高级编程接口,要使用他,创建一个QTimer 将其timeout() 信号 连接到相应的槽函数,然后调用 start(),从那时起,将以恒定的间隔发出timeout() 信号

QDataTime 对**日历日期和时钟时间**进行编码,结合了QData和QTime类的功能,它可以从系统时钟读取当前的日期时间

QkeyEvent键盘事件,主要功能为获取键盘输入,并根据键盘输入来执行相应功能;使用方法为重载函数 keyPressEvent(QkeyEvent),keyReleaseEvent(QkeyEvent)

QMouseEvent鼠标事件,主要功能为获取鼠标输入,并根据鼠标输入来执行相应功能;使用方法为重载函数MousePressEvent(QMouseEvent),MouseReleaseEvent(QMouseEvent)

容器

qVector

若只读的话 就可以用at函数

若需要查找,就用 indexOf()返回一个索引

自己做的小玩意(找食物)

在UI界面中QPushButton 实现控制小球 ,键盘也可以控制小球

如遇到食物就结束 定时器设置倒计时 如果定时器已经到时 则停止运动

(正向定时器也可以,变换一下就是求小球找到食物的时间)看自己喜好

然后获取小球的坐标 ,食物坐标放旁边 (拿来比对)

边做边优化

遇到的问题

1.在新建对象后,再次写ui->frame会再次在frame上创建一个小球,并不是ui->ball 而是我新建的这个对象已经在ui->frame里面了,直接用ball->x() ball->y() 就好

2.在鼠标控件事件中需要一直按下鼠标左键才得以获取实时坐标,所以我们在一开始先初始化整个centerQWidget,从而使鼠标能在这上面进行实时性获取

ui->centralwidget->setMouseTracking(true);

现在进度是添加了一个定时器,需要进行倒计时计数,相关逻辑还没写

倒计时逻辑: 若50s事件用完 ball 还没有找到 food ,直接结束游戏 并且frame上写 You're failed ;若50s时间用完之前找到了food ,则 结束游戏写 You finshed

想着是后续球去找食物,但是这里有个逻辑我一直没想好怎么写:小球碰到食物 这个地方坐标怎么考虑?

第一个想法: 小球的坐标与食物的坐标重合 但是这是吃掉了,完全吻合不一定 会有误差

第二个想法: 小球的横坐标到达 上下界的food的横坐标;纵坐标到达上下界的 food的纵坐标

26.3.7 14:30 upd:

* 把右下方的时间添加上了,connect连接用统一的宏定义模式 时间的话就是槽函数实现那里注意一下,用datetime里的currentDateTime()函数
后续获取到框里的数据后用QString转化出来

* 将倒计时加进去了,实现一个整型变量读取框中的 50s 依次递减即可

* 把食物也一起加上键盘控制键

* 现在就是判断游戏结束了,就是边界条件判断
写了一个矩阵边界重合判断 写进倒计时结束 (num == 0) 中,但是我的ui->frame并没有setText 我只能在frame中放入一个label 进行显示

* 在结束之后还得进行重置,当时我自己想的是time->stop() 之后 QPushbutton 重新摆一个组件clear 重新设置成 50 那么我就在头文件中直接定义 initnum = 50 而后直接 ui->lcdNumber->display(initnum);

26.3.8 upd:

* 把food键盘事件加进去 并且调整边框坐标 

好了,项目到此结束!完整代码请看 https://github.com/Alasoshuang18/QT_game_Limited-time-arrest

posted @ 2026-03-08 17:06  Alaso_shuang  阅读(58)  评论(0)    收藏  举报
2 3
4