Johan, Oskar och Richard har gjort det igen.
Det trodde jag inte om er!
Vi behövde göra ett projekt. Vi hade få idéer. En vietnames hade precis plockat bort appen från App Store och vi kände att vi behövde göra någonting.
En rapport att begrunda. En rapport att studera. En rapport att övervinna världen.
Läs hela vår rapport här.All your base are belong to us.
* FlappyBird.c * * Created: 2014-03-21 15:11:35 * Author: digpi10 */ #include#include #include "display.h" #include "draw.h" #include "drawings.h" #include "sound.h" short int mainButtonPressed; short int menuButtonPressed; short int birdIsDead; short int collision; short int score = 0; short int tickDelay = 50; short int gamePhase; struct Bird { int x; int y; }; struct Tube { int x; int y; }; struct Tube tubeArray[3]; struct Bird bird; struct Tube nullTube; short int tickCount = 0; short int createNewTubePace = 40; short int numberOfTubes = 0; int main(void) { startGame(); while(1){ } } void startGame() { setup(); while (1) { switch(gamePhase) { case 0: startPhase(); break; case 1: game(); break; case 2: showResults(); break; default: break; } } } void game() { birdIsDead = 0; while (birdIsDead != 1) { tick(); _delay_ms(tickDelay); } gamePhase = 2; } void tick() { checkCollision(); if (collision == 1) { birdIsDead = 1; } else { readMainButton(); if (mainButtonPressed) { moveBirdUp(); } else { moveBirdDown(); } moveTubes(); scoreCount(); if (tickCount > createNewTubePace) { if (numberOfTubes < 2) { numberOfTubes++; createNewTube(numberOfTubes); } tickCount = 0; } tickCount++; } } void scoreCount(){ for (int k = 0; k < 3; k++) { if ( tubeArray[k].y == (bird.y + 15)) { score++; jumpSound(); } } } void showResults() { removeBird(); setScore(paintBlack,score); drawFrame(paintWhite); for (int k = 0; k < 3; k++) { removeTube(tubeArray[k].x,tubeArray[k].y); } deathSound(); while(1) { readMainButton(); if(mainButtonPressed) { startGame(); } } } void checkCollision() { if(bird.x > 51) { collision = 1; } else if (bird.x < 1) { collision = 1; } else { for (int k = 0; k < numberOfTubes; k++) { if((tubeArray[k].y+6) > bird.y) { if (tubeArray[k].y < (bird.y + 15)) { if(tubeArray[k].x + 2 > bird.x) { collision = 1; } if ((tubeArray[k].x + 2 + 30) < bird.x + 12) { collision = 1; } } } } } } void moveBirdUp() { removeBird(); bird.x += 1; drawBird(); } void moveBirdDown() { removeBird(); bird.x -= 1; drawBird(); } void moveTubes() { removeTube(tubeArray[0].x,tubeArray[0].y); tubeArray[0].y++; if (tubeArray[0].y > 121) { tubeArray[0].y = 0; } else { drawTube(tubeArray[0].x,tubeArray[0].y); } if (numberOfTubes > 0) { removeTube(tubeArray[1].x,tubeArray[1].y); tubeArray[1].y++; if (tubeArray[1].y > 121) { tubeArray[1].y = 0; } else { drawTube(tubeArray[1].x,tubeArray[1].y); } } if (numberOfTubes > 1) { removeTube(tubeArray[2].x,tubeArray[2].y); tubeArray[2].y++; if (tubeArray[2].y > 121) { tubeArray[2].y = 0; } else { drawTube(tubeArray[2].x,tubeArray[2].y); } } } void startPhase() { bird.x = 20; bird.y = 84; drawStartScreen(); createNewTube(0); startSound(); while(1){ readMainButton(); if (mainButtonPressed) { gamePhase = 1; setTapToStart(paintWhite); drawFrame(paintWhite); return; } } } void createNewTube(int n) { struct Tube tube; tubeArray[n] = tube; tubeArray[n].x = 10 + (5 * n); tubeArray[n].y = 1; drawTube(tubeArray[n].x, tubeArray[n].y); } void setup() { DDRD = 0xFF; DDRB = 0xFF; dispOn(); emptyDisplay(); gamePhase = 0; score = 0; collision = 0; numberOfTubes = 0; tickCount = 0; } void drawBird() { setBird(bird.x, bird.y, paintBlack); } void removeBird() { setBird(bird.x, bird.y, paintWhite); } void readMainButton() { short int status = PINA | 0xF3; if ( status == 0xF3) { status = PINA | 0xFB; if (status == 0xFB) { mainButtonPressed = 1; // knappen är nedtryck } } else { mainButtonPressed = 0;// knappen är inte nedtryckt } } void readMenuButton() { short int status = PINA | 0xFD; if ( status == 0xFD) { menuButtonPressed = 1; // knappen är nedtryck } else { menuButtonPressed = 0; // knappen är inte nedtryckt } } /* * display.h * * Created: 2014-03-21 15:11:35 * Author: digpi10 */ char display[8][128]; void dispOn() { DDRD = 0xFF; PORTD = 0x3F; PORTB = 0xCD; PORTB = PORTB & 0xBF; PORTB = 0xCE; PORTB = PORTB & 0xBF; } void dispOff() { DDRD = 0xFF; PORTD = 0x3E; PORTB = 0xCD; PORTB = PORTB & 0xBF; PORTB = 0xCE; PORTB = PORTB & 0xBF; } /* * draw.h * * Created: 2014-03-21 15:11:35 * Author: digpi10 */ short int paintBlack = 1; short int paintWhite = 0; void setPixel(short int x, short int y, short int operation) { PORTB = PORTB | 0x03; PORTD = 0x00; PORTB = PORTB | 0x10; int yPos; int xPos = x; if( y < 64) { PORTB = PORTB & 0xFD; yPos = y; } else { PORTB = PORTB & 0xFE; yPos = y - 64; } PORTB = PORTB&0xCF; setXAddress(x); setYAddress(yPos); paintPixel(xPos, y, operation); } void toggleESignal() { PORTB = PORTB | 0x40; PORTB = PORTB & 0xBF; PORTB = PORTB | 0x40; } void setXAddress(short int x) { short int xPos = x / 8; PORTD = 0xB8 | xPos; toggleESignal(); } void setYAddress(short int y) { PORTD = 0x40 | y; toggleESignal(); } void paintPixel(short int x, short int y, short int operation) { PORTB = PORTB | 0xEC; short int xAddress = (x / 8); short int pinOut = (x & 0x07); // genererar 8 bitar där den n:e biten (n = x % 8) är en etta. if (operation == paintBlack) { display[xAddress][y] = display[xAddress][y] | (0x01 << pinOut); PORTD = display[xAddress][y]; } else { display[xAddress][y] = display[xAddress][y] & (0xff - ((0x01 << pinOut))); PORTD = display[xAddress][y]; } toggleESignal(); } void drawLine(int start, int stop) { } void emptyDisplay() { for(int x = 0; x < 8; x++) { for(int y = 0; y < 128; y++) { setPixel(x*8 + 0,y,paintWhite); setPixel(x*8 + 1,y,paintWhite); setPixel(x*8 + 2,y,paintWhite); setPixel(x*8 + 3,y,paintWhite); setPixel(x*8 + 4,y,paintWhite); setPixel(x*8 + 5,y,paintWhite); setPixel(x*8 + 6,y,paintWhite); setPixel(x*8 + 7,y,paintWhite); display[x/8][y] = 0x00; } } } void setPixel2(int x, int y, short int operation) { char xAddress = (x / 8); short int pinOut = (x & 0x07); if(operation == paintBlack) { display[xAddress][y] = display[xAddress][y] | (0x01 << pinOut); } else { display[xAddress][y] = display[xAddress][y] & (0xff - ((0x01 << pinOut))); } } void reDraw() { PORTB = PORTB | 0xEC; PORTB = PORTB & 0xEF; for(int x = 0; x < 64; x++) { for(int y = 0; y < 128; y++) { PORTB = PORTB | 0x03; char xAddress = (x / 8); char yPos; if( y < 64) { PORTB = PORTB & 0xFD; yPos = y; } else { PORTB = PORTB & 0xFE; yPos = y - 64; } setXAddress(x); setYAddress(yPos); PORTD = display[xAddress][y]; toggleESignal(); } } } /* * drawings.h * * Created: 2014-03-21 15:11:35 * Author: digpi10 */ short int tubeGap = 30; void setBird(char x, char y, short int operation){ setPixel(x+0 ,y+6,operation); setPixel(x+0 ,y+7,operation); setPixel(x+0 ,y+8,operation); setPixel(x+0 ,y+9,operation); setPixel(x+0 ,y+10,operation); setPixel(x+1, y+2,operation); setPixel(x+1, y+3,operation); setPixel(x+1, y+4,operation); setPixel(x+1, y+5,operation); setPixel(x+1, y+11,operation); setPixel(x+1, y+12,operation); setPixel(x+2, y+1,operation); setPixel(x+2, y+13,operation); setPixel(x+3, y+1,operation); setPixel(x+3, y+2,operation); setPixel(x+3, y+3,operation); setPixel(x+3, y+4,operation); setPixel(x+3, y+5,operation); setPixel(x+3, y+11,operation); setPixel(x+3, y+12,operation); setPixel(x+3, y+13,operation); setPixel(x+4, y+0,operation); setPixel(x+4, y+10,operation); setPixel(x+4, y+14,operation); setPixel(x+5, y+1,operation); setPixel(x+5, y+2,operation); setPixel(x+5, y+3,operation); setPixel(x+5, y+4,operation); setPixel(x+5, y+5,operation); setPixel(x+5, y+9,operation); setPixel(x+5, y+15,operation); setPixel(x+6, y+2,operation); setPixel(x+6, y+6,operation); setPixel(x+6, y+9,operation); setPixel(x+6, y+15,operation); setPixel(x+7, y+2,operation); setPixel(x+7, y+4,operation); setPixel(x+7, y+7,operation); setPixel(x+7, y+10,operation); setPixel(x+7, y+15,operation); setPixel(x+8, y+2,operation); setPixel(x+8, y+4,operation); setPixel(x+8, y+7,operation); setPixel(x+8, y+11,operation); setPixel(x+8, y+12,operation); setPixel(x+8, y+13,operation); setPixel(x+8, y+14,operation); setPixel(x+9, y+3,operation); setPixel(x+9, y+7,operation); setPixel(x+9, y+12,operation); setPixel(x+10, y+4,operation); setPixel(x+10, y+6,operation); setPixel(x+10, y+10,operation); setPixel(x+10, y+11,operation); setPixel(x+11, y+5,operation); setPixel(x+11, y+6,operation); setPixel(x+11, y+7,operation); setPixel(x+11, y+8,operation); setPixel(x+11, y+9,operation); } void drawFrame(short int operation) { for(char x = 0; x < 64 ; x++) { setPixel(x, 0, operation); setPixel(x, 127, operation); } for(char y = 0; y < 128; y++) { setPixel(0, y, operation); setPixel(63,y, operation); } } void drawA(short int x, short int y, short int operation) { setPixel(x+0,y+0,operation); setPixel(x+0,y+4,operation); setPixel(x+1,y+0,operation); setPixel(x+1,y+4,operation); setPixel(x+2,y+0,operation); setPixel(x+2,y+1,operation); setPixel(x+2,y+2,operation); setPixel(x+2,y+3,operation); setPixel(x+2,y+4,operation); setPixel(x+3,y+0,operation); setPixel(x+3,y+4,operation); setPixel(x+4,y+1,operation); setPixel(x+4,y+2,operation); setPixel(x+4,y+3,operation); } void drawT(short int x, short int y, short int operation) { setPixel(x+0,y+2,operation); setPixel(x+1,y+2,operation); setPixel(x+2,y+2,operation); setPixel(x+3,y+2,operation); setPixel(x+4,y+0,operation); setPixel(x+4,y+1,operation); setPixel(x+4,y+2,operation); setPixel(x+4,y+3,operation); setPixel(x+4,y+4,operation); } void drawP(short int x, short int y, short int operation) { setPixel(x+0,y+4,operation); setPixel(x+1,y+4,operation); setPixel(x+2,y+1,operation); setPixel(x+2,y+2,operation); setPixel(x+2,y+3,operation); setPixel(x+2,y+4,operation); setPixel(x+3,y+4,operation); setPixel(x+3,y+0,operation); setPixel(x+4,y+1,operation); setPixel(x+4,y+2,operation); setPixel(x+4,y+3,operation); setPixel(x+4,y+4,operation); } void drawO(short int x, short int y, short int operation) { setPixel(x+0,y+1,operation); setPixel(x+0,y+2,operation); setPixel(x+0,y+3,operation); setPixel(x+1,y+0,operation); setPixel(x+1,y+4,operation); setPixel(x+2,y+0,operation); setPixel(x+2,y+4,operation); setPixel(x+3,y+0,operation); setPixel(x+3,y+4,operation); setPixel(x+4,y+1,operation); setPixel(x+4,y+2,operation); setPixel(x+4,y+3,operation); } void drawS(short int x, short int y, short int operation) { setPixel(x+0,y+1,operation); setPixel(x+0,y+2,operation); setPixel(x+0,y+3,operation); setPixel(x+0,y+4,operation); setPixel(x+1,y+0,operation); setPixel(x+2,y+1,operation); setPixel(x+2,y+2,operation); setPixel(x+2,y+3,operation); setPixel(x+3,y+4,operation); setPixel(x+4,y+0,operation); setPixel(x+4,y+1,operation); setPixel(x+4,y+2,operation); setPixel(x+4,y+3,operation); } void drawR(short int x, short int y, short int operation) { setPixel(x+0,y+0,operation); setPixel(x+0,y+4,operation); setPixel(x+1,y+0,operation); setPixel(x+1,y+4,operation); setPixel(x+2,y+1,operation); setPixel(x+2,y+2,operation); setPixel(x+2,y+3,operation); setPixel(x+2,y+4,operation); setPixel(x+3,y+0,operation); setPixel(x+3,y+4,operation); setPixel(x+4,y+1,operation); setPixel(x+4,y+2,operation); setPixel(x+4,y+3,operation); setPixel(x+4,y+4,operation); } void drawE(short int x, short int y, short int operation){ setPixel(x+0,y+0,operation); setPixel(x+0,y+1,operation); setPixel(x+0,y+2,operation); setPixel(x+0,y+3,operation); setPixel(x+0,y+4,operation); setPixel(x+1,y+4,operation); setPixel(x+2,y+1,operation); setPixel(x+2,y+2,operation); setPixel(x+2,y+3,operation); setPixel(x+2,y+4,operation); setPixel(x+3,y+4,operation); setPixel(x+4,y+0,operation); setPixel(x+4,y+1,operation); setPixel(x+4,y+2,operation); setPixel(x+4,y+3,operation); setPixel(x+4,y+4,operation); } void drawC(short int x, short int y, short int operation){ setPixel(x+0,y+1,operation); setPixel(x+0,y+2,operation); setPixel(x+0,y+3,operation); setPixel(x+1,y+0,operation); setPixel(x+1,y+4,operation); setPixel(x+2,y+4,operation); setPixel(x+3,y+0,operation); setPixel(x+3,y+4,operation); setPixel(x+4,y+1,operation); setPixel(x+4,y+2,operation); setPixel(x+4,y+3,operation); } void setTapToStart(int operation) { drawT(5,97,operation); drawA(5,91,operation); drawP(5,85,operation); drawT(5,74,operation); drawO(5,68,operation); drawS(5,57,operation); drawT(5,51,operation); drawA(5,45,operation); drawR(5,39,operation); drawT(5,33,operation); } void drawStartScreen() { drawFrame(paintBlack); drawBird(); setTapToStart(paintBlack); } void setScore(short int operation, short int score){ drawS(25,80,operation); drawC(25,74,operation); drawO(25,68,operation); drawR(25,62,operation); drawE(25,56,operation); setPixel(28,54,operation); setPixel(26,54,operation); short int firstDigit = score % 10; short int secondDigit = score / 10; drawNumber(25,43,operation,firstDigit); drawNumber(25,47,operation,secondDigit); } void drawNumber(short int x, short int y, short int operation, short int digit) { switch(digit) { case 0: draw0(x, y, operation); break; case 1: draw1(x, y, operation); break; case 2: draw2(x, y, operation); break; case 3: draw3(x, y, operation); break; case 4: draw4(x, y, operation); break; case 5: draw5(x, y, operation); break; case 6: draw6(x, y, operation); break; case 7: draw7(x, y, operation); break; case 8: draw8(x, y, operation); break; case 9: draw9(x, y, operation); break; default: break; } } void draw0(short int x, short int y, short int operation){ setPixel(x+0,y+0,paintBlack); setPixel(x+1,y+0,paintBlack); setPixel(x+2,y+0,paintBlack); setPixel(x+3,y+0,paintBlack); setPixel(x+4,y+0,paintBlack); setPixel(x+0,y+1,paintBlack); setPixel(x+4,y+1,paintBlack); setPixel(x+0,y+2,paintBlack); setPixel(x+1,y+2,paintBlack); setPixel(x+2,y+2,paintBlack); setPixel(x+3,y+2,paintBlack); setPixel(x+4,y+2,paintBlack); } void draw1(short int x, short int y, short int operation){ setPixel(x+0,y+0,paintBlack); setPixel(x+1,y+0,paintBlack); setPixel(x+2,y+0,paintBlack); setPixel(x+3,y+0,paintBlack); setPixel(x+4,y+0,paintBlack); } void draw2(short int x, short int y, short int operation){ setPixel(x+0,y+0,paintBlack); setPixel(x+0,y+1,paintBlack); setPixel(x+0,y+2,paintBlack); setPixel(x+1,y+2,paintBlack); setPixel(x+2,y+0,paintBlack); setPixel(x+2,y+1,paintBlack); setPixel(x+2,y+2,paintBlack); setPixel(x+3,y+0,paintBlack); setPixel(x+4,y+0,paintBlack); setPixel(x+4,y+1,paintBlack); setPixel(x+4,y+2,paintBlack); } void draw3(short int x, short int y, short int operation){ setPixel(x+0,y+0,paintBlack); setPixel(x+0,y+1,paintBlack); setPixel(x+0,y+2,paintBlack); setPixel(x+1,y+0,paintBlack); setPixel(x+2,y+0,paintBlack); setPixel(x+2,y+1,paintBlack); setPixel(x+2,y+2,paintBlack); setPixel(x+3,y+0,paintBlack); setPixel(x+4,y+0,paintBlack); setPixel(x+4,y+1,paintBlack); setPixel(x+4,y+2,paintBlack); } void draw4(short int x, short int y, short int operation){ setPixel(x+0,y+0,paintBlack); setPixel(x+1,y+0,paintBlack); setPixel(x+2,y+0,paintBlack); setPixel(x+2,y+1,paintBlack); setPixel(x+2,y+2,paintBlack); setPixel(x+3,y+0,paintBlack); setPixel(x+3,y+2,paintBlack); setPixel(x+4,y+0,paintBlack); setPixel(x+4,y+2,paintBlack); } void draw5(short int x, short int y, short int operation){ setPixel(x+0,y+0,paintBlack); setPixel(x+0,y+1,paintBlack); setPixel(x+0,y+2,paintBlack); setPixel(x+1,y+0,paintBlack); setPixel(x+2,y+0,paintBlack); setPixel(x+2,y+1,paintBlack); setPixel(x+2,y+2,paintBlack); setPixel(x+3,y+2,paintBlack); setPixel(x+4,y+0,paintBlack); setPixel(x+4,y+1,paintBlack); setPixel(x+4,y+2,paintBlack); } void draw6(short int x, short int y, short int operation){ setPixel(x+0,y+0,paintBlack); setPixel(x+0,y+1,paintBlack); setPixel(x+0,y+2,paintBlack); setPixel(x+1,y+0,paintBlack); setPixel(x+1,y+2,paintBlack); setPixel(x+2,y+0,paintBlack); setPixel(x+2,y+1,paintBlack); setPixel(x+2,y+2,paintBlack); setPixel(x+3,y+2,paintBlack); setPixel(x+4,y+0,paintBlack); setPixel(x+4,y+1,paintBlack); setPixel(x+4,y+2,paintBlack); } void draw7(short int x, short int y, short int operation){ setPixel(x+0,y+0,paintBlack); setPixel(x+1,y+0,paintBlack); setPixel(x+2,y+0,paintBlack); setPixel(x+3,y+0,paintBlack); setPixel(x+4,y+0,paintBlack); setPixel(x+4,y+1,paintBlack); setPixel(x+4,y+2,paintBlack); } void draw8(short int x, short int y, short int operation){ setPixel(x+0,y+0,paintBlack); setPixel(x+0,y+1,paintBlack); setPixel(x+0,y+2,paintBlack); setPixel(x+1,y+0,paintBlack); setPixel(x+1,y+2,paintBlack); setPixel(x+2,y+0,paintBlack); setPixel(x+2,y+1,paintBlack); setPixel(x+2,y+2,paintBlack); setPixel(x+3,y+0,paintBlack); setPixel(x+3,y+2,paintBlack); setPixel(x+4,y+0,paintBlack); setPixel(x+4,y+1,paintBlack); setPixel(x+4,y+2,paintBlack); } void draw9(short int x, short int y, short int operation){ setPixel(x+0,y+0,paintBlack); setPixel(x+0,y+1,paintBlack); setPixel(x+0,y+2,paintBlack); setPixel(x+1,y+0,paintBlack); setPixel(x+2,y+0,paintBlack); setPixel(x+2,y+1,paintBlack); setPixel(x+2,y+2,paintBlack); setPixel(x+3,y+0,paintBlack); setPixel(x+3,y+2,paintBlack); setPixel(x+4,y+0,paintBlack); setPixel(x+4,y+1,paintBlack); setPixel(x+4,y+2,paintBlack); } void drawTubeUp(short int y, short int length, short int operation) { short int x = length; for(int k = 0; k < x; k++) { setPixel(k, y+1, operation); setPixel(k, y+4, operation); } setPixel(x, y+0, operation); setPixel(x, y+1, operation); setPixel(x, y+4, operation); setPixel(x, y+5, operation); setPixel(x+1, y+0, operation); setPixel(x+1, y+5, operation); setPixel(x+2, y+0, operation); setPixel(x+2, y+1, operation); setPixel(x+2, y+2, operation); setPixel(x+2, y+3, operation); setPixel(x+2, y+4, operation); setPixel(x+2, y+5, operation); } void drawTubeDown(short int y, short int length, short int operation) { short int x = (63 - length); for(int k = 63; k > x; k--) { setPixel(k, y+1, operation); setPixel(k, y+4, operation); } setPixel(x, y+0, operation); setPixel(x, y+1, operation); setPixel(x, y+4, operation); setPixel(x, y+5, operation); setPixel(x-1, y+0, operation); setPixel(x-1, y+5, operation); setPixel(x-2, y+0, operation); setPixel(x-2, y+1, operation); setPixel(x-2, y+2, operation); setPixel(x-2, y+3, operation); setPixel(x-2, y+4, operation); setPixel(x-2, y+5, operation); } void drawTube(char x, char y){ drawTubeUp(y, x-3, paintBlack); drawTubeDown(y, 64-x-tubeGap-3, paintBlack); } void removeTube(char x, char y){ drawTubeUp(y, x-3, paintWhite); drawTubeDown(y, 64-x-tubeGap-3, paintWhite); } #include #include "sin.h" /* Function To Initialize TIMER0 In Fast PWWM Mode. */ void InitPWM() { TCCR0|=(1< =2;delay--) { for(n=0;n<(51-delay);n++) { for(i=0;i<=5;i++) { OCR0=pgm_read_byte_near(sine+i); _delay_loop_2(delay); } } } } void startSound() { uint8_t i; InitPWM(); uint8_t delay,n; for(delay=1;delay<=50;delay++) { for(n=0;n<(51-delay);n++) { for(i=0;i<=20;i++) { OCR0=pgm_read_byte_near(sine+i); _delay_loop_2(delay); } } } for(delay=50;delay>=2;delay--) { for(n=0;n<(51-delay);n++) { for(i=0;i<=20;i++) { OCR0=pgm_read_byte_near(sine+i); _delay_loop_2(delay); } } } } void jumpSound() { uint8_t I; InitPWM(); uint8_t delay,n; for(delay=1;delay<=20;delay++){ for(n=0;n<(51-delay);n++){ for(i=0;i<=3;i++){ OCR0=pgm_read_byte_near(sine+i); _delay_loop_2(delay); } } } for(delay=20;delay>=2;delay--){ for(n=0;n<(51-delay);n++){ for(i=0;i<=4;i++){ OCR0=pgm_read_byte_near(sine+i); _delay_loop_2(delay); } } } } #include uint8_t sine[256]={127, 130, 133, 136, 139, 143, 146, 149, 152, 155, 158, 161, 164, 167, 170, 173, 176, 178, 181, 184, 187, 189, 192, 195, 197, 200, 203, 205, 207, 210, 212, 214, 217, 219, 221, 223, 225, 227, 229, 231, 232, 234, 236, 237, 239, 240, 242, 243, 244, 245, 246, 248, 248, 249, 250, 251, 251, 252, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, 253, 253, 253, 252, 252, 251, 250, 250, 249, 248, 247, 246, 245, 243, 242, 241, 239, 238, 236, 235, 233, 231, 229, 227, 225, 224, 221, 219, 217, 215, 213, 210, 208, 206, 203, 201, 198, 195, 193, 190, 187, 185, 182, 179, 176, 173, 170, 167, 164, 161, 158, 155, 152, 149, 146, 143, 140, 137, 134, 131, 128, 125, 121, 118, 115, 112, 109, 106, 103, 100, 97, 94, 91, 88, 85, 82, 79, 76, 73, 71, 68, 65, 62, 60, 57, 55, 52, 50, 47, 45, 42, 40, 38, 36, 34, 31, 29, 27, 26, 24, 22, 20, 19, 17, 15, 14, 13, 11, 10, 9, 8, 7, 6, 5, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 16, 17, 19, 21, 22, 24, 26, 28, 30, 32, 34, 36, 39, 41, 43, 45, 48, 50, 53, 55, 58, 61, 63, 66, 69, 72, 74, 77, 80, 83, 86, 89, 92, 95, 98, 101, 104, 107, 110, 113, 116, 119, 122, };
(c) 2014 Made with love.