Wang Lin 201090174

Dependencies:   mbed Gamepad N5110 FXOS8700Q

main.h

Committer:
a1115921303
Date:
2019-05-03
Revision:
12:121ba031343a
Child:
13:febf9fbb502f

File content as of revision 12:121ba031343a:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "mbed.h"
#include "Gamepad.h"
#include "N5110.h"
#define length 100
#define SNAKE_SIZE 2 
 
N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
Gamepad pad;
 
//////////STRUCTURE///////////////
struct Coor {
    int x;
    int y;    
}COOR;
 
struct Snake {
    Coor snakezb[length]; //蛇每一届的坐标 蛇最大的长度
    int n;   //number of snake points 当前节数        
}SNAKE;
struct Food{
   Coor fc;
}food;
 

 
 
 
 
 
 
 
 

void DrawSnake();
//void DirSnake();
void MoveSnake();
int Dir;
void RespawnFood();
//void EatFood();
//void BreakSnake();
//void OverSnake();
//void Speed();
int waittime;
Direction d;
 
 

 

 
 
 
 void initSnake(){
     for(int i = 1; i < SNAKE.n; i++){
         SNAKE.snakezb[i].x = SNAKE.snakezb[i-1].x;
         SNAKE.snakezb[i].y = SNAKE.snakezb[i-1].y-1;
         }
     }

 
void DrawSnake()
{
        
        for(int i = 0; i < SNAKE.n; i++){
        lcd.drawRect(SNAKE.snakezb[i].x,SNAKE.snakezb[i].y,1,1,FILL_BLACK);
        }
    
    
}
 
void MoveSnake()
{
    d = pad.get_direction();
    if (pad.check_event(Gamepad::Y_PRESSED) || d == N){
        Dir = 1;//up
        }
    else if (pad.check_event(Gamepad::A_PRESSED) || d == S){
        Dir = 2;//down
        }
    else if (pad.check_event(Gamepad::X_PRESSED) || d == W){
        Dir = 3;//left
        }
    else if (pad.check_event(Gamepad::B_PRESSED) || d == E){
        Dir = 4;//right
        }
        
    for(int i = SNAKE.n; i >0; i--){
        SNAKE.snakezb[i].x = SNAKE.snakezb[i-1].x;
        SNAKE.snakezb[i].y = SNAKE.snakezb[i-1].y;
        }
    if (Dir == 1){
        SNAKE.snakezb[0].x = SNAKE.snakezb[0].x;
        SNAKE.snakezb[0].y = SNAKE.snakezb[0].y-1;
        }
    else if (Dir == 2){
        SNAKE.snakezb[0].x = SNAKE.snakezb[0].x;
        SNAKE.snakezb[0].y = SNAKE.snakezb[0].y+1;
        }
    else if (Dir == 3){
        SNAKE.snakezb[0].x = SNAKE.snakezb[0].x-1;
        SNAKE.snakezb[0].y = SNAKE.snakezb[0].y;
        }
    else if (Dir == 4){
        SNAKE.snakezb[0].x = SNAKE.snakezb[0].x+1;
        SNAKE.snakezb[0].y = SNAKE.snakezb[0].y;
        }
    
 }

void SpwanFood(){
    srand(unsigned (time(NULL)));
    food.fc.x = rand() % 80;
    food.fc.y = rand() % 40;
    
    
    
    
    }
void drawFood(){
    lcd.drawRect(food.fc.x,food.fc.y,1,1,FILL_BLACK);
    }
void EatFood(){

    if(SNAKE.snakezb[0].x == food.fc.x && SNAKE.snakezb[0].y == food.fc.y ){
        SNAKE.n = SNAKE.n+1;
       SpwanFood();
        }
    }
void DeadSnake(){
    
    }

 
void Speed()
{
    if(pad.check_event(Gamepad::L_PRESSED))
    {
      waittime = 0.05;
      wait(waittime);  
      }
    else if(pad.check_event(Gamepad::R_PRESSED))
    {
      waittime = 0.5;
      wait(waittime);  
      }
    else
    {
      wait(0.3);
      }    
}