思考的救赎(二):三消游戏功能完善

本文介绍了如何实现三消游戏中重力降落、自动消除和随机补充的功能。通过详细讲解每个步骤的逻辑和代码实现,阐述了从初始化到消除、重力降落、自动消除和随机补充的完整过程,展示了编程、创造和思考的乐趣。
摘要由CSDN通过智能技术生成

一、引言

昨天我已经在上一篇博客里实现了三消游戏的初始化和消除功能,然而并没有实现一般三消游戏都有的重力降落、自动消除、随机补充的功能。这篇博客就是研究如何实现这些功能的。

让我们总结下我们将要实现的三消游戏的功能:

1. 初始化

2. 消除

3. 重力降落

4. 自动消除(重力降落后可能引起的消除操作)

5. 随机补充(补充消除格子)

6. 额外功能:重新开始、计算分数

在上一篇博客我们已经实现了第 1 步和第 2 步,现在我们开始接下来功能的实现吧。

ps:
想要了解上一篇博客内容的同学可以点击这里:
思考的救赎(一):三消游戏实现探索

想要获取本系列博客代码的同学可以点击这里:
wangying2016/ThreeClearGame

哈哈哈,先来看下我们的最终效果展示吧:

demo.gif

二、开始前的一点架构

我们要实现如上 Gif 图的效果,我们就要知道整个游戏的流程是什么样子的:

三消游戏流程图

这里我特意花了一个流程图(T_T 虽然有点不雅观),但是已经可以非常详细的说明我们一次消除过程中,到底程序做了什么。

也就是说,我们在消除两个格子之后,重力降落、自动消除和随机补充这三个行为是同步进行的(也就是一个结束了下一个才能开始的)。

并且由于自动消除的行为发生,我们会不停的随机补充新的格子,然后又可能会发生自动消除行为,最后又会触发我们的随机补充行为…

直到我们的当前网格里,已经没有三消可能了,才会停止下来。

这个过程的模拟,是由 SOUI 的定时器实现的。

1. 当我们成功消除格子之后,我们设置消除格子为删除皮肤,然后刷新界面。

// 刷新网格
void CMainDlg::RefreshNet(std::vector<std::vector<Grid>> vecNet)
{
    // 删除计时器
    KillTimer(TIMER_LAND);
    // 刷新网格
    SOUI::STileView* pTileView = FindChildByName2<SOUI::STileView>(L"tv_net");
    assert(pTileView);
    CNetAdapter* pAdapter = static_cast<CNetAdapter*>(pTileView->GetAdapter());
    if (pAdapter != nullptr) {
        pAdapter->UpdateNet(vecNet);
        pAdapter->notifyDataSetChanged();
    }   
    // 设置分数
    SetScore()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值