function _processGameEnd() internal returns(bool) {
        
        if (!gameStates[gameIndex].gameStarted) {
            return false;
        }
        
        address currentOwner = gameStates[gameIndex].identifierToOwner[gameStates[gameIndex].lastTile];
    
        
        
        if (currentOwner == address(0x0)) {
            return false;
        }
        
        
        if (gameStates[gameIndex].penultimateTileTimeout >= block.timestamp) {
            return false;
        }
        
        
        if (gameStates[gameIndex].prizePool > 0) {
            _sendFunds(currentOwner, gameStates[gameIndex].prizePool);
        }
        
        
        var (x, y) = identifierToCoordinate(gameStates[gameIndex].lastTile);
        
        
        End(gameIndex, currentOwner, gameStates[gameIndex].lastTile, x, y, gameStates[gameIndex].identifierToTimeoutTimestamp[gameStates[gameIndex].lastTile], gameStates[gameIndex].prizePool);
        
        
        gameIndex++;
        
        
        return true;
    }