Adding a very small tron/snake like game
This commit is contained in:
parent
7d79419f55
commit
0403e99362
|
@ -0,0 +1,98 @@
|
|||
#include <sysinit.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "basic/basic.h"
|
||||
#include "basic/random.h"
|
||||
#include "lcd/display.h"
|
||||
#include "usetable.h"
|
||||
|
||||
void randomizeCoin(int* x, int* y);
|
||||
|
||||
void ram() {
|
||||
int key;
|
||||
|
||||
int d = 0;
|
||||
int x = RESX / 2;
|
||||
int y = RESY / 2;
|
||||
|
||||
int p = 0;
|
||||
int q, r;
|
||||
|
||||
randomizeCoin(&q, &r);
|
||||
|
||||
lcdClear();
|
||||
|
||||
while (1) {
|
||||
// display
|
||||
lcdSetPixel(q, r, p % 3);
|
||||
lcdSetPixel(x, y, 1);
|
||||
lcdDisplay();
|
||||
|
||||
// wait
|
||||
|
||||
delayms(20);
|
||||
|
||||
// input
|
||||
|
||||
key=getInputRaw();
|
||||
|
||||
switch(key) {
|
||||
case BTN_RIGHT:
|
||||
d = 3;
|
||||
break;
|
||||
case BTN_LEFT:
|
||||
d = 2;
|
||||
break;
|
||||
case BTN_UP:
|
||||
d = 0;
|
||||
break;
|
||||
case BTN_DOWN:
|
||||
d = 1;
|
||||
break;
|
||||
case BTN_ENTER:
|
||||
return;
|
||||
}
|
||||
|
||||
// step
|
||||
|
||||
if(d > 1) {
|
||||
x = (RESX + x + (d & 1) * 2 - 1) % RESX;
|
||||
} else {
|
||||
y = (RESY + y + d * 2 - 1) % RESY;
|
||||
}
|
||||
|
||||
p += 1;
|
||||
|
||||
// collision
|
||||
|
||||
if(x == q && y == r) {
|
||||
p += 99;
|
||||
randomizeCoin(&q, &r);
|
||||
} else if(lcdGetPixel(x, y)) {
|
||||
lcdClear();
|
||||
lcdPrintln("You lost!");
|
||||
lcdNl();
|
||||
lcdPrintInt(p);
|
||||
lcdPrintln(" points");
|
||||
lcdDisplay();
|
||||
|
||||
while(getInputRaw() != BTN_ENTER);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void randomizeCoin(int* x, int* y) {
|
||||
// WARNING: if you are really got at this the game freezes :D
|
||||
for(;;) {
|
||||
*x = getRandom() % RESX;
|
||||
*y = getRandom() % RESY;
|
||||
|
||||
if(!lcdGetPixel(*x, *y)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue