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.
Dependencies: mbed
move/Move.cpp@4:0f2006e9c8f8, 2019-05-09 (annotated)
- Committer:
- jiaxinZHOU
- Date:
- Thu May 09 02:37:14 2019 +0000
- Revision:
- 4:0f2006e9c8f8
- Parent:
- 0:07c4fef6c0af
final
Who changed what in which revision?
User | Revision | Line number | New 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 | } |