Total Recall - Arduino Simon Says på steroider! (4 / 6 steg)

Steg 4: Kodning av 2 spelare.

För att koden 2 spelaren spelet bestämde jag mig för det skulle vara bäst att bygga den som en egen skiss och sedan integrera den i den huvudsakliga skissen. Detta får mig att lättare felsöka problem jag kom över. Jag hade studsar runt idéer för koden i huvudet under de senaste dagarna. Så visste jag vad det allmänna flödet av koden skulle vara. Men det tog 4 timmar i sträck av kodning för att äntligen få det att fungera. Det förvånar mig alltid hur de minsta misstag kan orsaka så många problem. Även placeringen av en enda rad i början av en funktion när det skulle fungera kan bättre i slutet orsaka sådana problem.

Jag bestämde mig att gå vidare och inkludera kod från de 2 fristående spelare. Koden är inte lika raffinerad och kan vara lite buggig. Men det var bara menat som en mall för att få alternativet 2 spelare upp och kör. Det var meningslöst att förfina det när det kommer att kopieras över till huvudkoden ändå. Jag började med Simon Says game från min andra Instructable och byggde 2 spelare spelet därifrån efter att ta bort onödiga kod som de flesta av koden och följetong samtal ljud sida.

#include < Tone.h > //call till tonen bibliotek
#include < LiquidCrystal.h > //call LiquidCrustal bibliotek

Tone speakerpin; gör att talaren

LiquidCrystal lcd (13, 12, 16, 17, 18, 19); stift för LCD-skärm

booleska knappen [] = {2, 3, 4, 5}; Fyra knappen input stiften
booleska ledpin [] = {8, 9, 10, 11}; LED stift

int vända = 0;

int buttonstate = 0; knappen stat checker
int randomArray [100]. Avsiktligt länge att lagra upp till 100 ingångar (tveksamt någon vilja få detta långt)
int inputArray [100]. används för att kontrollera knapptryckningar mot matrisen
int spelare = 1;
int framsteg = 0;

void setup()
{
LCD.BEGIN (16, 2);
speakerpin.BEGIN(6); högtalaren är på stift 13

för (int x = 0; x < 4; x ++) / / LED stift är utgångar
{
pinMode (ledpin [x], produktionen);
}

för (int x = 0; x < 4; x ++)
{
pinMode (knappen [x], indata); knappen stift är ingångar
digitalWrite (knappen [x], hög); Aktivera inre pullup; knapparna starta i hög position; logiken omvänd
}
LCD.Clear();
}

void loop()
{
LCD.Clear();
om (spelare == 1)
{
lcd.setCursor(0,0);
LCD.Print ("Player 1!");
}
om (spelare == 2)
{
lcd.setCursor(0,0);
LCD.Print ("spelare 2!");
}
lcd.setCursor(0,1);
LCD.Print ("Välj en knapp");
Delay(150);
för (int v = 0; v < 4; v ++)
{

ButtonState = digitalRead(button[v]);

om (buttonstate == låg & & knappen [v] == 2)
{//Checking för knappen push
digitalWrite (ledpin [0], hög);
speakerpin.Play (NOTE_G3, 100);
Delay(500);
digitalWrite (ledpin [0], låg);
randomArray [framsteg] = 1;

om (spelare == 1)
{
Player ++;
framsteg ++;
Delay(500);
output();
hemkomst.
}
om (spelare == 2)
{
spelare--;
framsteg ++;
Delay(500);
output();
hemkomst.
}

}
om (buttonstate == låg & & knappen [v] == 3)
{
digitalWrite (ledpin [1], hög);
speakerpin.Play (NOTE_A3, 100);
Delay(200);
digitalWrite (ledpin [1], låg);
randomArray [framsteg] = 2;

om (spelare == 1)
{
Player ++;
framsteg ++;
Delay(500);
output();
hemkomst.
}
om (spelare == 2)
{
spelare--;
framsteg ++;
Delay(500);
output();
hemkomst.
}

}

om (buttonstate == låg & & knappen [v] == 4)
{
digitalWrite (ledpin [2], hög);
speakerpin.Play (NOTE_B3, 100);
Delay(200);
digitalWrite (ledpin [2], låg);
randomArray [framsteg] = 3;

om (spelare == 1)
{
Player ++;
framsteg ++;
Delay(500);
output();
hemkomst.
}
om (spelare == 2)
{
spelare--;
framsteg ++;
Delay(500);
output();
hemkomst.
}

}

om (buttonstate == låg & & knappen [v] == 5)
{
digitalWrite (ledpin [3], hög);
speakerpin.Play (NOTE_C4, 100);
Delay(200);
digitalWrite (ledpin [3], låg);
randomArray [framsteg] = 4;

om (spelare == 1)
{
Player ++;
framsteg ++;
Delay(500);
output();
hemkomst.
}


om (spelare == 2)
{
spelare--;
framsteg ++;
Delay(500);
output();
hemkomst.
}

}

}
}

