基于qt拼图小游戏_qt5.15 步步走-16.做个小游戏2

前一讲:qt5.15 步步走-15.做个小游戏

aa968eca32af07e3da25632ec3581a08.png

示例:D:QtExamplesQt-5.15.1widgetsanimationsub-attaq

这是一个完全可以当作毕业设计的小项目

拆分需求

使用Graphics View Framework + State Machine Framework 实现2D动画游戏是常用做法。可能会加入OpenGL优化和加速显示效果;

设计模式用于帮助面向对象的系统构建,其核心是 拆分 数据,控制和显示;一般都为三层结构;我们基于这个思想设计这个游戏;

本项目中的数据类型有: 船,潜艇,鱼雷,炸弹,分数 ; 控制类型:状态,状态切换,场景;显示类型:view;

状态图:

660a095857a5d12a50baa5398c84452f.png

51c8e1c26dbd2de176613c49b969f4a4.png

类功能设计 根据最小影响原则,场景中的 船,潜艇等对自己的移动,爆炸提供支持,不放在场景中。本例中所有移动, 发射导弹操作都是通过 stat转换实现;

看一个响应按钮事件的状态转换,在 操作item 常用到;

LevelState *levelState = new LevelState(scene, this, machine);
//This state is when the player is actually playing but the game is not paused
QState *playingState = new QState(levelState);
PauseState *pauseState = new PauseState(scene, levelState);
levelState->setInitialState(playingState);
QKeyEventTransition *pressPplay = new QKeyEventTransition(scene->views().at(0), QEvent::KeyPress, Qt::Key_P);
pressPplay->setTargetState(pauseState);
playingState->addTransition(pressPplay); 

小霸王基本都能实现了。

steam的2d横版游戏 就像 王国 ,拍卖人生 这种也能实现;

下一讲:qt5.15 步步走-15. 模型/视图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值