Totale Recall - Arduino Simon Says op steroïden! (4 / 6 stap)

Stap 4: Codering het spel voor 2 spelers.

Om de code van de 2-speler spel heb ik besloten dat het beste zou zijn om het te bouwen als eigen schets dan integreren met de belangrijkste schets. Dit liet mij gemakkelijker oplossen van eventuele problemen die ik tegenkwam. Ik had al stuiteren rond ideeën voor de code in mijn hoofd voor de afgelopen paar dagen. Dus wist ik wat de algemene stroom van de code zou zijn. Maar het duurde 4 rechte uren van codering eindelijk ertoe brengen om te werken. Het verbaast me altijd hoe de kleinste fouten kan zo veel probleem. Zelfs het omdat van een enkele regel aan het begin van een functie als het zou werken kan beter aan het eind dergelijke problemen veroorzaken.

Ik besloot te gaan en de code van het spel van de standalone speler 2. De code is niet zo verfijnd en wellicht een beetje buggy. Maar het was alleen bedoeld als een sjabloon voor de speler 2 optie krijgen up and running. Geen zin in het verfijnen van het toen het ging naar de belangrijkste code hoe dan ook worden gekopieerd had. Ik begon met het spel van Simon Says van mijn andere Instructable en de 2 spelerspel opgebouwd vanaf daar na het verwijderen van zoals de meeste van de audio kant van de code en de seriële oproepen code overbodige.

#include < Tone.h > //call aan Toon bibliotheek
#include < LiquidCrystal.h > //call LiquidCrustal bibliotheek

Toon speakerpin; Laat de spreker

LiquidCrystal lcd (13, 12, 16, 17, 18 en 19); pinnen voor LCD display

Booleaanse knop [] = {2, 3, 4, 5}; De vier knop input pinnen
Booleaanse ledpin [] {8, 9, 10, 11} =;  LED pinnen

int draaien = 0;

int buttonstate = 0;  knop staat checker
int randomArray [100]; Opzettelijk lang voor het opslaan van maximaal 100 ingangen (twijfelachtig iedereen krijgt dit ver)
int inputArray [100];  gebruikt voor de controle knop duwt tegen de matrix
int speler = 1;
int vorderingen = 0;

VOID Setup
{
LCD.begin (16, 2);
speakerpin.begin(6); spreker is op pin 13

voor (int x = 0; x < 4; x ++) / / LED pinnen zijn uitgangen
{
pinMode (ledpin [x], OUTPUT);
}

voor (int x = 0; x < 4; x ++)
{
pinMode (knop [x], INPUT);  knop pinnen zijn ingangen
digitalWrite (knop [x] hoge);  inschakelen van interne pullup; toetsen beginnen in hoge positie; logica omgedraaid
}
LCD.Clear();
}

void loop
{
LCD.Clear();
Als (speler == 1)
{
lcd.setCursor(0,0);
LCD.Print ("speler 1!");
}
Als (speler == 2)
{
lcd.setCursor(0,0);
LCD.Print ("speler 2!");


}
lcd.setCursor(0,1);
LCD.Print ("Kies een knop");
delay(150);
voor (int v = 0; v < 4; v ++)
{

buttonstate = digitalRead(button[v]);



Als (buttonstate == LOW & & knop [v] == 2)
{//Checking voor knop duwen
digitalWrite (ledpin [0], hoge);
speakerpin.Play (NOTE_G3, 100);
delay(500);
digitalWrite (ledpin [0], laag);
randomArray [vooruitgang] = 1;

Als (speler == 1)
{
speler ++;
vooruitgang ++;
delay(500);
output();
terugkeer;
}
Als (speler == 2)
{
speler--;
vooruitgang ++;
delay(500);
output();
terugkeer;
}

}
Als (buttonstate == LOW & & knop [v] == 3)
{
digitalWrite (ledpin [1], hoge);
speakerpin.Play (NOTE_A3, 100);
delay(200);
digitalWrite (ledpin [1], laag);
randomArray [vooruitgang] = 2;

Als (speler == 1)
{
speler ++;
vooruitgang ++;
delay(500);
output();
terugkeer;
}
Als (speler == 2)
{
speler--;
vooruitgang ++;
delay(500);
output();
terugkeer;
}

}

Als (buttonstate == LOW & & knop [v] == 4)
{
digitalWrite (ledpin [2], hoge);
speakerpin.Play (NOTE_B3, 100);
delay(200);
digitalWrite (ledpin [2], laag);
randomArray [vooruitgang] = 3;

Als (speler == 1)
{
speler ++;
vooruitgang ++;
delay(500);
output();
terugkeer;
}
Als (speler == 2)
{
speler--;
vooruitgang ++;
delay(500);
output();
terugkeer;
}

}

Als (buttonstate == LOW & & knop [v] == 5)
{
digitalWrite (ledpin [3], hoge);
speakerpin.Play (NOTE_C4, 100);
delay(200);
digitalWrite (ledpin [3], laag);
randomArray [vooruitgang] = 4;

Als (speler == 1)
{
speler ++;
vooruitgang ++;
delay(500);
output();
terugkeer;
}
Als (speler == 2)
{
speler--;
vooruitgang ++;
delay(500);
output();
terugkeer;
}

}

}
}

VOID output()
{
LCD.Clear();
Als (speler == 1)
{
lcd.setCursor(0,0);
LCD.Print ("1 speler");
}
Als (speler == 2)
{
lcd.setCursor(0,0);
LCD.Print ("speler 2");
}
lcd.setCursor(0,1);
LCD.Print ("Watch the lights");
delay(1000);
voor (int x = 0; x < = beurt; x ++)
{


voor (int y = 0; y < 4; y ++)
{

Als (randomArray [x] == 1 & & ledpin [y] == 8)
{//if verklaringen om weer te geven van de opgeslagen waarden in de matrix
digitalWrite (ledpin [y], hoge);
speakerpin.Play (NOTE_G3, 100);
delay(400);
digitalWrite (ledpin [y], laag);
delay(100);
}
Als (randomArray [x] == 2 & & ledpin [y] == 9)
{
digitalWrite (ledpin [y], hoge);
speakerpin.Play (NOTE_A3, 100);
delay(400);
digitalWrite (ledpin [y], laag);
delay(100);
}

Als (randomArray [x] == 3 & & ledpin [y] == 10)
{
digitalWrite (ledpin [y], hoge);
speakerpin.Play (NOTE_B3, 100);
delay(400);
digitalWrite (ledpin [y], laag);
delay(100);
}

Als (randomArray [x] == 4 & & ledpin [y] == 11)
{
digitalWrite (ledpin [y], hoge);
speakerpin.Play (NOTE_C4, 100);
delay(400);
digitalWrite (ledpin [y], laag);
delay(100);
}
}
}
input2();
}