void output()
{
LCD.Clear();
om (spelare == 1)
{
lcd.setCursor(0,0);
LCD.Print ("Player 1");
}
om (spelare == 2)
{
lcd.setCursor(0,0);
LCD.Print ("spelare 2");
}
lcd.setCursor(0,1);
LCD.Print ("se ljuset");
Delay(1000);
för (int x = 0; x < = slå; x ++)
{

för (int y = 0; y < 4; y ++)
{

om (randomArray [x] == 1 & & ledpin [y] == 8)
{//if deklarationer Visa lagrade värden i matrisen
digitalWrite (ledpin [y], hög);
speakerpin.Play (NOTE_G3, 100);
Delay(400);
digitalWrite (ledpin [y], låg);
Delay(100);
}
om (randomArray [x] == 2 & & ledpin [y] == 9)
{
digitalWrite (ledpin [y], hög);
speakerpin.Play (NOTE_A3, 100);
Delay(400);
digitalWrite (ledpin [y], låg);
Delay(100);
}

om (randomArray [x] == 3 & & ledpin [y] == 10)
{
digitalWrite (ledpin [y], hög);
speakerpin.Play (NOTE_B3, 100);
Delay(400);
digitalWrite (ledpin [y], låg);
Delay(100);
}

om (randomArray [x] == 4 & & ledpin [y] == 11)
{
digitalWrite (ledpin [y], hög);
speakerpin.Play (NOTE_C4, 100);
Delay(400);
digitalWrite (ledpin [y], låg);
Delay(100);
}
}
}
INPUT2();
}

void input2() {//Function för att tillåta användarindata och kontrollera ingång mot genererade matrisen
LCD.Clear();
om (spelare == 1)
{
lcd.setCursor(0,0);
LCD.Print ("Player 1");
}
om (spelare == 2)
{
lcd.setCursor(0,0);
LCD.Print ("spelare 2");
}
lcd.setCursor(0,1);
LCD.Print ("Repeat sequence");
Delay(150);

för (int x = 0; x < = slå;)
{//Statement kontrolleras av vända greve

för (int y = 0; y < 4; y ++)
{

ButtonState = digitalRead(button[y]);

om (buttonstate == låg & & knappen [y] == 2)
{//Checking för knappen push
digitalWrite (ledpin [0], hög);
speakerpin.Play (NOTE_G3, 100);
Delay(200);
digitalWrite (ledpin [0], låg);
inputArray [x] = 1;
Delay(250);

om (inputArray [x]! = randomArray[x]) {//Checks värde input av användare och kontrollerar att den mot
Fail(); värdet i samma plats på den genererade arrayen
} //The misslyckas funktion kallas om det inte matchar
x ++;

}
om (buttonstate == låg & & knappen [y] == 3)
{
digitalWrite (ledpin [1], hög);
speakerpin.Play (NOTE_A3, 100);
Delay(200);
digitalWrite (ledpin [1], låg);
inputArray [x] = 2;
Delay(250);

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

}

om (buttonstate == låg & & knappen [y] == 4)
{
digitalWrite (ledpin [2], hög);
speakerpin.Play (NOTE_B3, 100);
Delay(200);
digitalWrite (ledpin [2], låg);
inputArray [x] = 3;
Delay(250);

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

}

om (buttonstate == låg & & knappen [y] == 5)
{
digitalWrite (ledpin [3], hög);
speakerpin.Play (NOTE_C4, 100);
Delay(200);
digitalWrite (ledpin [3], låg);
inputArray [x] = 4;
Delay(250);

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

}
}
}
Delay(500);
tur ++; Ökar antalet tur, även den senaste åtgärden innan du startar funktionen output om igen
loop();
}

