void UpdateController::moveSnake(Snake &snake) { switch (input) { case KEY_LEFT: snake.movex(-1); break; case KEY_RIGHT: snake.movex(1); break; case KEY_UP: snake.movey(-1); break; case KEY_DOWN: snake.movey(1); break; default: snake.movex(1); } for ( auto iter = coins.begin(), endPtr = coins.end() ; iter != endPtr ; ++iter ) { if (snake.headLiesOn(iter->getxy())) { snake.grow(iter->getvalue()); coinMutex.lock(); *iter = Coin(getFreeCoord()); coinMutex.unlock(); break; } } auto head = snake.getHead(); if (snake.bitItself() || !map.contains(head) || snakeWallCollision()) { stop(); } }
int Map::addSnake(Snake &player) { std::vector<int>::iterator it; this->_map.assign((this->_x * this->_y), '.'); for (it = player.getHead(); it != player.getTail(); ++it) { if (this->_map[*it] == '.') it == player.getTail() - 1 ? this->_map[*it] = 'H' : this->_map[*it] = 'o'; else if (this->_map[*it] == 'H' || this->_map[*it] == 'o') { player.setCrash(); return (1); } } return (0); }