Arduino videospel (de DIY cadeautje) (6 / 11 stap)

Stap 6: Sommige code te schrijven


We schrijven wat code om te branden op ons bord.

CODE

kopiëren en branden van deze code in je board

------------------------------------------------------------------------

#include '''LiquidCrystal.h ''

#define PIN_BUTTON 2
#define PIN_AUTOPLAY 1
#define PIN_READWRITE 10
#define PIN_CONTRAST 12
#define SPRITE_RUN1 1
#define SPRITE_RUN2 2
#define SPRITE_JUMP 3
#define SPRITE_JUMP_UPPER ".' / / gebruiken de '.' karakter voor het hoofd
#define SPRITE_JUMP_LOWER 4
#define SPRITE_TERRAIN_EMPTY "' / / gebruiker de ' ' karakter
#define SPRITE_TERRAIN_SOLID 5
#define SPRITE_TERRAIN_SOLID_RIGHT 6
#define SPRITE_TERRAIN_SOLID_LEFT 7
#define HERO_HORIZONTAL_POSITION 1 / / horizontale positie van held op scherm
#define TERRAIN_WIDTH 16
#define TERRAIN_EMPTY 0
#define TERRAIN_LOWER_BLOCK 1
#define TERRAIN_UPPER_BLOCK 2
#define HERO_POSITION_OFF 0 / / held is onzichtbaar
#define HERO_POSITION_RUN_LOWER_1 1 / / held wordt uitgevoerd op de onderste regel (pose 1)
#define HERO_POSITION_RUN_LOWER_2 2 / / (pose 2)
#define HERO_POSITION_JUMP_1 3 / / een sprong vanaf
#define HERO_POSITION_JUMP_2 4 / / Half-weg omhoog
#define HERO_POSITION_JUMP_3 5 / / Jump is op de bovenste rij
#define HERO_POSITION_JUMP_4 6 / / Jump is op de bovenste rij
#define HERO_POSITION_JUMP_5 7 / / Jump is op de bovenste rij
#define HERO_POSITION_JUMP_6 8 / / Jump is op de bovenste rij
#define HERO_POSITION_JUMP_7 9 / / Half-weg naar beneden
#define HERO_POSITION_JUMP_8 10 / / over aan land
#define HERO_POSITION_RUN_UPPER_1 11 / / held wordt uitgevoerd op de bovenste rij (pose 1)
#define HERO_POSITION_RUN_UPPER_2 12 / / (pose 2)
LiquidCrystal lcd (11, 9, 6, 5, 4, 3);
statische char terrainUpper [TERRAIN_WIDTH + 1];
statische char terrainLower [TERRAIN_WIDTH + 1];
statische bool buttonPushed = false;
ongeldig initializeGraphics() {}
statische byte afbeeldingen [] {} =
Positie 1 worden uitgevoerd
B01100,
B01100,
B00000,
B01110,
B11100,
B01100,
B11010,
B10011,
Uitvoeren van positie 2
B01100,
B01100,
B00000,
B01100,
B01100,
B01100,
B01100,
B01110,
-Stap-springen
B01100,
B01100,
B00000,
B11110,
B01101,
B11111,
B10000,
B00000,
Sprong lager
B11110,
B01101,
B11111,
B10000,
B00000,
B00000,
B00000,
B00000,
Grond
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
Grond rechts
B00011,
B00011,
B00011,
B00011,
B00011,
B00011,
B00011,
B00011,
Grond links
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
};
int i;
Skip teken 0 gebruikt, hierdoor lcd.print() om te worden gebruikt om
snel meerdere tekens tekenen
voor (ik = 0; ik < 7; ++ ik) {}
lcd.createChar (i + 1, & graphics [i * 8]);
}
voor (ik = 0; ik < TERRAIN_WIDTH; ++ ik) {}
terrainUpper [i] = SPRITE_TERRAIN_EMPTY;
terrainLower [i] = SPRITE_TERRAIN_EMPTY;
}
}
Schuif het terrein in stappen van halve-teken naar links
//
VOID advanceTerrain (char * terrein, byte newTerrain) {}
for (int i = 0; ik < TERRAIN_WIDTH; ++ ik) {}
huidige char = terrein [i];
char volgende = (ik == TERRAIN_WIDTH-1)? newTerrain: terrein [i + 1];
schakelaar (huidige) {}
Case SPRITE_TERRAIN_EMPTY:
terrein [i] = (volgende == SPRITE_TERRAIN_SOLID)? SPRITE_TERRAIN_SOLID_RIGHT: SPRITE_TERRAIN_EMPTY;
breken;
Case SPRITE_TERRAIN_SOLID:
terrein [i] = (volgende == SPRITE_TERRAIN_EMPTY)? SPRITE_TERRAIN_SOLID_LEFT: SPRITE_TERRAIN_SOLID;
breken;
Case SPRITE_TERRAIN_SOLID_RIGHT:
terrein [i] = SPRITE_TERRAIN_SOLID;
breken;
Case SPRITE_TERRAIN_SOLID_LEFT:
terrein [i] = SPRITE_TERRAIN_EMPTY;
breken;
}
}
}
BOOL drawHero (char * terrainUpper, bytepositie, char * terrainLower, unsigned int score) {}
BOOL botsen = false;
char upperSave = terrainUpper [HERO_HORIZONTAL_POSITION];
char lowerSave = terrainLower [HERO_HORIZONTAL_POSITION];
byte bovenste, lager;
schakelaar (positie) {}
Case HERO_POSITION_OFF:
bovenste lager = = SPRITE_TERRAIN_EMPTY;
breken;
Case HERO_POSITION_RUN_LOWER_1:
bovenste = SPRITE_TERRAIN_EMPTY;
lager = SPRITE_RUN1;
breken;
Case HERO_POSITION_RUN_LOWER_2:
bovenste = SPRITE_TERRAIN_EMPTY;
lager = SPRITE_RUN2;
breken;
Case HERO_POSITION_JUMP_1:
Case HERO_POSITION_JUMP_8:
bovenste = SPRITE_TERRAIN_EMPTY;
lager = SPRITE_JUMP;
breken;
Case HERO_POSITION_JUMP_2:
Case HERO_POSITION_JUMP_7:
bovenste = SPRITE_JUMP_UPPER;
lager = SPRITE_JUMP_LOWER;
breken;
Case HERO_POSITION_JUMP_3:
Case HERO_POSITION_JUMP_4:
Case HERO_POSITION_JUMP_5:
Case HERO_POSITION_JUMP_6:
bovenste = SPRITE_JUMP;
lager = SPRITE_TERRAIN_EMPTY;
breken;
Case HERO_POSITION_RUN_UPPER_1:
bovenste = SPRITE_RUN1;
lager = SPRITE_TERRAIN_EMPTY;
breken;
Case HERO_POSITION_RUN_UPPER_2:
bovenste = SPRITE_RUN2;
lager = SPRITE_TERRAIN_EMPTY;
breken;
}
Als (bovenste! = "") {}
terrainUpper [HERO_HORIZONTAL_POSITION] = bovenste;
botsen = (upperSave == SPRITE_TERRAIN_EMPTY)? valse: true;
}
Als (Neder! = "") {}
terrainLower [HERO_HORIZONTAL_POSITION] = lager;
botsen | = (lowerSave == SPRITE_TERRAIN_EMPTY)? valse: true;
}

byte cijfers = (score > 9999)? 5: (score > 999)? 4: (score > 99)? 3: (score > 9)? 2: 1;

Tekenen van de scène
terrainUpper [TERRAIN_WIDTH] = '\0';
terrainLower [TERRAIN_WIDTH] = '\0';
char temp = terrainUpper [16-cijfers];
terrainUpper [16-cijfers] = '\0';
lcd.setCursor(0,0);
LCD.Print(terrainUpper);
terrainUpper [16-cijfers] = temp;
lcd.setCursor(0,1);
LCD.Print(terrainLower);

lcd.setCursor (16 - cijfers, 0);
LCD.Print(Score);
terrainUpper [HERO_HORIZONTAL_POSITION] = upperSave;
terrainLower [HERO_HORIZONTAL_POSITION] = lowerSave;
terugkeer botsen;
}
Omgaan met een druk op de knop als een interrupt
ongeldig buttonPush() {}
buttonPushed = true;
}
VOID Setup {}
pinMode (PIN_READWRITE, uitvoer);
digitalWrite (PIN_READWRITE, laag);
pinMode (PIN_CONTRAST, uitvoer);
digitalWrite (PIN_CONTRAST, laag);
pinMode (PIN_BUTTON, INPUT);
digitalWrite (PIN_BUTTON, hoge);
pinMode (PIN_AUTOPLAY, uitvoer);
digitalWrite (PIN_AUTOPLAY, hoge);

Digitale pin 2 kaarten als u wilt onderbreken 0
attachInterrupt (0 / * PIN_BUTTON * /, buttonPush, vallen);

initializeGraphics();

LCD.begin (16, 2);
}
void loop {}
statische byte heroPos = HERO_POSITION_RUN_LOWER_1;
statische byte newTerrainType = TERRAIN_EMPTY;
statische byte newTerrainDuration = 1;
statische bool spelen = false;
statische bool knipperen = false;
statische unsigned int afstand = 0;

Als (! spelen) {}
drawHero((blink)? HERO_POSITION_OFF: heroPos, terrainUpper, terrainLower, afstand >> 3);
Als (knipperen) {}
lcd.setCursor(0,0);
LCD.Print ("druk op Start");
}
delay(250);
Pinken =! knipperen;
Als (buttonPushed) {}
initializeGraphics();
heroPos = HERO_POSITION_RUN_LOWER_1;
spelen = true;
buttonPushed = false;
afstand = 0;
}
terugkeer;
}
Het terrein naar links verschuiven
advanceTerrain (terrainLower, newTerrainType == TERRAIN_LOWER_BLOCK? SPRITE_TERRAIN_SOLID: SPRITE_TERRAIN_EMPTY);
advanceTerrain (terrainUpper, newTerrainType == TERRAIN_UPPER_BLOCK? SPRITE_TERRAIN_SOLID: SPRITE_TERRAIN_EMPTY);

Nieuw terrein te voeren aan de rechterkant maken
Als (--newTerrainDuration == 0) {}
Als (newTerrainType == TERRAIN_EMPTY) {}
newTerrainType = (random(3) == 0)? TERRAIN_UPPER_BLOCK: TERRAIN_LOWER_BLOCK;
newTerrainDuration = 2 + random(10);
} else {}
newTerrainType = TERRAIN_EMPTY;
newTerrainDuration = 10 + random(10);
}
}

Als (buttonPushed) {}
Als (heroPos < = HERO_POSITION_RUN_LOWER_2) heroPos = HERO_POSITION_JUMP_1;
buttonPushed = false;
}
Als (drawHero (heroPos, terrainUpper, terrainLower, afstand >> 3)) {}
spelen = false; De held in botsing met iets. Jammer.
} else {}
Als (heroPos == HERO_POSITION_RUN_LOWER_2 || heroPos == HERO_POSITION_JUMP_8) {}
heroPos = HERO_POSITION_RUN_LOWER_1;
} else if ((heroPos > = HERO_POSITION_JUMP_3 & & heroPos < = HERO_POSITION_JUMP_5) & & terrainLower [HERO_HORIZONTAL_POSITION]! = SPRITE_TERRAIN_EMPTY) {}
heroPos = HERO_POSITION_RUN_UPPER_1;
} else if (heroPos > = HERO_POSITION_RUN_UPPER_1 & & terrainLower [HERO_HORIZONTAL_POSITION] == SPRITE_TERRAIN_EMPTY) {}
heroPos = HERO_POSITION_JUMP_5;
} else if (heroPos == HERO_POSITION_RUN_UPPER_2) {}
heroPos = HERO_POSITION_RUN_UPPER_1;
} else {}
++ heroPos;
}
++ afstand;

digitalWrite (PIN_AUTOPLAY, terrainLower [HERO_HORIZONTAL_POSITION + 2] == SPRITE_TERRAIN_EMPTY? HOOG: LAGE);
}
delay(100);
}

Gerelateerde Artikelen

Goedkope automatische Arduino ambtshalve luchtbevochtiger DIY

Goedkope automatische Arduino ambtshalve luchtbevochtiger DIY

6 maanden update: Ik heb nu gebruikt de geautomatiseerde ambtshalve luchtbevochtiger voor 6 rechte maanden. Het is volkomen te werken aan het ontwerp. Ik houd een oogje op kamertemperatuur vs luchtvochtigheid op het LCD-scherm en verschillende vochti
DIY Arduino of "De DIY-Duino"

DIY Arduino of "De DIY-Duino"

deze hele TUTORIAL IS ook beschikbaar op mijn WEBSITE ophttp://www.theparsley.com/Arduino/DIY/Om te citeren de Arduino-website:"Arduino is een open-source elektronica prototyping platform op basis van flexibele, gemakkelijk te gebruiken hardware en s
Home Automation met behulp van de Arduino Uno

