Yunting Zou 201199716

Dependencies:   mbed MotionSensor

viper/viper.h

Committer:
zhouyun123
Date:
2020-05-14
Revision:
0:047e14f53977
Child:
1:9a8033d80067

File content as of revision 0:047e14f53977:

#include <stdio.h>
#include <time.h>
#include "mbed.h"
#include "Gamepad.h"
#include "N5110.h"
#define length 80
/** main Class
@author Zou yunting, University of Leeds
@brief used to set the lparameters of the snake and the food
@15th May 2020
**/

/** objects **/ 
N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
Gamepad pad;
 
/**STRUCTURE**/
struct vip {      
    int x;
    int y;    
}COOR;
 
struct Serpent {
    vip head[length]; //set the length of the viper
    int n;   //number of snake's section  
}SER;
struct target{
   vip var;//set the variable of target
}target;
 


void viper();
void Movement();     //@set the direction control of the snake
void goal();         //@set the target food
void gameover();     //@set the failure screen
float wtime;         //@related to the speed of the snake
int score ;
int HP;              //@ Snake's health point(HP), if HP=0, game over.
int D;               //@set the variable of direction
int d;               //@set the variable of the joystick
 
 // @define the location of the snake       1
 void defineSnake(){
     for(int i = 1; i < SER.n; i++){
         SER.head[i].x = SER.head[i-1].x;
         SER.head[i].y = SER.head[i-1].y-1;//draw snake from top to bottom
         }
     }

 
//@show a snake by creating array          2
void viper()
{
        
        for(int i = 0; i < SER.n; i++){
        lcd.drawRect(SER.head[i].x,SER.head[i].y,1,1,FILL_TRANSPARENT);
        }
           
}
 
 
//@implement the movement function              3
void Movement()
{
    d = pad.get_direction();//@use joystick to control the direction of snake
    if (d == N ){
        D = 1;//up
        }
    else if ( d == S ){
        D = 2;//down
        }
    else if (d == W ){
        D = 3;//left
        }
    else if ( d == E ){
        D = 4;//right
        }
//@add or substract the array to move the snake in x,y axis
    for(int i = SER.n; i >0; i--){
        SER.head[i].x = SER.head[i-1].x;
        SER.head[i].y = SER.head[i-1].y;
        }
    //@let snake move for different direction
    if (D == 1 ){
        SER.head[0].x = SER.head[0].x;
        SER.head[0].y = SER.head[0].y-1;
        }//@turn upwards
    else if (D == 2 ){
        SER.head[0].x = SER.head[0].x;
        SER.head[0].y = SER.head[0].y+1;
        }//@turn downwards
    else if (D == 3 ){
        SER.head[0].x = SER.head[0].x-1;
        SER.head[0].y = SER.head[0].y;
        }//@turn left
    else if (D == 4 ){
        SER.head[0].x = SER.head[0].x+1;
        SER.head[0].y = SER.head[0].y;
        }//@turn right
    
 }


//@generate a random target                   4           
void goal(){
    srand(unsigned (time(NULL)));
    target.var.x = rand() % 80; // The target appears at random location
    target.var.y = rand() % 40;
    
    }
    
    
// @if snake get the target, change the length and the score                6
void gettarget(){
//juge if snake eat food
    if(SER.head[0].x == target.var.x && SER.head[0].y == target.var.y ){
        SER.n = SER.n+7;
       goal();//@generate a new target when the previous target has been eaten
       pad.tone(650,1);// @sounds
       score += 1;// @when the snake get its target, the score plus one
        }
    }