Creating The Tiles From C++ - SixtyFPS Memory Game Tutorial (C++)

# Creating The Tiles From C++

What we'll do is take the list of tiles declared in the .60 language, duplicate it, and shuffle it. We'll do so by accessing the `memory_tiles` property through the Rust code. For each top-level property, a getter and a setter function is generated - in our case `get_memory_tiles` and `set_memory_tiles`. Since `memory_tiles` is an array in the `.60` language, it is represented as a `std::shared_ptr<sixtyfps::Model>`. We can't modify the model generated by the .60, but we can extract the tiles from it, and put it in a `sixtyfps::VectorModel` which inherits from `Model`. `VectorModel` allows us to make modifications and we can use it to replace the static generated model.

We modify the main function like so:

    // ...

    #include <random> // Added

    int main()
    {
        auto main_window = MainWindow::create();
        auto old_tiles = main_window->get_memory_tiles();
        std::vector<TileData> new_tiles;
        new_tiles.reserve(old_tiles->row_count() * 2);
        for (int i = 0; i < old_tiles->row_count(); ++i) {
            new_tiles.push_back(old_tiles->row_data(i));
            new_tiles.push_back(old_tiles->row_data(i));
        }
        std::default_random_engine rng {};
        std::shuffle(new_tiles.begin(), new_tiles.end(), rng);
        auto tiles_model = std::make_shared<sixtyfps::VectorModel<TileData>>(new_tiles);
        main_window->set_memory_tiles(tiles_model);

        main_window->run();
    }

Running this gives us a window on the screen that now shows a 4 by 4 grid of rectangles, which can show or obscure the icons when clicking. There's only one last aspect missing now, the rules for the game.