#ifndef LUCKY_STRATEGY_H #define LUCKY_STRATEGY_H #include "MelodyStrategy.h" #include class LuckyStrategy : public MelodyStrategy { public: void generate(Step* sequence, int numSteps, int* scaleNotes, int numScaleNotes, int seed) override { randomSeed(seed); if (numScaleNotes == 0) return; for (int i = 0; i < numSteps; i++) { int octave = random(3) + 3; // 3, 4, 5 (Base is 4) sequence[i].note = (random(100) < 50) ? (12 * octave + scaleNotes[random(numScaleNotes)]) : -1; sequence[i].accent = (random(100) < 30); sequence[i].tie = (random(100) < 20); } randomSeed(micros()); } void mutate(Step* sequence, int numSteps, int* scaleNotes, int numScaleNotes) override { // Mutate 1 or 2 steps int count = random(1, 3); for (int i = 0; i < count; i++) { int s = random(numSteps); if (sequence[s].note != -1) { int r = random(100); if (r < 30) sequence[s].accent = !sequence[s].accent; else if (r < 60) sequence[s].tie = !sequence[s].tie; else if (r < 80) sequence[s].note += 12; // Up octave else sequence[s].note -= 12; // Down octave } } } const char* getName() override { return "Lucky"; } }; #endif