void fail() {//Function används om spelaren inte matchar sekvensen
LCD.Clear();
om (spel == 2 & & spelare == 1)
{
lcd.setCursor(0,0);
LCD.Print ("Player 1!");
}
om (spel == 2 & & spelare == 2)
{
lcd.setCursor(0,0);
LCD.Print ("spelare 2!");
}
lcd.setCursor(0,1);
LCD.Print ("du lös!");
Delay(150);

för (int y = 0; y < = 2; y ++)
{//Flashes ljus för misslyckande

digitalWrite (ledpin [0], hög);
digitalWrite (ledpin [1], hög);
digitalWrite (ledpin [2], hög);
digitalWrite (ledpin [3], hög);
speakerpin.Play (NOTE_G3, 300);
Delay(200);
digitalWrite (ledpin [0], låg);
digitalWrite (ledpin [1], låg);
digitalWrite (ledpin [2], låg);
digitalWrite (ledpin [3], låg);
speakerpin.Play (NOTE_C3, 300);
Delay(200);
}
Delay(500);
för (int x = 0; x < 100; x ++) //clears array
{
randomArray [x] = 0;
}
framsteg = 0;
Player = 1;
sväng = -1; Återställer stänga värde så att spelet startar över utan behov av en återställningsknapp
}

Om du vill prova denna kod vara medvetna om det kan finnas några fel. Toner för knappar/lysdioder finns där men alla andra musik och toner finns inte.

Se Steg
Relaterade Ämnen

Arduino Simon Says

i detta Instructable jag ska visa dig hur man sätter ihop en mycket enkel Simon säger spelet med en Arduino mikro-Controller. Jag först startade detta projekt 2010 och har inte plockat upp igen sedan. Mycket har förändrats i världen av Arduino ända s...

Arduino Simon Say

detta är min Arduino Simon Say versionDu behöver:6 x 220 ohm motstånd3 X leds, en för varje färg, grön, röd, gul3 X Push knappar1 X ArduinoNågra kablarSteg 1: Kretsar Diagram 5 volt passerar via knappen till lamporna och till stift 5,6,7 arduino digi...

Arduino Simon Says spel