VOID input2() {//Function voor het toestaan van gebruikersinvoer en controleren van de invoer tegen de gegenereerde matrix
LCD.Clear();
Als (speler == 1)
{
lcd.setCursor(0,0);
LCD.Print ("1 speler");
}
Als (speler == 2)
{
lcd.setCursor(0,0);
LCD.Print ("speler 2");
}
lcd.setCursor(0,1);
LCD.Print ("Repeat volgorde");
delay(150);

voor (int x = 0; x < = beurt;)
{//Statement gecontroleerd door zet de graaf

voor (int y = 0; y < 4; y ++)
{

buttonstate = digitalRead(button[y]);

Als (buttonstate == LOW & & knop [y] == 2)
{//Checking voor knop duwen
digitalWrite (ledpin [0], hoge);
speakerpin.Play (NOTE_G3, 100);
delay(200);
digitalWrite (ledpin [0], laag);
inputArray [x] = 1;
delay(250);

Als (inputArray [x]! = randomArray[x]) {//Checks waarde input door gebruiker en controleert het tegen
Fail();                              de waarde op dezelfde plek op de gegenereerde array
} //The fail functie wordt aangeroepen als het niet overeenkomt met
x ++;

}
Als (buttonstate == LOW & & knop [y] == 3)
{
digitalWrite (ledpin [1], hoge);
speakerpin.Play (NOTE_A3, 100);
delay(200);
digitalWrite (ledpin [1], laag);
inputArray [x] = 2;
delay(250);

Als (inputArray [x]! = randomArray[x]) {}
Fail();
}
x ++;

}

Als (buttonstate == LOW & & knop [y] == 4)
{
digitalWrite (ledpin [2], hoge);
speakerpin.Play (NOTE_B3, 100);
delay(200);
digitalWrite (ledpin [2], laag);
inputArray [x] = 3;
delay(250);

Als (inputArray [x]! = randomArray[x]) {}
Fail();
}
x ++;

}

Als (buttonstate == LOW & & knop [y] == 5)
{
digitalWrite (ledpin [3], hoge);
speakerpin.Play (NOTE_C4, 100);
delay(200);
digitalWrite (ledpin [3], laag);
inputArray [x] = 4;
delay(250);

Als (inputArray [x]! = randomArray[x])
{
Fail();
}
x ++;

}
}
}
delay(500);
beurt ++; Verhoogt de beurt tellen, ook de laatste handeling voordat de uitgangsfunctie opnieuw
loop;
}

