Stap 4: Programmeren van de Console
De Arduino schets werkt alleen goed als u LedControl bibliotheek gekoppeld in deze stap. Ik upload de volledige Arduino schets voor Snake spel van Nokia-telefoon. U kunt het ontwikkelen van je eigen spel. Voor het uploaden van de schets eerst de bibliotheek toevoegen aan uw arduino omgeving, gewoon uploaden van de schets aan de arduino, verwijderen van de microcontroller van het bord en het voorleggen van uw spelconsole. In de toekomst zal ik meer spel voor de console uploaden. . Enkel het.
#include "LedControl.h" // connection to MAX7219 (data, clik, load, #of dispplay) LedControl lc = LedControl(11,13,10,1); // direction const int TOP = 0; const int RIGHT = 1; const int BOTTOM = 2; const int LEFT = 3; // Snake length const int MAX_SNAKE_LENGTH = 16; // Variables //Adafruit_8x8matrix matrix = Adafruit_8x8matrix(); // Display int direction = RIGHT; // direction of movement int snakeX[MAX_SNAKE_LENGTH]; // X-coordinates of snake int snakeY[MAX_SNAKE_LENGTH]; // Y-coordinates of snake int snakeLength = 3; int score = 3;// unsigned long prevTime = 0; // for gamedelay (ms) unsigned long delayTime = 500; // Game step in ms int fruitX, fruitY; unsigned long fruitPrevTime = 0; unsigned long fruitBlinkTime = 100; unsigned long bonusTime = 0; unsigned long bonusPrevTime = 0; int fruitLed = true; int bonusLed = true; int bonusX, bonusY; void setup(){ ////wake up the MAX72XX from power-saving mode lc.shutdown(0,false); //set a medium brightness for the Leds lc.setIntensity(0, 15); //Switch all Leds on the display off. 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); //buzzer pinMode(12,OUTPUT); snakeX[0] = 0; snakeY[0] = 4; for(int i=1; i<MAX_SNAKE_LENGTH; i++){ snakeX[i] = snakeY[i] = -1; } makeFruit(); } void loop(){ delay(10); checkButtons(); // if any button is pressed or not unsigned long currentTime = millis(); if(currentTime - prevTime >= delayTime){ nextstep(); prevTime = currentTime; } draw(); // make snack & food } void checkButtons(){ if(digitalRead(3)==0) direction = TOP; else if(digitalRead(4)==0) direction = RIGHT; else if(digitalRead(5)==0) direction = LEFT; else if(digitalRead(2)==0) direction = BOTTOM; } void draw(){ lc.clearDisplay(0); drawSnake(); drawFruit(); } void drawSnake(){ for(int i=0; i<snakeLength; i++){ lc.setLed(0,snakeX[i], snakeY[i], true); } } void drawFruit(){ if(inPlayField(fruitX, fruitY)){ unsigned long currenttime = millis(); if(currenttime - fruitPrevTime >= fruitBlinkTime){ fruitLed = (fruitLed == true) ? false : true; fruitPrevTime = currenttime; } lc.setLed(0,fruitX, fruitY, fruitLed); } } boolean inPlayField(int x, int y){ return (x>=0) && (x<8) && (y>=0) && (y<8); } void nextstep(){ for(int i=snakeLength-1; i>0; i--){ if((direction == RIGHT)&&(snakeX[0]-snakeLength == 7)) snakeX[0] = -1; else if((direction == LEFT)&&(snakeX[0]+ snakeLength == 0)) snakeX[0] = 8; else snakeX[i] = snakeX[i-1]; if((direction == TOP) && (snakeY[0]+snakeLength == 0)) snakeY[0]=8; else if((direction == BOTTOM) && (snakeY[0]-snakeLength == 7)) snakeY[0]=-1; else snakeY[i] = snakeY[i-1]; } switch(direction){ case TOP: snakeY[0] = snakeY[0]-1; break; case RIGHT: snakeX[0] = snakeX[0]+1; break; case BOTTOM: snakeY[0] = snakeY[0]+1; break; case LEFT: snakeX[0]=snakeX[0]-1; break; } if((snakeX[0] == fruitX) && (snakeY[0] == fruitY)){ snakeLength++; score++; tone(12,4500,50); if(snakeLength < MAX_SNAKE_LENGTH){ makeFruit(); } else { fruitX = fruitY = -1; } if(score%8==0) { snakeLength = 3; delayTime = delayTime - 100; } } snakeItSelf(); } void makeFruit(){ int x, y; x = random(0, 8); y = random(0, 8); while(isPartOfSnake(x, y)){ x = random(0, 8); y = random(0, 8); } fruitX = x; fruitY = y; } boolean isPartOfSnake(int x, int y){ for(int i=0; i<snakeLength-1; i++){ if((x == snakeX[i]) && (y == snakeY[i])){ return true; } } return false; } void snakeItSelf(){ // check if snack touch itself for(int i=1;i<snakeLength;i++){ if((snakeX[0] == snakeX[i]) && (snakeY[0] == snakeY[i])) gameOver(); } } void gameOver(){ // game over sound tone(12,1000,100); delay(100); tone(12,1500,200); delay(200); tone(12,2000,300); delay(300); tone(12, 494,500); delay(500); lc.clearDisplay(0); for(int r = 0; r < 8; r++){ for(int c = 0; c < 8; c++){ lc.setLed(0, r, c, HIGH); delay(50); }delay(50); } delay(300); score = 3; snakeLength = 3; direction = RIGHT; snakeX[0]=3; snakeY[0]=4; delayTime = 500; loop(); } void drawBonus(){ if(inPlayField(fruitX, fruitY)){ unsigned long bonusTime = millis(); if(bonusTime - bonusPrevTime >= 300){ bonusLed = (bonusLed == true) ? false : true; bonusPrevTime = bonusTime; } lc.setLed(0,bonusX, bonusY, bonusLed); } } void makeBonus(){ int x, y; x = random(0, 8); y = random(0, 8); while(isPartOfSnake(x, y)){ x = random(0, 8); y = random(0, 8); } bonusX = x; bonusY = y; }