snake game completed with gameover frame and points
This commit is contained in:
@@ -15,7 +15,7 @@ byte frame[8][12] = {
|
|||||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint32_t game_over[] = {
|
const uint32_t frame_game_over[] = {
|
||||||
0x20410809,
|
0x20410809,
|
||||||
0x600600,
|
0x600600,
|
||||||
0x90108204,
|
0x90108204,
|
||||||
@@ -25,10 +25,6 @@ const uint32_t game_over[] = {
|
|||||||
int snake_x[96]= {4, 3, 2, 1};
|
int snake_x[96]= {4, 3, 2, 1};
|
||||||
int snake_y[96]= {3, 3, 3, 3};
|
int snake_y[96]= {3, 3, 3, 3};
|
||||||
int snake_len= 4;
|
int snake_len= 4;
|
||||||
//int *snake_x;
|
|
||||||
//int *snake_y;
|
|
||||||
//snake_x= (int *)malloc(snake_len * sizeof(int));
|
|
||||||
//snake_y= (int *)malloc(snake_len * sizeof(int));
|
|
||||||
|
|
||||||
char direction= 'r';
|
char direction= 'r';
|
||||||
|
|
||||||
@@ -38,6 +34,8 @@ int points= 0;
|
|||||||
int apple_x= 9;
|
int apple_x= 9;
|
||||||
int apple_y= 3;
|
int apple_y= 3;
|
||||||
|
|
||||||
|
int loop_delay= 300;
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
//Serial.begin(115200);
|
//Serial.begin(115200);
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
@@ -51,6 +49,8 @@ void setup() {
|
|||||||
pinMode(11, INPUT_PULLUP);
|
pinMode(11, INPUT_PULLUP);
|
||||||
// btn left
|
// btn left
|
||||||
pinMode(10, INPUT_PULLUP);
|
pinMode(10, INPUT_PULLUP);
|
||||||
|
|
||||||
|
randomSeed(analogRead(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_tail_block() {
|
void add_tail_block() {
|
||||||
@@ -61,35 +61,59 @@ void add_tail_block() {
|
|||||||
|
|
||||||
void eat_apple() {
|
void eat_apple() {
|
||||||
points++;
|
points++;
|
||||||
//XXX new apple coordinates
|
Serial.println(points);
|
||||||
|
// increase difficult each 5 apples
|
||||||
|
if (points % 5 == 0) loop_delay-= 50;
|
||||||
|
|
||||||
|
// generate new apple coordinates
|
||||||
frame[apple_y][apple_x]= 0;
|
frame[apple_y][apple_x]= 0;
|
||||||
apple_x= random(11);
|
apple_x= random(11);
|
||||||
apple_y= random(7);
|
apple_y= random(7);
|
||||||
frame[apple_y][apple_x]= 1;
|
frame[apple_y][apple_x]= 1;
|
||||||
|
|
||||||
|
// increase snake length
|
||||||
add_tail_block();
|
add_tail_block();
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_snake() {
|
void game_over() {
|
||||||
/*
|
// show gameover frame
|
||||||
starting from head, save curr position w and h
|
matrix.loadFrame(frame_game_over);
|
||||||
then for all the snake length the previuos
|
delay(1000);
|
||||||
body block needs to take the previous block place
|
|
||||||
the current tail pos will be set to 0
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
// show points inside the matrix
|
||||||
|
int i= 0;
|
||||||
|
int j= 0;
|
||||||
|
// clear the old frame
|
||||||
|
for (i=0; i < 12; i++) {
|
||||||
|
for (j=0; j < 8; j++) {
|
||||||
|
frame[j][i]= 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
matrix.renderBitmap(frame, 8, 12);
|
||||||
|
|
||||||
|
// show points
|
||||||
|
for (i=0; i < points; i++) {
|
||||||
|
frame[0][i]= 1;
|
||||||
|
matrix.renderBitmap(frame, 8, 12);
|
||||||
|
delay(100);
|
||||||
|
}
|
||||||
|
while (true) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
void move_snake() {
|
||||||
int i=0;
|
int i=0;
|
||||||
frame[snake_y[snake_len-1]][snake_x[snake_len-1]]= 0;
|
frame[snake_y[snake_len-1]][snake_x[snake_len-1]]= 0;
|
||||||
// move and render the snake tail
|
// move and render the snake tail
|
||||||
for (i= snake_len-1; i > 0; i--) {
|
for (i= snake_len-1; i > 0; i--) {
|
||||||
frame[snake_y[i-1]][snake_x[i-1]]= 1;
|
frame[snake_y[i-1]][snake_x[i-1]]= 1;
|
||||||
|
if (snake_x[0] == snake_x[i] && snake_y[0] == snake_y[i])
|
||||||
|
game_over();
|
||||||
snake_x[i]= snake_x[i-1];
|
snake_x[i]= snake_x[i-1];
|
||||||
snake_y[i]= snake_y[i-1];
|
snake_y[i]= snake_y[i-1];
|
||||||
}
|
}
|
||||||
|
|
||||||
//move the snake head
|
//move the snake head
|
||||||
|
|
||||||
//snake_y[0]= snake_y[0];
|
|
||||||
// go right
|
// go right
|
||||||
if (direction == 'r') {
|
if (direction == 'r') {
|
||||||
snake_x[0]+= 1;
|
snake_x[0]+= 1;
|
||||||
@@ -133,15 +157,8 @@ void change_direction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
Serial.println(points);
|
|
||||||
change_direction();
|
change_direction();
|
||||||
matrix.renderBitmap(frame, 8, 12);
|
matrix.renderBitmap(frame, 8, 12);
|
||||||
delay(300);
|
delay(loop_delay);
|
||||||
move_snake();
|
move_snake();
|
||||||
|
|
||||||
|
|
||||||
// XXX to remove, test only
|
|
||||||
//direction= 'b';
|
|
||||||
//eat_apple();
|
|
||||||
//add_tail_block();
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user