Final Submission. I have read and agreed with Statement of Academic Integrity.
Dependencies: mbed Gamepad N5110 Joystick
Game_engine/Game_engine.cpp
- Committer:
- el16dlc
- Date:
- 2019-05-09
- Revision:
- 8:264398d3c610
- Parent:
- 7:72119ea3b3b1
- Child:
- 9:a7ea33e6bd82
File content as of revision 8:264398d3c610:
#include "Game_engine.h" #include "Snake.h" GameEngine::GameEngine() { } GameEngine::~GameEngine() { } Snake snake; void GameEngine::direction_reset() { _direction = 0; } void GameEngine::init() { snake.init(); _game_cont = true; snake.set_food_posX((rand()%(19) + 1) * 4); snake.set_food_posY((rand()%(11) + 1) * 4 - 2); _body_seg = 1; _direction = 0; } void GameEngine::draw(N5110 &lcd) { lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT); // Draws screen limits snake.draw_head(lcd); snake.draw_food(lcd); } void GameEngine::get_dir(Gamepad &gamepad) { if ( gamepad.check_event(Gamepad::Y_PRESSED) && _direction != 1) { _direction = 0; } else if ( gamepad.check_event(Gamepad::A_PRESSED) && _direction != 0) { _direction = 1; } else if ( gamepad.check_event(Gamepad::X_PRESSED) && _direction != 3) { _direction = 2; } else if ( gamepad.check_event(Gamepad::B_PRESSED) && _direction != 2) { _direction = 3; } } void GameEngine::snake_move() { if (_direction == 0) { snake.set_snake_posY (snake.get_snake_posY()- 4); } else if (_direction == 1) { snake.set_snake_posY (snake.get_snake_posY()+ 4); } else if (_direction == 2) { snake.set_snake_posX (snake.get_snake_posX()- 4); } else if (_direction == 3) { snake.set_snake_posX (snake.get_snake_posX()+ 4); } } void GameEngine::food_move() { srand(time(NULL)); _food_reset = true; if(snake.get_snake_posX() == snake.get_food_posX() && snake.get_snake_posY() == snake.get_food_posY()) { snake.set_food_posX((rand()%(19) + 1) * 4); snake.set_food_posY((rand()%(11) + 1) * 4 - 2); while(_food_reset == true) { _food_reset = false; for (int k = _body_seg; k > 0; k--) { if((_body_posX[k] == snake.get_food_posX() && _body_posY[k] == snake.get_food_posY()) || (snake.get_snake_posX() == snake.get_food_posX() && snake.get_snake_posY() == snake.get_food_posY())) { snake.set_food_posX((rand()%(19) + 1) * 4); snake.set_food_posY((rand()%(11) + 1) * 4 - 2); _food_reset = true; } } } _body_seg = _body_seg + 1; } } void GameEngine::snake_body(N5110 &lcd) { _body_posX[0] = snake.get_snake_posX(); _body_posY[0] = snake.get_snake_posY(); for (int j = _body_seg; j > 0; j--) { lcd.drawRect(_body_posX[j],_body_posY[j],4,4,FILL_BLACK); _body_posX[j] = _body_posX[j-1]; _body_posY[j] = _body_posY[j-1]; } } void GameEngine::check_wall_collision() { if (snake.get_snake_posX() == 0 || snake.get_snake_posX() > 80 || snake.get_snake_posY() < 0 || snake.get_snake_posY() > 44) { _game_cont = false; } } void GameEngine::check_snake_collision() { for (int i = _body_seg; i > 1; i--) { if (_body_posX[i] == snake.get_snake_posX() && _body_posY[i] == snake.get_snake_posY()) { _game_cont = false; } } } // accessors bool GameEngine::get_game_cont() { return _game_cont; } int GameEngine::get_direction() { return _direction; }