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.cpp
00001 #include "Move.h" 00002 00003 00004 SnakeBody body; 00005 Food food; 00006 00007 Move::Move() { 00008 00009 } 00010 00011 Move::~Move() { 00012 00013 } 00014 00015 void Move::initial() { 00016 _x = 42; 00017 _y = 24; 00018 _length = 5; 00019 body._dir = 1;// 1 for E, 2 for S, 3 for W, 4 for N 00020 for (int i =0; i < _length ; i++){ 00021 body._xx[i]= _x - 8 + 2 * i; 00022 body._yy[i]= _y ; 00023 } 00024 00025 food.a= 0; 00026 food.b= 0; 00027 00028 00029 } 00030 00031 void Move::getfood(){ 00032 srand(time(NULL)); 00033 food.a = rand() % 40 +1; 00034 food.b = rand() % 22 +1; 00035 } 00036 00037 void Move::updatebody() { 00038 00039 //if (_d != CENTRE){ 00040 for (int i =0; i < _length - 1; i++){ 00041 body._xx[i] = body._xx[i + 1]; 00042 body._yy[i] = body._yy[i + 1]; 00043 } 00044 body._xx[_length - 1] = _x; 00045 body._yy[_length - 1] = _y; 00046 //} 00047 } 00048 void Move::onlcd(N5110 &lcd) { 00049 00050 for (int i =0; i < _length; i++){ 00051 lcd.drawRect(body._xx[i],body._yy[i],2,2,FILL_BLACK); 00052 00053 } 00054 lcd.drawRect(0,0,84,48,FILL_TRANSPARENT); 00055 lcd.drawRect(1,1,82,46,FILL_TRANSPARENT); 00056 lcd.drawRect(2*food.a, 2*food.b,2,2,FILL_BLACK); 00057 } 00058 00059 // This function control the dirction and the movement 00060 void Move::update(Gamepad &pad) { 00061 _d = pad.get_direction(); 00062 00063 if (_d == N && body._dir != 2) { 00064 body._dir = 4; 00065 //_y-= 2; 00066 } else if (_d == S && body._dir != 4) { 00067 body._dir = 2; 00068 //_y+= 2; 00069 } else if (_d == E && body._dir != 3) { 00070 body._dir = 1; 00071 //_x+= 2; 00072 } else if (_d == W && body._dir != 1) { 00073 body._dir = 3; 00074 //_x-= 2; 00075 } 00076 00077 if (body._dir == 4){ 00078 _y-= 2; 00079 }else if (body._dir == 2) { 00080 _y+= 2; 00081 } else if (body._dir == 1) { 00082 _x+= 2; 00083 } else if (body._dir == 3) { 00084 _x-= 2; 00085 } 00086 } 00087 00088 void Move::die(N5110 &lcd , Gamepad &pad) { 00089 if(body._xx[_length - 1] == 0 || body._xx[_length - 1] == 82 || body._yy[_length - 1] == 0 || body._yy[_length - 1] == 46) { 00090 lcd.init(); 00091 lcd.printString("Game Over",0,1); 00092 char buffer1[14]; 00093 sprintf(buffer1,"Your score:%2d",_length - 5);//As snake length will increase the same as score if one food 00094 lcd.printString(buffer1,0,2); //for 1 score, so i simpley use length to repersant score. 00095 lcd.printString("Press Start", 0 , 3); 00096 lcd.printString("to restart", 0 , 4); 00097 lcd.refresh(); 00098 while ( pad.check_event(Gamepad::START_PRESSED) == false){ 00099 pad.leds_on(); 00100 wait(0.5); 00101 pad.leds_off(); 00102 wait(0.5); 00103 } 00104 initial(); 00105 getfood(); 00106 menu.menus(lcd,pad); 00107 } 00108 00109 for (int i =0; i < _length - 2; i++) { 00110 if (body._xx[_length - 1] == body._xx[i] && body._yy[_length - 1] == body._yy[i]) 00111 { 00112 lcd.init(); 00113 lcd.printString("Game Over",0,1); 00114 char buffer1[14]; 00115 sprintf(buffer1,"Your score:%2d",_length - 5); 00116 lcd.printString(buffer1,0,2); 00117 lcd.printString("Press Start", 0 , 3); 00118 lcd.printString("to restart", 0 , 4); 00119 lcd.refresh(); 00120 while ( pad.check_event(Gamepad::START_PRESSED) == false){ 00121 pad.leds_on(); 00122 wait(0.5); 00123 pad.leds_off(); 00124 wait(0.5); 00125 } 00126 initial(); 00127 getfood(); 00128 menu.menus(lcd,pad); 00129 } 00130 } 00131 } 00132 00133 void Move::eatfood() { 00134 00135 if (body._xx[_length - 1] == 2 * food.a && body._yy[_length - 1] == 2 * food.b){ 00136 _length = _length + 1; 00137 body._xx[_length - 1] = 2 * food.a; 00138 body._yy[_length - 1] = 2 * food.b; 00139 getfood(); 00140 } 00141 }
Generated on Tue Jul 12 2022 22:27:32 by
1.7.2