Add starfield loadable
This commit is contained in:
parent
d8d056e5ef
commit
39efe08dab
|
@ -0,0 +1,73 @@
|
|||
#include <sysinit.h>
|
||||
|
||||
#include "basic/basic.h"
|
||||
#include "basic/config.h"
|
||||
|
||||
#include "lcd/lcd.h"
|
||||
#include "lcd/print.h"
|
||||
|
||||
#include "usetable.h"
|
||||
|
||||
#define NUM_STARS 150
|
||||
|
||||
typedef struct {
|
||||
short x, y, z, speed;
|
||||
} s_star;
|
||||
|
||||
static s_star stars[NUM_STARS];
|
||||
|
||||
void init_star(s_star *star, int z);
|
||||
|
||||
void ram(void)
|
||||
{
|
||||
short centerx = RESX >> 1;
|
||||
short centery = RESY >> 1;
|
||||
short i;
|
||||
|
||||
for (i = 0; i < NUM_STARS; i++) {
|
||||
init_star(stars + i, i + 1);
|
||||
}
|
||||
|
||||
while(getInputRaw()==BTN_NONE){
|
||||
lcdClear();
|
||||
|
||||
for (i = 0; i < NUM_STARS; i++) {
|
||||
stars[i].z -= stars[i].speed;
|
||||
|
||||
if (stars[i].z <= 0)
|
||||
init_star(stars + i, i + 1);
|
||||
|
||||
short tempx = ((stars[i].x * 30) / stars[i].z) + centerx;
|
||||
short tempy = ((stars[i].y * 30) / stars[i].z) + centery;
|
||||
|
||||
if (tempx < 0 || tempx > RESX - 1 || tempy < 0 || tempy > RESY - 1) {
|
||||
init_star(stars + i, i + 1);
|
||||
continue;
|
||||
}
|
||||
|
||||
lcdSetPixel(tempx, tempy, 1);
|
||||
if (stars[i].z < 50) {
|
||||
lcdSetPixel(tempx + 1, tempy, 1);
|
||||
}
|
||||
if (stars[i].z < 20) {
|
||||
lcdSetPixel(tempx, tempy + 1, 1);
|
||||
lcdSetPixel(tempx + 1, tempy + 1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
lcdRefresh();
|
||||
|
||||
delayms_queue_plus(50,0);
|
||||
}
|
||||
}
|
||||
|
||||
void init_star(s_star *star, int z)
|
||||
{
|
||||
star->x = (getRandom() % RESX) - (RESX >> 1);
|
||||
star->y = (getRandom() % RESY) - (RESY >> 1);
|
||||
star->z = z;
|
||||
star->speed = (getRandom() % 4) + 1;
|
||||
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue