74 lines
1.3 KiB
C
74 lines
1.3 KiB
C
|
#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;
|
||
|
}
|
||
|
|