Arduino matrisskrivare spelkonsol (4 / 7 steg)
Steg 4: Programmering konsolen
För att fungera Arduino skiss behöver du LedControl bibliotek bifogas i detta steg. Jag ladda upp den komplett Arduino skiss för orm spel för Nokia-telefonen. Du kan utveckla ditt eget spel. För att ladda upp den skiss första lägga till biblioteket till din arduino miljö, bara ladda upp skissen till din arduino, ta bort mikrokontroller från styrelsen och lägga den till din spelkonsol. Jag kommer lägga upp fler spel till konsolen i framtiden. . Bara det.
#include "LedControl.h"
anslutning till MAX7219 (data, clik, last, #of dispplay)
LedControl lc = LedControl(11,13,10,1);
riktning
CONST int topp = 0;
CONST int höger = 1;
CONST int botten = 2;
CONST int vänster = 3.
Snake längd
CONST int MAX_SNAKE_LENGTH = 16.
Variabler
Adafruit_8x8matrix matrix = Adafruit_8x8matrix(); Displayen
int riktning = höger; rörelseriktning
int snakeX [MAX_SNAKE_LENGTH]; X-koordinaterna för orm
int snakeY [MAX_SNAKE_LENGTH]; Y-koordinaterna för orm
int snakeLength = 3;
int poäng = 3. / /
osignerade långa prevTime = 0; för gamedelay (ms)
osignerade långa fördröjningstid = 500. Spel steg i ms
int fruitX, fruktig;
osignerade långa fruitPrevTime = 0;
osignerade långa fruitBlinkTime = 100;
osignerade långa bonusTime = 0;
osignerade långa bonusPrevTime = 0;
int fruitLed = sant;
int bonusLed = sant;
int bonusX, bonusY;
void setup() {
vakna upp MAX72XX från energisparläge
LC.Shutdown(0,false);
Ange en medelstark ljusstyrka för lysdioderna
lc.setIntensity (0, 15);
Stäng av alla lysdioder på displayen.
lc.clearDisplay(0);
Serial.BEGIN(9600);
randomSeed(analogRead(0));
pinMode(0,INPUT);
pinMode(17,INPUT);
pinMode(1,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
summern
pinMode(12,OUTPUT);
snakeX [0] = 0;
snakeY [0] = 4;
för (int jag = 1; jag < MAX_SNAKE_LENGTH; i ++) {
snakeX [i] = snakeY [i] = -1;
}
makeFruit();
}
void loop() {
Delay(10);
checkButtons(); om någon knapp trycks eller inte
osignerade långa currentTime = millis();
om (currentTime - prevTime > = fördröjningstid) {
NeXTstep();
prevTime = currentTime;
}
draw(); gör mellanmål & mat
}
void checkButtons() {
IF(digitalRead(3)==0)
riktning = topp;
annat if(digitalRead(4)==0)
riktning = höger;
annat if(digitalRead(5)==0)
riktning = vänster;
annat if(digitalRead(2)==0)
riktning = botten.
}
void draw() {
lc.clearDisplay(0);
drawSnake();
drawFruit();
}
void drawSnake() {
för (int jag = 0; jag < snakeLength; i ++) {
lc.setLed (0, snakeX [i], snakeY [i], true);
}
}
void drawFruit() {
om (inPlayField (fruitX, fruktig)) {
osignerade långa currenttime = millis();
om (currenttime - fruitPrevTime > = fruitBlinkTime) {
fruitLed = (fruitLed == true)? falska: sant;
fruitPrevTime = currenttime;
}
lc.setLed (0, fruitX, fruktig, fruitLed);
}
}
booleska inPlayField (int x, int y) {
tillbaka (x > = 0) & & (x < 8) & & (y > = 0) & & (y < 8);
}
void nextstep() {
för (int jag = snakeLength-1; jag > 0; i--) {
om ((direction == RIGHT) & & (snakeX [0]-snakeLength == 7))
snakeX [0] = -1;
annars om ((direction == LEFT) & & (snakeX [0] + snakeLength == 0))
snakeX [0] = 8.
annat snakeX [i] = snakeX [i-1];
om ((direction == TOP) & & (snakeY [0] + snakeLength == 0))
snakeY [0] = 8.
annars om ((direction == BOTTOM) & & (snakeY [0]-snakeLength == 7))
snakeY [0] =-1;
annars snakeY [i] = snakeY [i-1];
}
Switch(Direction) {
fall toppen:
snakeY [0] = snakeY [0] -1;
bryta;
fall rätt:
snakeX [0] = snakeX [0] + 1;
bryta;
fallet botten:
snakeY [0] = snakeY [0] + 1;
bryta;
fall kvar:
snakeX [0] = snakeX [0] -1;
bryta;
}
om ((snakeX [0] == fruitX) & & (snakeY [0] == fruktig)) {
snakeLength ++;
Score ++;
Tone(12,4500,50);
IF(snakeLength < MAX_SNAKE_LENGTH) {
makeFruit();
}
annat {
fruitX = fruktig = -1;
}
IF(score%8==0)
{
snakeLength = 3;
Fördröjningstid = fördröjningstid - 100.
}
}
snakeItSelf();
}
void makeFruit() {
int x, y;
x = random (0, 8);
y = random (0, 8);
samtidigt (isPartOfSnake (x, y)) {
x = random (0, 8);
y = random (0, 8);
}
fruitX = x;
Fruktig = y;
}
booleska isPartOfSnake (int x, int y) {
för (int jag = 0; jag < snakeLength-1; i ++) {
om ((x == snakeX[i]) & & (y == snakeY[i])) {
return true;
}
}
returnera false;
}
void snakeItSelf() {/ / kolla om mellanmål röra sig
för (int jag = 1; jag < snakeLength; i ++) {
om ((snakeX [0] == snakeX[i]) & & (snakeY [0] == snakeY[i]))
gameOver();
}
}
void gameOver() {
spel över ljud
Tone(12,1000,100);
Delay(100);
Tone(12,1500,200);
Delay(200);
Tone(12,2000,300);
Delay(300);
tonen (12, 494,500);
Delay(500);
lc.clearDisplay(0);
för (int r = 0; r < 8; r ++) {
för (int c = 0; c < 8; c ++) {
lc.setLed (0, r, c, hög);
Delay(50);
} delay(50);
}
Delay(300);
poäng = 3;
snakeLength = 3;
riktning = höger;
snakeX [0] = 3;
snakeY [0] = 4;
Fördröjningstid = 500.
loop();
}
void drawBonus() {
om (inPlayField (fruitX, fruktig)) {
osignerade långa bonusTime = millis();
om (bonusTime - bonusPrevTime > = 300) {
bonusLed = (bonusLed == true)? falska: sant;
bonusPrevTime = bonusTime;
}
lc.setLed (0, bonusX, bonusY, bonusLed);
}
}
void makeBonus() {
int x, y;
x = random (0, 8);
y = random (0, 8);
samtidigt (isPartOfSnake (x, y)) {
x = random (0, 8);
y = random (0, 8);
}
bonusX = x;
bonusY = y;
}