You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ SFML迭代渲染矩形问题:如何正确生成9×9迷宫图形

解决SFML数组内矩形形状位置不生效的问题

嘿,我看你在做9×9迷宫的时候遇到了个头疼的问题:单个矩形能正常改颜色和位置,但数组里的大部分矩形都不显示,只有右上角一个蓝色的。咱们来看看问题出在哪,怎么解决。

问题根源

你代码里的数组初始化有个容易踩的坑:

sf::RectangleShape tiles[81] = {sf::RectangleShape(sf::Vector2f(20, 20))};

在C++里,这种初始化方式只会给数组的第一个元素创建一个20×20的矩形,剩下的80个元素都是用默认构造函数生成的——默认矩形的大小是(0, 0),哪怕你设置了位置和颜色,它们也因为没有尺寸而无法被绘制出来,自然看不见。

修复方案

我们需要确保数组里的每一个矩形都被设置了正确的大小。最简单的方式是在循环里先给每个矩形设置尺寸,再处理颜色和位置。

修改后的完整代码

#include <SFML/Graphics.hpp>
#include <iostream>

int main() {
    sf::RenderWindow window(sf::VideoMode(1920, 1080), "Baphomet");
    
    // 先声明数组,不做部分初始化
    sf::RectangleShape tiles[81];
    char maze[81] = {
        0,0,0,0,0,0,0,0,0,
        0,1,0,1,0,1,1,1,0,
        0,1,0,1,0,1,0,1,0,
        0,1,1,1,0,1,0,1,0,
        0,0,0,1,0,1,0,1,0,
        0,1,1,1,0,1,1,1,0,
        0,0,0,1,0,0,0,1,0,
        0,0,0,0,1,1,1,1,1,
        1,0,0,0,0,0,0,0,0
    };

    int x;
    int y;
    for (int i = 0; i < 81; i++) {
        // 先给每个矩形设置20x20的大小
        tiles[i].setSize(sf::Vector2f(20, 20));
        
        // 处理颜色逻辑
        if (maze[i] == 0) {
            tiles[i].setFillColor(sf::Color::Blue);
        } else if (maze[i] == 1) {
            tiles[i].setFillColor(sf::Color::Red);
        }
        
        // 计算并设置位置
        x = (i % 9) * 20;
        y = (i / 9) * 20;
        std::cout << x << " " << y << std::endl;
        tiles[i].setPosition((float)x, (float)y);
    }

    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        for (int i = 0; i < 81; i++) {
            window.draw(tiles[i]);
        }
        window.display();
    }

    return 0;
}

关键修改点

  • 把数组声明改成sf::RectangleShape tiles[81];,不再做部分初始化
  • 在循环里增加tiles[i].setSize(sf::Vector2f(20, 20));,确保每个矩形都有可见的尺寸
  • 原有的颜色和位置计算逻辑是正确的,只要矩形有尺寸就能正常显示

这样修改后,每个矩形都会按照你设定的位置和颜色绘制出来,9×9的迷宫就能正常显示啦!

内容的提问来源于stack exchange,提问作者Constantine Freak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:47:09