gwy2024 2024-10-02 12:11 采纳率: 33.3%
浏览 10
已结题

俄罗斯方块中无法同时消除多个满行

消除满行的逻辑是:通过函数getfullrow获取已满行的行索引并用临时变量保存到数组fullrowindex返回;消除满行函数removefullrow和消除后下移行列函数movetilesdown收到索引数组fullrowindex后执行相关逻辑。
程序运行后的表现为:同时存在多行可消除时,仅会消除某一行。

请问:该程序逻辑中是哪一个蓝图模块有问题,该如何解决?
蓝图运行报错:

img

模块逻辑见图:
1.消除逻辑

img


2.getfullrow模块运行逻辑:

img


3.removefullrow模块运行逻辑:

img


4.movetiledown模块逻辑:

img

  • 写回答

23条回答 默认 最新

  • 阿里嘎多学长 2024-10-02 12:14
    关注
    获得0.30元问题酬金

    AIGC生成:


    俄罗斯方块中无法同时消除多个满行

    你遇到的问题是俄罗斯方块游戏中无法同时消除多个满行,这可能是由于你的消除满行逻辑中存在问题。

    根据你的描述,消除满行的逻辑是通过函数 getfullrow 获取已满行的行索引,并将其保存到数组 fullrowindex 中,然后调用 removefullrow 函数消除满行,并最后调用 movetilesdown 函数下移行列。

    可能的解决方案是:

    1. getfullrow 函数中,使用一个集合或数组来存储已满行的行索引,而不是单独的变量。这样可以确保可以同时获取多个满行的行索引。
    2. removefullrow 函数中,使用一个循环来消除所有满行,而不是单独消除一个满行。
    3. movetilesdown 函数中,使用一个循环来下移所有行列,而不是单独下移一个行列。

    以下是一个示例代码:

    void removefullrow(vector<vector<Tile>>& tiles) {
        vector<int> fullrowindex = getfullrow(tiles);
        for (int i : fullrowindex) {
            tiles.erase(tiles.begin() + i);
        }
        movetilesdown(tiles);
    }
    
    void movetilesdown(vector<vector<Tile>>& tiles) {
        for (int i = 0; i < tiles.size(); i++) {
            if (tiles[i].empty()) {
                tiles.erase(tiles.begin() + i);
                i--;
            }
        }
    }
    

    希望这个解决方案能够帮助你解决问题。


    评论

报告相同问题?

问题事件

  • 系统已结题 10月10日
  • 修改了问题 10月2日
  • 赞助了问题酬金15元 10月2日
  • 创建了问题 10月2日