Detta är ett roligt projekt som jag gjorde med mina barn över julledigheten.För att hysa detta spel beslutade jag att använda en gammal iPhone 5c låda. Jag hade det bara låg runt och tyckte om rätt storlek.Lista över komponenter:(Obs: alla länkar är...

Skapa din egen Simon Says game med DIY Electro degen och Arduino!

Komma igångMålet med detta Instructable är att förvandla din electro degen till en kapacitiv touch-knapp med Arduino med hjälp av CapSense arduino biblioteket och sedan använde för att skapa en Simon Says spel. Vi kommer att använda en kapacitiv star...

Simon Says spel med Evive (Arduino Powered inbäddade produkt)

Hur kul blir det först att göra en DIY spel och sedan spela upp den woth dina vänner! Så här gör vi ett spel. Dess kallas Simon Says. Vi har gjort detta spel med evive. Koderna är utvecklade på ett mycket enkelt sätt i Arduino IDE. Målet med spelet ä...

Arduino Simon säger

Som barn har jag alltid älskat hur mycket mina föräldrar hatade Simon Says spelet, med hjälp av en enkel arduino, några lysdioder, resistorer, tryckknappar och en piezo vi kan göra det själv! Jag testade och utformat denna krets med 123D kretsar, byg...

Simon Says med lysdioder och ljud

Hej och Välkommen tillbaka till Instructables!Många av oss har alla spelat Simon Says där oundvikligen befinner du dig hopping runt på ett ben medan du gör elefanten ljud och du undrar för sig själv varför det någonsin var en bra idé att säga "Ja, ja...

Simon Says game

Jag har skapat ett elektroniskt minnesspel i stil med "Simon Says" (en ikon av 70-talet). Det bygger på en ARM cortex M0 mikrokontroller. Du hittar en detaljerad konstruktion handbok, kretsscheman och källkoden på min hemsida. Det är också möjli...

Interaktiva Simon Says game

jag minns inte riktigt hur detta spel utvecklats men den främsta drivkraften bakom det är att förbättra kognitiv behandling och uppmärksamhet genom att få spelarna att fokusera på en sekvens av trumman hits och sedan upprepa den sekvensen. Spelare ka...

Den digitala liv - Total Recall genom skanning

förra året jag förlorat allt, åhörarkopior var borta innan de ens fick passerade och min avslutade uppdrag var reinkarnationer av Houdini alltid fly min bindemedel i sista sekund. I år mot att jag är fast besluten att digitalt säkerhetskopiera min sk...

Arduino Powered RGB humör lampa plus Simon

detta är grunden en arduino powered RGB humör lampa plus simon says spel, två i ett.Hur man använder: Enheten börjar med RGB humör lampa standardprogram, när du trycker på någon av de fyra knapparna längst ner, säger Simon spelet startar. När du tryc...

Avancerade Simon säger

Hej alla!Detta instructables visar "Avancerade Simon Says".Det är anledningen till varför jag ställde "Advance" till "Simon Says".Ni alla kanske vet vad Simon Says och lätt att hitta det med arduino projekt.(Faktiskt, jag gjo...

Gör en SNES controller baserade Arduino spel

i detta instructable, jag kommer att visa dig hur till ta en SNES styrenhet, koppla den till en Arduino och göra en enkel Simon Says spel.Detta skulle kunna användas att skapa en mer komplexa spel, eller kanske till och med för att försöka göra en Ar...

Android Bluetooth eldkastare pumpa x4 Simon säger

VARNING! Projektet innehåller extremt brandfarliga brännbara ämnen.Även om jag har tagit extra säkerhetsåtgärder, detta projektrekommenderas inte att prova hemma. Fortsätt på din egen risk.Vill krydda upp din Halloween i år med lite explosiva kul? Va...

Fast & Easy Simon spel

INGA byglar! INGA sladdar! INGEN lödning! INGET bakbord!Tänka utanför boxen.Så du vill visa upp ditt mikro-controller i konsert med vissa tillägg perifera modeller verkligen snabbt, innan vänner eller relativ är på väg...Satt ihop denna snabbt & lätt...

3 x 3 x 3 LED Cube med Arduino Lib

det finns andra Instructables om att bygga LED kuber, här är olika av flera skäl:1. det är byggt med ett lågt antal off-the-shelf komponenter och krokar direkt till Arduino.2. en tydlig, lätt för att reproducera krets diagram är försedd med massor av...

Arduino flöjt Synth

Innan du skapar denna flöjt synth, byggde jag en annan Arduino synthesizer med källkoden från en Instructable kallas postbox syntet. Jag satte modet inuti en gammal speldosa och wired en MIDI ingång för att kontrollera den. Det lät mycket bra och jag...

Gör din egen 2-spelare Simon säger Game

Detta Instructable förklarar hur man gör en Simon Says spel använder en Altera DE2-115 cyklonen IV FPGA ombord. Detta projekt var gjort för ECE2220 (Digital Logic) vid University of Manitoba.Videon ovan visar arbetande VGA-utgång och hur det förändra...

Simon säger spel med unika "twister" controller

jag gjorde detta projekt för ett sista klass projekt i min crafting tekniker klass här senaste terminen. Målet med detta projekt är att göra en kontroll pad ur twister styrelsen för varje makey makey spel. Jag använde min kontroll ombord för en Simon...