summaryrefslogtreecommitdiff
path: root/Homework/cs3460/gameoflife/PatternRandom.cpp
blob: 924fb2cd228e7eeda193c876f31e580e9e1266a3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "PatternRandom.hpp"

const float DISTRIBUTION_DEV = 2.0;

PatternRandom::PatternRandom(std::uint8_t cols, std::uint8_t rows, float density) :
    PatternSet(cols, rows),
    m_distributionX(cols / 2.0, cols / DISTRIBUTION_DEV),
    m_distributionY(rows / 2.0, rows / DISTRIBUTION_DEV)
{
    std::uint32_t numCellsApprox = static_cast<std::uint32_t>(density * cols * rows);

    for (std::uint32_t i = 0; i < numCellsApprox; ++i)
    {
        std::uint8_t randX = std::clamp(static_cast<std::uint8_t>(m_distributionX(m_generator)), static_cast<std::uint8_t>(0), cols);
        std::uint8_t randY = std::clamp(static_cast<std::uint8_t>(m_distributionY(m_generator)), static_cast<std::uint8_t>(0), rows);
        m_aliveCells.insert(std::pair<std::uint8_t, std::uint8_t>(randX, randY));
    }
}