Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Snake/Snake.cpp
- Committer:
- AhmedPlaymaker
- Date:
- 2019-04-10
- Revision:
- 25:e827f1a8fadc
- Parent:
- 24:1c118b071430
- Child:
- 30:461231877c89
File content as of revision 25:e827f1a8fadc:
#include "Snake.h"
Snake::Snake()
{
}
Snake::~Snake()
{
}
//The Snake Sprite.
int snake_sprite[3][3] = {
{0,1,0},
{1,0,1},
{0,1,0},
};
int m = 0; //Variable used to allow a starting location for the player.
void Snake::init()
{
_speed = 1;// change this according to the options selected
}
int Snake::draw(Gamepad &pad, N5110 &lcd, int length, int level)
{
if(m == 0){
_x[0] = WIDTH/2; //Spawns player sprite near the middle of the screen.
_y[0] = HEIGHT - 3;
for(int i=0; i<=13; i++) {
_x[i+1] = _x[i];
_y[i+1] = _y[i] - 3;
b[i] = 1;
}
b[14] = 1;
m = m+1;
}
//printf("SPRITE %d %d \n", _x[0], _y[0]);
if(length == 0) {
while ((pad.check_event(Gamepad::BACK_PRESSED) == false)) {
lcd.clear();
lcd.printString("Game",33,1);
lcd.printString("Over",33,3);
lcd.printString("Press Back",14,5); //Function used to promt the user to Restart.
lcd.refresh();
wait(0.1);
}
NVIC_SystemReset(); //Software Reset. //change this condition to loosing screen.
}
for(int a=1; a<=15; a++) {
if(length == a) {
for(int i=0; i<=a-1; i++) {
lcd.drawSprite(_x[i],_y[i],3,3,(int *)snake_sprite); //Function used to draw the sprite.
}
}
}
if(length > 15) {
lcd.clear();
lcd.printString("Level Complete",0,1);
lcd.printString("Press Start",10,3);
lcd.printString("to Proceed",12,4);
lcd.refresh();
while ( pad.check_event(Gamepad::START_PRESSED) == false) {
pad.leds_on();
pad.tone(rand()%1001,0.1); //helps to set max freq for random sound
wait(0.1);
pad.leds_off();
wait(0.1);
}
lcd.clear();
sprintf(bufferlevel,"%d",level);
lcd.printString("Level:",25,1);
lcd.printString(bufferlevel,40,3);
lcd.refresh();
wait(2);
length = 3;
}
return length;
}
Vector2D Snake::get_pos(int length)
{
for(int i=1; i<=15; i++) {
if(length == i) {
Vector2D snakepos = {_x[i-1],_y[i-1]}; //Obtains the snake position.
return snakepos;
}
}
Vector2D snakepos = {-20,-20}; //Obtains the snake position.
return snakepos;
//printf("snakepos from player = %f %f \n", snakepos.x, snakepos.y);
}
Vector2D Snake::get_pos_before1(int length) //this sends data of following sprites.
{
for(int i=2; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b1 = {_x[i-2],_y[i-2]}; //Obtains the snake position.
return snakepos_b1;
}
}
Vector2D snakepos_b1 = {-20,-20}; //Obtains the snake position.
return snakepos_b1;
//printf("snakepos_b1 from player = %f %f \n", snakepos_b1.x, snakepos_b1.y);
}
Vector2D Snake::get_pos_before2(int length) //this sends data of following sprites.
{
for(int i=3; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b2 = {_x[i-3],_y[i-3]}; //Obtains the snake position.
return snakepos_b2;
}
}
Vector2D snakepos_b2 = {-20,-20}; //Obtains the snake position.
return snakepos_b2;
//printf("snakepos_b2 from player = %f %f \n", snakepos_b2.x, snakepos_b2.y);
}
Vector2D Snake::get_pos_before3(int length) //this sends data of following sprites.
{
for(int i=4; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b3 = {_x[i-4],_y[i-4]}; //Obtains the snake position.
return snakepos_b3;
}
}
Vector2D snakepos_b3 = {-20,-20}; //Obtains the snake position.
return snakepos_b3;
//printf("snakepos_b3 from player = %f %f \n", snakepos_b3.x, snakepos_b3.y);
}
Vector2D Snake::get_pos_before4(int length) //this sends data of following sprites.
{
for(int i=5; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b4 = {_x[i-5],_y[i-5]}; //Obtains the snake position.
return snakepos_b4;
}
}
Vector2D snakepos_b4 = {-20,-20}; //Obtains the snake position.
return snakepos_b4;
//printf("snakepos_b4 from player = %f %f \n", snakepos_b4.x, snakepos_b4.y);
}
Vector2D Snake::get_pos_before5(int length) //this sends data of following sprites.
{
for(int i=6; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b5 = {_x[i-6],_y[i-6]}; //Obtains the snake position.
return snakepos_b5;
}
}
Vector2D snakepos_b5 = {-20,-20}; //Obtains the snake position.
return snakepos_b5;
//printf("snakepos_b5 from player = %f %f \n", snakepos_b5.x, snakepos_b5.y);
}
Vector2D Snake::get_pos_before6(int length) //this sends data of following sprites.
{
for(int i=7; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b6 = {_x[i-7],_y[i-7]}; //Obtains the snake position.
return snakepos_b6;
}
}
Vector2D snakepos_b6 = {-20,-20}; //Obtains the snake position.
return snakepos_b6;
//printf("snakepos_b6 from player = %f %f \n", snakepos_b6.x, snakepos_b6.y);
}
Vector2D Snake::get_pos_before7(int length) //this sends data of following sprites.
{
for(int i=8; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b7 = {_x[i-8],_y[i-8]}; //Obtains the snake position.
return snakepos_b7;
}
}
Vector2D snakepos_b7 = {-20,-20}; //Obtains the snake position.
return snakepos_b7;
//printf("snakepos_b7 from player = %f %f \n", snakepos_b7.x, snakepos_b7.y);
}
Vector2D Snake::get_pos_before8(int length) //this sends data of following sprites.
{
for(int i=9; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b8 = {_x[i-9],_y[i-9]}; //Obtains the snake position.
return snakepos_b8;
}
}
Vector2D snakepos_b8 = {-20,-20}; //Obtains the snake position.
return snakepos_b8;
//printf("snakepos_b8 from player = %f %f \n", snakepos_b8.x, snakepos_b8.y);
}
Vector2D Snake::get_pos_before9(int length) //this sends data of following sprites.
{
for(int i=10; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b9 = {_x[i-10],_y[i-10]}; //Obtains the snake position.
return snakepos_b9;
}
}
Vector2D snakepos_b9 = {-20,-20}; //Obtains the snake position.
return snakepos_b9;
//printf("snakepos_b9 from player = %f %f \n", snakepos_b9.x, snakepos_b9.y);
}
Vector2D Snake::get_pos_before10(int length) //this sends data of following sprites.
{
for(int i=11; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b10 = {_x[i-11],_y[i-11]}; //Obtains the snake position.
return snakepos_b10;
}
}
Vector2D snakepos_b10 = {-20,-20}; //Obtains the snake position.
return snakepos_b10;
//printf("snakepos_b10 from player = %f %f \n", snakepos_b10.x, snakepos_b10.y);
}
Vector2D Snake::get_pos_before11(int length) //this sends data of following sprites.
{
for(int i=12; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b11 = {_x[i-12],_y[i-12]}; //Obtains the snake position.
return snakepos_b11;
}
}
Vector2D snakepos_b11 = {-20,-20}; //Obtains the snake position.
return snakepos_b11;
//printf("snakepos_b11 from player = %f %f \n", snakepos_b11.x, snakepos_b11.y);
}
Vector2D Snake::get_pos_before12(int length) //this sends data of following sprites.
{
for(int i=13; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b12 = {_x[i-13],_y[i-13]}; //Obtains the snake position.
return snakepos_b12;
}
}
Vector2D snakepos_b12 = {-20,-20}; //Obtains the snake position.
return snakepos_b12;
//printf("snakepos_b12 from player = %f %f \n", snakepos_b12.x, snakepos_b12.y);
}
Vector2D Snake::get_pos_before13(int length) //this sends data of following sprites.
{
for(int i=14; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b13 = {_x[i-14],_y[i-14]}; //Obtains the snake position.
return snakepos_b13;
}
}
Vector2D snakepos_b13 = {-20,-20}; //Obtains the snake position.
return snakepos_b13;
//printf("snakepos_b13 from player = %f %f \n", snakepos_b13.x, snakepos_b13.y);
}
Vector2D Snake::get_pos_before14(int length) //this sends data of following sprites.
{
for(int i=15; i<=15; i++) {
if(length == i) {
Vector2D snakepos_b14 = {_x[i-15],_y[i-15]}; //Obtains the snake position.
return snakepos_b14;
}
}
Vector2D snakepos_b14 = {-20,-20}; //Obtains the snake position.
return snakepos_b14;
//printf("snakepos_b14 from player = %f %f \n", snakepos_b14.x, snakepos_b14.y);
}
void Snake::update(Direction d,float mag,int length, int speed, int* b)
{
_speed = speed; //Speed changes depending on how much you push the joystick.(As Of Now)
//this makes all of the snake beeds chained together by making the lower ones drag towards where the top one was in the previous loop
for(int i=0; i<=13; i++) {
if(length > i+1) {
if ((_x[i] > _x[i+1])&&(b[i+1] == 1)&&(b[i] == 1)) {
_x[i]-=_speed;
}
if ((_x[i] < _x[i+1])&&(b[i+1] == 1)&&(b[i] == 1)) {
_x[i]+=_speed;
}
}
}
//this makes the controls of W/E directions only exclusive to the top beed in the snake
for(int i=14; i>=0; i--) {
if((length == i+1)&&(b[i] == 1)) {
if (d == E) {
_x[i]+= _speed;
}
if (d == W) {
_x[i]-= _speed;
}
}
}
// the following makes sure that when the length is increased, the snake stays where it was when it ate food.
for(int i=3; i<=15; i++) {
if(length < 2) {
_x[1] = _x[0];
}
else if(length < i) {
_x[i-1] = _x[i-2];
}
}
//Limits set so that the snake does not travel off the screen.
for(int i=0; i<=14; i++) {
if (_x[i] <= 0) {
_x[i] = 0;
}
if (_x[i] > 81) {
_x[i] = 81;
}
}
}