 # SIMON SAYS HELP

Hi i’m trying to make a simon says game.
I start out at level 1 starting with a sequence of 4, but the sequence keeps on repeating to not let the player have control
How can I fix this and how can I have more levels showing both on the display and on the LEDs?

``````#include <MeggyJrSimple.h>    // Required code, line 1 of 2.

struct Point // our name for the class
{
int x; //x coordinates of this point
int y; // y-coordinates of this point
};
//Point b1 = {0,4}; // Blue
//Point b2 = {0,3};
//Point b3 = {1,4};
//Point b4 = {1,3};
//Point b5 = {2,3};
//Point b6 = {2,4};
//Point g1 = {3,7}; //Green
//Point g2 = {3,6};
//Point g3 = {3,5};
//Point g4 = {4,7};
//Point g5 = {4,6};
//Point g6 = {4,5};
//Point r1 = {7,4}; //Red
//Point r2 = {7,3};
//Point r3 = {6,4};
//Point r4 = {6,3};
//Point r5 = {5,4};
//Point r6 = {5,3};
//Point y1 = {3,2}; //yellow
//Point y2 = {4,2};
//Point y3 = {4,1};
//Point y4 = {4,0};
//Point y5 = {3,1};
//Point y6 = {3,0};
//Point blueArray = {b1,b2,b3,b4,b5,b6};
//Point greenArray = {g1,g2,g3,g4,g5,g6};
//Point redArray = {r1,r2,r3,r4,r5,r6};
//Point yellowArray = {y1,y2,y3,y4,y5,y6}; //points that buttons starts as
//two arrays for combination sequence
int mode = 0;
int computerArray; //total levels computer gives player to play
int playerArray; //total levels player needs to complete
int playerMarker=0; //player
int computerMarker=4; //computer
int levels=1; //variable for levels
boolean correctSequence = true; //keeps track if sequence is completed

void setup()                   // run once, when the sketch starts
{
MeggyJrSimpleSetup(); // Required code, line 2 of 2.
Tone_Start(ToneC3, 100);  //Background Sound Start
delay(100);
Tone_Start(ToneCs3, 100);
delay(100);
Tone_Start(ToneD3, 100);
delay(100);
Tone_Start(ToneDs3, 100);
delay(100);
mode = 0;
fillArray();
}

void loop()                     // run over and over again
{
if (mode == 0)
AI();
else if (mode == -1)
Player();
else
lose();

if(correctSequence == true)
win();

if (levels == 8)
{
SetAuxLEDs(255);
}
if (levels == 7)
{
SetAuxLEDs(127);
}
if (levels == 6)
{
SetAuxLEDs(63);
}
if (levels == 5)
{
SetAuxLEDs(31);
}
if (levels == 4)
{
SetAuxLEDs(15);
}
if (levels == 3)
{
SetAuxLEDs(7);
}
if (levels == 2)
{
SetAuxLEDs(3);
}
if (levels == 1)
{
SetAuxLEDs(1);
}
if (levels == 0)
{
SetAuxLEDs(0);
}
}

void AI()
{
for (int i = 0; i < computerMarker; i++)
{
if (computerArray[i] == 1)
DrawRed();
else if (computerArray[i] == 2)
DrawGreen();
else if (computerArray[i] == 3)
DrawYellow();
else if (computerArray[i] == 4)
DrawBlue();

DisplaySlate(); //displays the entire slate for current level

delay(150); //is delayed 200 miliseconds

ClearSlate(); //clears the entire slate for next level

DisplaySlate();

delay(150);
}

DisplaySlate();
mode = 1;
}

void Player()
{
//Check to see which buttons are down that weren't before.
while(playerMarker < computerMarker)
{
CheckButtonsDown();
if (Button_Up)                     //focuses on up button clicked
{
playerArray[playerMarker] = 2;  // add appropriate number to platyer arraay'
playerMarker++;                  // add one to marker
DrawGreen();                      //when marker exceeds 10, then check to see if it's correct.
DisplaySlate ();
Tone_Start(ToneA3,100);
delay (150);
ClearSlate();
DisplaySlate();
}

if (Button_Down)
{
playerArray[playerMarker] = 3; //focuses on down button clicked
playerMarker++;
DrawYellow();
DisplaySlate ();
Tone_Start(ToneB3,100);
delay (150);
ClearSlate();
DisplaySlate();
}

if (Button_Right)
{
playerArray[playerMarker] = 1; //focuses on right button clicked
playerMarker++;
DrawRed();
DisplaySlate ();
Tone_Start(ToneD3,100);
delay (150);
ClearSlate();
DisplaySlate();
}

if (Button_Left)
{
playerArray[playerMarker] = 4; //focuss on left button clicked
playerMarker++;
DrawBlue();
DisplaySlate ();
Tone_Start(ToneC3,100);
delay (150);
ClearSlate();
DisplaySlate();
}

}

}

void colors()
{
for (int i = 0; i<64; i++)
{
DrawBlue();
DrawGreen();
DrawRed();
DrawYellow();
}
}

void DrawGreen()
{
DrawPx(3,6,Green);  //green shows
DrawPx(3,7,Green);
DrawPx(3,5,Green);
DrawPx(4,7,Green);
DrawPx(4,6,Green);
DrawPx(4,5,Green);
}

void DrawRed()
{
DrawPx(7,4,Red); //Red shows
DrawPx(7,3,Red);
DrawPx(6,4,Red);
DrawPx(6,3,Red);
DrawPx(5,4,Red);
DrawPx(5,3,Red);
}

void DrawYellow()
{
DrawPx(3,2,Yellow); //yellow shows
DrawPx(4,2,Yellow);
DrawPx(4,1,Yellow);
DrawPx(4,0,Yellow);
DrawPx(3,1,Yellow);
DrawPx(3,0,Yellow);
}

void DrawBlue()
{
DrawPx(0,4,Blue); // Blue shows
DrawPx(0,3,Blue);
DrawPx(1,4,Blue);
DrawPx(1,3,Blue);
DrawPx(2,3,Blue);
DrawPx(2,4,Blue);
}

void fillArray()
{
for (int i = 0; i < 10; i++)
{
computerArray[i]=(int)random(4)+1;
correctSequence = true;
computerMarker++;
playerMarker++;
}
}

void win()
{
Tone_Start(ToneD3, 100);
mode = 0;
}

void lose()  //Function used if the player fails to match the sequence
{
Tone_Start(ToneC3, 100);
mode = -1; //Resets turn value so the game starts over without need for a reset button
}
``````

Moderator edit:
`</mark> <mark>[code]</mark> <mark>`

`</mark> <mark>[/code]</mark> <mark>`

In order for your code to display correctly you need to enclose it in [ code ] [ /code ] tags. I suggest you edit your post and add them.

Hi trollking,

In AI(), you set the mode to 1, but the if statement above looks for a -1 value. Could that be it?

You should also add some meaningful comments. It’s difficult for us to understand what you are doing otherwise.

Some things that are confusing include:

What is mode?
How does a player change the level?
What are the Aux LEDs?

Pat.

I implemented Simon some time ago, you might have a look at how I implemented levels. Note it was build with a specific shield as UI so you need to extract the core game 