invader fixed
This commit is contained in:
parent
c257e09232
commit
6ce412b8d5
1 changed files with 146 additions and 67 deletions
213
src/main.cpp
213
src/main.cpp
|
@ -45,6 +45,8 @@ byte ledsData[8];
|
||||||
|
|
||||||
byte currentled = 0;
|
byte currentled = 0;
|
||||||
|
|
||||||
|
int stepcount = 0;
|
||||||
|
|
||||||
|
|
||||||
// low level functions
|
// low level functions
|
||||||
|
|
||||||
|
@ -83,25 +85,25 @@ void pushout() {
|
||||||
//byte invaderA0[11] = {112,24,125,182,188,60,188,182,125,24,112};
|
//byte invaderA0[11] = {112,24,125,182,188,60,188,182,125,24,112};
|
||||||
//byte invaderA1[11] = {14,24,189,118,60,60,60,118,189,24,14};
|
//byte invaderA1[11] = {14,24,189,118,60,60,60,118,189,24,14};
|
||||||
|
|
||||||
static byte invaderA0[8] = {152,92,182,95,95,182,92,152};
|
static byte invader_A0[8] = {152,92,182,95,95,182,92,152};
|
||||||
static byte invaderA1[8] = {88,188,22,63,63,22,188,88};
|
static byte invader_A1[8] = {88,188,22,63,63,22,188,88};
|
||||||
|
|
||||||
bool invaderread(int x, int y, bool invaderstate) {
|
bool invader_read(int x, int y, bool invader_state) {
|
||||||
if (invaderstate) {
|
if (invader_state) {
|
||||||
return bitRead(invaderA0[x],y);
|
return bitRead(invader_A0[x],y);
|
||||||
} else {
|
} else {
|
||||||
return bitRead(invaderA1[x],y);
|
return bitRead(invader_A1[x],y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawinvader(int xposition, int yposition, bool invaderstate) {
|
void invader_draw(int xposition, int yposition, bool invaderstate) {
|
||||||
for (int x=0; x<8; x++) {
|
for (int x=0; x<8; x++) {
|
||||||
int screenx = x+xposition;
|
int screenx = x+xposition;
|
||||||
if (screenx >=0 && screenx < 8) {
|
if (screenx >=0 && screenx < 8) {
|
||||||
for (int y=0; y<8; y++) {
|
for (int y=0; y<8; y++) {
|
||||||
int screeny = y+yposition;
|
int screeny = y+yposition;
|
||||||
if (screeny >=0 && screeny < 8) {
|
if (screeny >=0 && screeny < 8) {
|
||||||
if ( invaderread(x,y,invaderstate) ) {
|
if ( invader_read(x,y,invaderstate) ) {
|
||||||
writexy(screenx,screeny);
|
writexy(screenx,screeny);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,15 +113,40 @@ void drawinvader(int xposition, int yposition, bool invaderstate) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
byte currentcol=1;
|
byte invader_currentcol=1;
|
||||||
bool direction = true;
|
bool invader_direction = true;
|
||||||
|
|
||||||
int invaderstart = -12;
|
int invader_start = -12;
|
||||||
int invaderend = 8;
|
int invader_end = 8;
|
||||||
int invaderposition = invaderstart;
|
int invader_position = invader_start;
|
||||||
bool invaderstate = true;
|
bool invader_state = true;
|
||||||
|
|
||||||
int statecount = 0;
|
int invader_statecount = 0;
|
||||||
|
|
||||||
|
void invader_setup() {
|
||||||
|
invader_state = true;
|
||||||
|
stepcount = 0;
|
||||||
|
invader_statecount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void invader_step() {
|
||||||
|
invader_draw(0,0, invader_state);
|
||||||
|
|
||||||
|
pushout();
|
||||||
|
|
||||||
|
invader_state = !invader_state;
|
||||||
|
stepcount++;
|
||||||
|
invader_statecount++;
|
||||||
|
|
||||||
|
if (invader_statecount >=4) {
|
||||||
|
invader_position++;
|
||||||
|
if (invader_position >=invader_end) {
|
||||||
|
invader_position = invader_start;
|
||||||
|
}
|
||||||
|
invader_statecount = 0;
|
||||||
|
}
|
||||||
|
delay(600);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Game of life
|
// Game of life
|
||||||
|
@ -285,10 +312,76 @@ void gol_step() {
|
||||||
delay(200);
|
delay(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pattern 1
|
||||||
|
|
||||||
|
int pattern_state = 0;
|
||||||
|
bool pattern_direction = true;
|
||||||
|
|
||||||
|
void pattern1_setup() {
|
||||||
|
stepcount = 0;
|
||||||
|
pattern_state = 0;
|
||||||
|
pattern_direction = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pattern1_step() {
|
||||||
|
// x-line
|
||||||
|
for(byte i=0; i<8; i++) {
|
||||||
|
writexy(i,pattern_state);
|
||||||
|
}
|
||||||
|
// y line
|
||||||
|
for(byte i=0; i<8; i++) {
|
||||||
|
writexy(pattern_state,i);
|
||||||
|
}
|
||||||
|
if(pattern_direction) {
|
||||||
|
pattern_state++;
|
||||||
|
} else {
|
||||||
|
pattern_state--;
|
||||||
|
}
|
||||||
|
if (pattern_state >=8) {
|
||||||
|
pattern_state = 6;
|
||||||
|
pattern_direction = false;
|
||||||
|
}
|
||||||
|
if (pattern_state <0) {
|
||||||
|
pattern_state=1;
|
||||||
|
pattern_direction = true;
|
||||||
|
}
|
||||||
|
pushout();
|
||||||
|
|
||||||
|
stepcount++;
|
||||||
|
delay(120);
|
||||||
|
}
|
||||||
|
|
||||||
|
// pattern 2
|
||||||
|
|
||||||
|
void pattern2_setup() {
|
||||||
|
stepcount = 0;
|
||||||
|
pattern_state = 0;
|
||||||
|
pattern_direction = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pattern2_step() {
|
||||||
|
for (int i=pattern_state; i < 8-pattern_state; i++) {
|
||||||
|
writexy(pattern_state,i);
|
||||||
|
writexy(i,pattern_state);
|
||||||
|
writexy(7-pattern_state,i);
|
||||||
|
writexy(i,7-pattern_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
pattern_state++;
|
||||||
|
if(pattern_state>=4) {
|
||||||
|
pattern_state= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pushout();
|
||||||
|
|
||||||
|
stepcount++;
|
||||||
|
delay(800);
|
||||||
|
}
|
||||||
|
|
||||||
// main loop
|
// main loop
|
||||||
|
|
||||||
int mode = 0;
|
int mode = 0;
|
||||||
#define NRMODES 3
|
#define NRMODES 6
|
||||||
|
|
||||||
void switchmode( ){
|
void switchmode( ){
|
||||||
mode = random(NRMODES);
|
mode = random(NRMODES);
|
||||||
|
@ -306,11 +399,22 @@ void switchmode( ){
|
||||||
gol_stepcount = 0;
|
gol_stepcount = 0;
|
||||||
gol_setup_spaceship();
|
gol_setup_spaceship();
|
||||||
break;
|
break;
|
||||||
|
case 3: // spaceinvader
|
||||||
|
stepcount = 0;
|
||||||
|
invader_setup();
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
stepcount = 0;
|
||||||
|
pattern1_setup();
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
stepcount = 0;
|
||||||
|
pattern2_setup();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
clear();
|
clear();
|
||||||
|
|
||||||
|
@ -320,13 +424,28 @@ void loop() {
|
||||||
case 0: // game of life
|
case 0: // game of life
|
||||||
case 1:
|
case 1:
|
||||||
case 2:
|
case 2:
|
||||||
if (gol_stepcount >100) {
|
if (gol_stepcount >150) {
|
||||||
switchmode();
|
switchmode();
|
||||||
}
|
}
|
||||||
if (gol_deadcount > 12) {
|
if (gol_deadcount > 12) {
|
||||||
switchmode();
|
switchmode();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 3: // spaceinvader
|
||||||
|
if (stepcount > 50) {
|
||||||
|
switchmode();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if (stepcount > 100) {
|
||||||
|
switchmode();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
if (stepcount > 40) {
|
||||||
|
switchmode();
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(mode) {
|
switch(mode) {
|
||||||
|
@ -335,55 +454,15 @@ void loop() {
|
||||||
case 2:
|
case 2:
|
||||||
gol_step();
|
gol_step();
|
||||||
break;
|
break;
|
||||||
|
case 3: // spaceinvader
|
||||||
|
invader_step();
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
pattern1_step();
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
pattern2_step();
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
// x-line
|
|
||||||
for(byte i=0; i<8; i++) {
|
|
||||||
writexy(i,currentcol-1);
|
|
||||||
}
|
|
||||||
// y line
|
|
||||||
for(byte i=0; i<8; i++) {
|
|
||||||
writexy(currentcol-1,i);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* invaders
|
|
||||||
|
|
||||||
drawinvader(0,0, invaderstate);
|
|
||||||
|
|
||||||
pushout();
|
|
||||||
|
|
||||||
invaderstate = !invaderstate;
|
|
||||||
statecount++;
|
|
||||||
|
|
||||||
if (statecount >=4) {
|
|
||||||
invaderposition++;
|
|
||||||
if (invaderposition >=invaderend) {
|
|
||||||
invaderposition = invaderstart;
|
|
||||||
}
|
|
||||||
statecount = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
invaders end */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
if(direction) {
|
|
||||||
currentcol++;
|
|
||||||
} else {
|
|
||||||
currentcol--;
|
|
||||||
}
|
|
||||||
if (currentcol >8) {
|
|
||||||
currentcol = 7;
|
|
||||||
direction = false;
|
|
||||||
}
|
|
||||||
if (currentcol <=0) {
|
|
||||||
currentcol=2;
|
|
||||||
direction = true;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue