int Game_Manager::count_neighbours(unsigned int i, unsigned int j, Caracteristic typeorzoneorheight, int value, bool diagonal) { int number = 0; if (i == 0 || j == 0 || j + 1 >= GRID_HEIGHT || i + 1 >= GRID_WIDTH) { return 0; //TODO handle this correctly } if (typeorzoneorheight == CRC_TYPE) { if (m_grid(i - 1, j).m_type == value) number++; if (m_grid(i, j + 1).m_type == value) number++; if (m_grid(i, j - 1).m_type == value) number++; if (m_grid(i + 1, j).m_type == value) number++; if (diagonal) //diagonal + sides { if (m_grid(i - 1, j + 1).m_type == value) number++; if (m_grid(i - 1, j - 1).m_type == value) number++; if (m_grid(i + 1, j + 1).m_type == value) number++; if (m_grid(i + 1, j - 1).m_type == value) number++; } } return number; }
std::vector<gns::point> local_map::get_points() const { std::vector<gns::point> out; for (unsigned int i = 0; i < m_grid.size(); i++) for (unsigned int j = 0; j < m_grid.size(); j++) if (m_grid(i, j) == cell::NONFREE) out.push_back(get_change().toPoint(pointi(i, j))); return out; }
// setGameOver() // Description: determine whether game is over and calculate score if it is void Game::setGameOver(){ if(m_grid.getEmptyBlkNo() > 0){ m_gameOver = FALSE; return; } for(int i = 0;i < GRID_LENGTH;i++){ for(int j = 0;j < GRID_LENGTH;j++){ if( (i < GRID_LENGTH - 1) && m_grid.canMerge(m_grid(i,j),m_grid(i+1,j)) ){ m_gameOver = FALSE; return; } if( (j < GRID_LENGTH - 1) && m_grid.canMerge(m_grid(i,j),m_grid(i,j+1)) ){ m_gameOver = FALSE; return; } } } m_gameOver = TRUE; m_score = m_grid.getScore(); }