Home Automation met behulp van de Arduino Uno

Ooit wilde maken uw huis geautomatiseerde? Wilde de verlichting, ventilator en andere toestellen van uw smartphone? Of een tutorial over aangesloten apparaten en aan de slag met het gezocht? Android Home Automation zal u tonen hoe te maken van uw hui
Quiz Game Controller met behulp van de "Lichten en geluiden zoemers" en Arduino

Quiz Game Controller met behulp van de "Lichten en geluiden zoemers" en Arduino

gevaar stijl quiz spelen zijn favorieten voor het maken van opwinding en educatieve instructie op hetzelfde moment.  Leraren, zomer camp counselors, en zelfs industrie opvoeders vinden dit soort spel om te helpen bij het genereren van belangstelling
DIY Laptop Controlled Robot v1.0

DIY Laptop Controlled Robot v1.0

Het zou dus goed zijn als zou kundig voor zeggenschap van een robot of uw rc auto met behulp van een laptop net als u controle van een auto in een spel. Nou, kan het mogelijk worden gemaakt met behulp van de veelzijdige arduino UNO. Er zijn duizenden
De beste Arduino

De beste Arduino

deze lui oude Geek heeft een heleboel Arduinos gebruikt. Er zijn een hoop of Arduinos, klonen, DIYs beschikbaar.Welke is de beste?De waarheid is dat er geen beste bestaat. Het hangt af van vele factoren, waaronder:A. uw financiënB. uw technische vaar
DIY spreker - maak uw eigen zout shaker!

DIY spreker - maak uw eigen zout shaker!

U hebt adventured op de Instructables website, wat betekent dat u moet wilt maken van uw eigen zout shaker! Goede keuze! Hoop dat u veel plezier met maken en experimenteren deze instructies te volgen...Wat u zult moeten:Begin Arduino-KitDIY speakerse
De DIY Photobooth met lichtsturing

De DIY Photobooth met lichtsturing

Dit is een tutorial over hoe te bouwen uw eigen Photobooth. Mijn vriend had een bruiloft komen en was behoefte aan een Photobooth. PhotoBooth huren overal van $500 - $1500 dus we besloten om onze eigen & vandaar een ander DIY Photobooth project was g
DIY foto Canvas

DIY foto Canvas

hoe om uw eigen foto canvas (grote DIY cadeautje) ze zijn goedkoop te maken, zien er geweldig op uw muur en ze zijn vrij gemakkelijk te maken.Toegevoegde tip... te slaan zelfs meer $ krijg ik de lege doeken op Hobby Lobby wanneer ze 1/2 uit zodat u a
DIY RC Android Sumobot (Sumo Robot)

DIY RC Android Sumobot (Sumo Robot)

Maak je klaar om rumble, het is tijd om opdringerige! Deze week heb ik een $90 gebouwd, Android gecontroleerde bluetooth sumobot. Dit is een leuke manier om tijd doorbrengen met uw vrienden en deelnemen aan multiplayer toernooien! Het misschien op uw
SensorBox interfacing apparaat met behulp van arduino

SensorBox interfacing apparaat met behulp van arduino

Het doel van dit project is dat een interface-apparaat dat kan de kloof tussen de verschillende technologieën met behulp van easy-to-use hardware en software. Het is bestemd voor iedereen te bewerken wijzigen en interactieve projecten te maken. Naarm
Meerdere gister temperatuurregeling met Arduino

Meerdere gister temperatuurregeling met Arduino

Temperatuurregeling wordt vaak beschouwd als een van de top vijf stappen op weg naar betere bierbrouwen. (http://beerandwinejournal.com/10-better-1/) Er zijn tal van methoden voor het houden van gistende wort bij de optimale temperaturen een mandfles
Verlichte Lilys bloemen!

Verlichte Lilys bloemen!

Ik wilde bieden een lief en bescheiden diy cadeautje voor mijn meisje. Ik herinnerde me over een leuke website waar u hoe leren te maken van cool Origami. Ik kies het "Lily" model, mooi en perfect formulier voor dit project!Wat je nodig hebt:-3
My Workspace 2014

My Workspace 2014

De kerels van Hey! Welkom bij mijn werkruimte. Het is al een tijdje geleden dat ik laatst gepost een bijgewerkte versie van het. Hier is hoe het eruit nu (6/12/14). Sinds 2012 is er veel veranderd. Ik denk dat dit meer van een show en tell dan een tu