VOID fail() {//Function gebruikt als de speler niet overeenkomt met de reeks opdrachten
LCD.Clear();
Als (spel == 2 & & speler == 1)
{
lcd.setCursor(0,0);
LCD.Print ("speler 1!");
}
Als (spel == 2 & & speler == 2)
{
lcd.setCursor(0,0);
LCD.Print ("speler 2!");
}
lcd.setCursor(0,1);
LCD.Print ("u losse!');
delay(150);

voor (int y = 0; y < = 2; y ++)
{//Flashes licht voor mislukking

digitalWrite (ledpin [0], hoge);
digitalWrite (ledpin [1], hoge);
digitalWrite (ledpin [2], hoge);
digitalWrite (ledpin [3], hoge);
speakerpin.Play (NOTE_G3, 300);
delay(200);
digitalWrite (ledpin [0], laag);
digitalWrite (ledpin [1], laag);
digitalWrite (ledpin [2], laag);
digitalWrite (ledpin [3], laag);
speakerpin.Play (NOTE_C3, 300);
delay(200);
}
delay(500);
voor (int x = 0; x < 100; x ++) //clears matrix
{
randomArray [x] = 0;
}
vooruitgang = 0;
speler = 1;
Draai = -1; Hiermee herstelt u terecht waarde het spel opnieuw gestart zonder noodzaak van een reset-knop
}

Als u besluit om te proberen deze code zich bewust dat kunnen er enkele bugs. De tonen voor de knoppen/LED's zijn er, maar alle andere muziek en tonen zijn niet.

Gerelateerde Artikelen

Arduino Simon Says

Arduino Simon Says

In dit Instructable ik zal je laten zien hoe samen te stellen een zeer eenvoudige Simon zegt spel met behulp van een Arduino Micro-Controller. Ik begon dit project terug in 2010 en nog niet keurbende op opwaarts weer sinds. Er is veel veranderd in de
Arduino Simon Say

Arduino Simon Say

dit is mijn versie van het Arduino Simon SayHebt u nodig:6 x 220 ohm weerstanden3 X leds, één voor elke kleur, groen, rood, geel3 X druk knoppen1 X ArduinoPaar kabelsStap 1: Circuits Diagram 5 volt geven via de knoppen aan de leds en pinnen 5,6,7 van
Maak je eigen spel van Simon Says met DIY Electro deeg en Arduino!

Maak je eigen spel van Simon Says met DIY Electro deeg en Arduino!

Aan de slagHet doel van dit Instructable is om te zetten uw electro deeg in een Capacitieve touch-knop met Arduino met behulp van de bibliotheek van de arduino CapSense en vervolgens met het maken van een Simon Says spel. We gebruiken een capacitieve
Simon Says met LEDs en geluid

Simon Says met LEDs en geluid

Hallo en welkom terug naar Instructables!Velen van ons hebben allemaal gespeeld Simon Says waar onvermijdelijk vind je jezelf huppelen op een voet terwijl het maken van olifant geluiden en vraag je je af bij jezelf waarom het was ooit een goed idee o
Arduino Simon zegt spel

Arduino Simon zegt spel

Dit is een leuke project dat ik deed met mijn kinderen tijdens de vakantie.Voor dit spel besloten heb ik om het gebruik van een oude doos van de iPhone 5c. Ik had het gewoon rondslingeren en het leek over de juiste maat.Lijst van onderdelen:(Opmerkin
Arduino Simon zegt

Arduino Simon zegt

Als kind heb ik altijd geliefd hoeveel mijn ouders haatte het spel van Simon Says, met behulp van een eenvoudige arduino, sommige LEDs, weerstanden, druktoetsen en een piezo die kunnen we het onszelf! Ik getest en dit circuit met behulp van 123D scha
Oxy-propaan aardappel pistool op steroïden

Oxy-propaan aardappel pistool op steroïden

deze Oxy-propaan aardappel pistool is op steroïden.  Niet alleen krijg je een veel meer explosief mengsel met rechte zuurstof dan lucht, maar vanwege de hydrofoor levering, kunt u forceren dat meer brandstof in de kamer.  En je niet hoeft te stelen u
Ranger Bands (elastiekjes op steroïden)

Ranger Bands (elastiekjes op steroïden)

Ranger Bands (elastiekjes op steroïden)Deze zijn in principe echt sterke brede rubber bands die leuk zijn voor wat ooit u van denken kunt. Ik gebruik de mijne om te helpen bundel sommige 550 koord dat eerder was tangled.Stap 1: Verzamel materialen Ma
Picknick platen op steroïden

Picknick platen op steroïden

ik weet dit is al eerder gedaan (Zie vulkanische picknick platen door hpstoutharrow in buiten: camping). Ik heb hem om krediet te geven voor het geven mij de prikkel om te zetten zijn idee op steroïden (zoals Arnold S.) Ik nodig meer ruimte op mijn b
Maak uw eigen spel voor 2 spelers Simon Says

Maak uw eigen spel voor 2 spelers Simon Says

Dit Instructable wordt uitgelegd hoe u een Simon Says spel met behulp van een Altera DE2-115 Cyclone IV FPGA-board. Dit project werd gedaan voor ECE2220 (digitale logica) bij de Universiteit van Manitoba.De video hierboven toont de werken VGA-uitgang
DIY FRC Kitbot op steroïden

DIY FRC Kitbot op steroïden

de Kitbot op steroïden is ontworpen door Team 1114 te bieden een eenvoudige en goedkope aandrijving voor teams te gebruiken dat is zowel robuust en zeer effectief. Door de jaren heen, hebben veel teams met geweldige successen, met inbegrip van talrij
Simon Says game

Simon Says game

Ik heb een elektronisch geheugenspel gemaakt in de stijl van "Simon Says" (een icoon van de jaren 70). Het gebaseerd op een ARM cortex M0 microcontroller. U vindt een gedetailleerde bouw handleiding, schakelschema's en broncode op mijn website.
Wat zijn de juridische steroïden en hoe kan ik ze kopen?

Wat zijn de juridische steroïden en hoe kan ik ze kopen?

http://www.MuscleLabsUSA.com - juridische steroïden zijn anabole supplementen die zijn veilig, juridische en beschikbaar voor online zonder een arts-examen kopen. De beste juridische steroïden zijn zeer effectief en kunnen meer kosten dan anderen. Ju
Hoe effectief zijn juridische steroïden?

Hoe effectief zijn juridische steroïden?

http://www.Legal-steroid-reviews.comhttp://www.AnabolicSteroidsRx.comJuridische steroïden echt werken? Wat zijn de beste supplementen om spier te bouwen? Velen van ons willen gewoon weten hoe te bouwen spier snel. Juridische anabole supplementen miss