ELEC2645 (2018/19) / Mbed 2 deprecated el18jz_

Dependencies:   mbed

Committer:
jiaxinZHOU
Date:
Thu May 09 02:37:14 2019 +0000
Revision:
4:0f2006e9c8f8
Parent:
0:07c4fef6c0af
final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jiaxinZHOU 0:07c4fef6c0af 1 #include "Move.h"
jiaxinZHOU 0:07c4fef6c0af 2
jiaxinZHOU 0:07c4fef6c0af 3
jiaxinZHOU 0:07c4fef6c0af 4 SnakeBody body;
jiaxinZHOU 0:07c4fef6c0af 5 Food food;
jiaxinZHOU 0:07c4fef6c0af 6
jiaxinZHOU 0:07c4fef6c0af 7 Move::Move() {
jiaxinZHOU 0:07c4fef6c0af 8
jiaxinZHOU 0:07c4fef6c0af 9 }
jiaxinZHOU 0:07c4fef6c0af 10
jiaxinZHOU 0:07c4fef6c0af 11 Move::~Move() {
jiaxinZHOU 0:07c4fef6c0af 12
jiaxinZHOU 0:07c4fef6c0af 13 }
jiaxinZHOU 0:07c4fef6c0af 14
jiaxinZHOU 0:07c4fef6c0af 15 void Move::initial() {
jiaxinZHOU 0:07c4fef6c0af 16 _x = 42;
jiaxinZHOU 0:07c4fef6c0af 17 _y = 24;
jiaxinZHOU 0:07c4fef6c0af 18 _length = 5;
jiaxinZHOU 0:07c4fef6c0af 19 body._dir = 1;// 1 for E, 2 for S, 3 for W, 4 for N
jiaxinZHOU 0:07c4fef6c0af 20 for (int i =0; i < _length ; i++){
jiaxinZHOU 0:07c4fef6c0af 21 body._xx[i]= _x - 8 + 2 * i;
jiaxinZHOU 0:07c4fef6c0af 22 body._yy[i]= _y ;
jiaxinZHOU 0:07c4fef6c0af 23 }
jiaxinZHOU 0:07c4fef6c0af 24
jiaxinZHOU 0:07c4fef6c0af 25 food.a= 0;
jiaxinZHOU 0:07c4fef6c0af 26 food.b= 0;
jiaxinZHOU 0:07c4fef6c0af 27
jiaxinZHOU 0:07c4fef6c0af 28
jiaxinZHOU 0:07c4fef6c0af 29 }
jiaxinZHOU 0:07c4fef6c0af 30
jiaxinZHOU 0:07c4fef6c0af 31 void Move::getfood(){
jiaxinZHOU 0:07c4fef6c0af 32 srand(time(NULL));
jiaxinZHOU 0:07c4fef6c0af 33 food.a = rand() % 40 +1;
jiaxinZHOU 0:07c4fef6c0af 34 food.b = rand() % 22 +1;
jiaxinZHOU 0:07c4fef6c0af 35 }
jiaxinZHOU 0:07c4fef6c0af 36
jiaxinZHOU 0:07c4fef6c0af 37 void Move::updatebody() {
jiaxinZHOU 0:07c4fef6c0af 38
jiaxinZHOU 0:07c4fef6c0af 39 //if (_d != CENTRE){
jiaxinZHOU 0:07c4fef6c0af 40 for (int i =0; i < _length - 1; i++){
jiaxinZHOU 0:07c4fef6c0af 41 body._xx[i] = body._xx[i + 1];
jiaxinZHOU 0:07c4fef6c0af 42 body._yy[i] = body._yy[i + 1];
jiaxinZHOU 0:07c4fef6c0af 43 }
jiaxinZHOU 0:07c4fef6c0af 44 body._xx[_length - 1] = _x;
jiaxinZHOU 0:07c4fef6c0af 45 body._yy[_length - 1] = _y;
jiaxinZHOU 0:07c4fef6c0af 46 //}
jiaxinZHOU 0:07c4fef6c0af 47 }
jiaxinZHOU 0:07c4fef6c0af 48 void Move::onlcd(N5110 &lcd) {
jiaxinZHOU 0:07c4fef6c0af 49
jiaxinZHOU 0:07c4fef6c0af 50 for (int i =0; i < _length; i++){
jiaxinZHOU 0:07c4fef6c0af 51 lcd.drawRect(body._xx[i],body._yy[i],2,2,FILL_BLACK);
jiaxinZHOU 0:07c4fef6c0af 52
jiaxinZHOU 0:07c4fef6c0af 53 }
jiaxinZHOU 0:07c4fef6c0af 54 lcd.drawRect(0,0,84,48,FILL_TRANSPARENT);
jiaxinZHOU 0:07c4fef6c0af 55 lcd.drawRect(1,1,82,46,FILL_TRANSPARENT);
jiaxinZHOU 0:07c4fef6c0af 56 lcd.drawRect(2*food.a, 2*food.b,2,2,FILL_BLACK);
jiaxinZHOU 0:07c4fef6c0af 57 }
jiaxinZHOU 0:07c4fef6c0af 58
jiaxinZHOU 4:0f2006e9c8f8 59 // This function control the dirction and the movement
jiaxinZHOU 0:07c4fef6c0af 60 void Move::update(Gamepad &pad) {
jiaxinZHOU 0:07c4fef6c0af 61 _d = pad.get_direction();
jiaxinZHOU 0:07c4fef6c0af 62
jiaxinZHOU 0:07c4fef6c0af 63 if (_d == N && body._dir != 2) {
jiaxinZHOU 0:07c4fef6c0af 64 body._dir = 4;
jiaxinZHOU 0:07c4fef6c0af 65 //_y-= 2;
jiaxinZHOU 0:07c4fef6c0af 66 } else if (_d == S && body._dir != 4) {
jiaxinZHOU 0:07c4fef6c0af 67 body._dir = 2;
jiaxinZHOU 0:07c4fef6c0af 68 //_y+= 2;
jiaxinZHOU 0:07c4fef6c0af 69 } else if (_d == E && body._dir != 3) {
jiaxinZHOU 0:07c4fef6c0af 70 body._dir = 1;
jiaxinZHOU 0:07c4fef6c0af 71 //_x+= 2;
jiaxinZHOU 0:07c4fef6c0af 72 } else if (_d == W && body._dir != 1) {
jiaxinZHOU 0:07c4fef6c0af 73 body._dir = 3;
jiaxinZHOU 0:07c4fef6c0af 74 //_x-= 2;
jiaxinZHOU 0:07c4fef6c0af 75 }
jiaxinZHOU 0:07c4fef6c0af 76
jiaxinZHOU 0:07c4fef6c0af 77 if (body._dir == 4){
jiaxinZHOU 0:07c4fef6c0af 78 _y-= 2;
jiaxinZHOU 0:07c4fef6c0af 79 }else if (body._dir == 2) {
jiaxinZHOU 0:07c4fef6c0af 80 _y+= 2;
jiaxinZHOU 0:07c4fef6c0af 81 } else if (body._dir == 1) {
jiaxinZHOU 0:07c4fef6c0af 82 _x+= 2;
jiaxinZHOU 0:07c4fef6c0af 83 } else if (body._dir == 3) {
jiaxinZHOU 0:07c4fef6c0af 84 _x-= 2;
jiaxinZHOU 0:07c4fef6c0af 85 }
jiaxinZHOU 0:07c4fef6c0af 86 }
jiaxinZHOU 0:07c4fef6c0af 87
jiaxinZHOU 0:07c4fef6c0af 88 void Move::die(N5110 &lcd , Gamepad &pad) {
jiaxinZHOU 0:07c4fef6c0af 89 if(body._xx[_length - 1] == 0 || body._xx[_length - 1] == 82 || body._yy[_length - 1] == 0 || body._yy[_length - 1] == 46) {
jiaxinZHOU 0:07c4fef6c0af 90 lcd.init();
jiaxinZHOU 0:07c4fef6c0af 91 lcd.printString("Game Over",0,1);
jiaxinZHOU 0:07c4fef6c0af 92 char buffer1[14];
jiaxinZHOU 4:0f2006e9c8f8 93 sprintf(buffer1,"Your score:%2d",_length - 5);//As snake length will increase the same as score if one food
jiaxinZHOU 4:0f2006e9c8f8 94 lcd.printString(buffer1,0,2); //for 1 score, so i simpley use length to repersant score.
jiaxinZHOU 0:07c4fef6c0af 95 lcd.printString("Press Start", 0 , 3);
jiaxinZHOU 0:07c4fef6c0af 96 lcd.printString("to restart", 0 , 4);
jiaxinZHOU 0:07c4fef6c0af 97 lcd.refresh();
jiaxinZHOU 0:07c4fef6c0af 98 while ( pad.check_event(Gamepad::START_PRESSED) == false){
jiaxinZHOU 0:07c4fef6c0af 99 pad.leds_on();
jiaxinZHOU 0:07c4fef6c0af 100 wait(0.5);
jiaxinZHOU 0:07c4fef6c0af 101 pad.leds_off();
jiaxinZHOU 0:07c4fef6c0af 102 wait(0.5);
jiaxinZHOU 0:07c4fef6c0af 103 }
jiaxinZHOU 0:07c4fef6c0af 104 initial();
jiaxinZHOU 0:07c4fef6c0af 105 getfood();
jiaxinZHOU 4:0f2006e9c8f8 106 menu.menus(lcd,pad);
jiaxinZHOU 0:07c4fef6c0af 107 }
jiaxinZHOU 0:07c4fef6c0af 108
jiaxinZHOU 0:07c4fef6c0af 109 for (int i =0; i < _length - 2; i++) {
jiaxinZHOU 0:07c4fef6c0af 110 if (body._xx[_length - 1] == body._xx[i] && body._yy[_length - 1] == body._yy[i])
jiaxinZHOU 0:07c4fef6c0af 111 {
jiaxinZHOU 0:07c4fef6c0af 112 lcd.init();
jiaxinZHOU 0:07c4fef6c0af 113 lcd.printString("Game Over",0,1);
jiaxinZHOU 0:07c4fef6c0af 114 char buffer1[14];
jiaxinZHOU 0:07c4fef6c0af 115 sprintf(buffer1,"Your score:%2d",_length - 5);
jiaxinZHOU 0:07c4fef6c0af 116 lcd.printString(buffer1,0,2);
jiaxinZHOU 0:07c4fef6c0af 117 lcd.printString("Press Start", 0 , 3);
jiaxinZHOU 0:07c4fef6c0af 118 lcd.printString("to restart", 0 , 4);
jiaxinZHOU 0:07c4fef6c0af 119 lcd.refresh();
jiaxinZHOU 0:07c4fef6c0af 120 while ( pad.check_event(Gamepad::START_PRESSED) == false){
jiaxinZHOU 0:07c4fef6c0af 121 pad.leds_on();
jiaxinZHOU 0:07c4fef6c0af 122 wait(0.5);
jiaxinZHOU 0:07c4fef6c0af 123 pad.leds_off();
jiaxinZHOU 0:07c4fef6c0af 124 wait(0.5);
jiaxinZHOU 0:07c4fef6c0af 125 }
jiaxinZHOU 0:07c4fef6c0af 126 initial();
jiaxinZHOU 0:07c4fef6c0af 127 getfood();
jiaxinZHOU 4:0f2006e9c8f8 128 menu.menus(lcd,pad);
jiaxinZHOU 0:07c4fef6c0af 129 }
jiaxinZHOU 0:07c4fef6c0af 130 }
jiaxinZHOU 0:07c4fef6c0af 131 }
jiaxinZHOU 0:07c4fef6c0af 132
jiaxinZHOU 0:07c4fef6c0af 133 void Move::eatfood() {
jiaxinZHOU 0:07c4fef6c0af 134
jiaxinZHOU 0:07c4fef6c0af 135 if (body._xx[_length - 1] == 2 * food.a && body._yy[_length - 1] == 2 * food.b){
jiaxinZHOU 0:07c4fef6c0af 136 _length = _length + 1;
jiaxinZHOU 0:07c4fef6c0af 137 body._xx[_length - 1] = 2 * food.a;
jiaxinZHOU 0:07c4fef6c0af 138 body._yy[_length - 1] = 2 * food.b;
jiaxinZHOU 0:07c4fef6c0af 139 getfood();
jiaxinZHOU 0:07c4fef6c0af 140 }
jiaxinZHOU 0:07c4fef6c0af 141 }