def generateSlidingBlockGrid(size):
    
    grid = None
    
    grid = convertTupleToList(generateGrid(size, 0))
    goalBlock = generateGoalBlock(size)
#     grid = insertGoalBlockInEmptyGrid(goalBlock, grid)
    grid = insertGoalBlockInStartPosition(goalBlock, grid) #{DIFFICULT}
    
    i = 2
    while getSpaceNumber(grid) > max(getSize(goalBlock)[0], getSize(goalBlock)[1]) + size[0]: #{DIFFICULT}
#     while getSpaceNumber(grid) > (size[0]+size[1]):   
        newBlock = generateNonGoalBlock(size, i)
        if getInsertPosition(newBlock, grid) != (-1, -1):
            grid = insertNonGoalBlock(newBlock, grid, i)
        else:
            continue
        
        i += 1            
    
#     grid = performNSteps(grid, steps)

    if not checkIfGoalTileIsInUpperLeftHalfgrid(grid):
        return generateSlidingBlockGrid(size)
    else:
        return grid
def getInsertPosition(block, grid):
    (gridX, gridY) = getSize(grid)
    (blockX, blockY) = getSize(block)
    
    validPositions = []
    found = False
    for i in range(len(grid)):
        for j in range(len(grid[i])):
            if (grid[i][j] == 0):
                tempBool = True
                for k in range(blockX):
                    for l in range(blockY):
                        if i + k > gridX - 1 or j + l > gridY - 1:
                            tempBool = False
                            break
                        if grid[i + k][j + l] != 0:
                            tempBool = False
                            break
                        
                if tempBool:
                    validPositions.append((i, j))
                    found = True
    
                        
    if found:
        return random.choice(validPositions)
    else:
        return (-1 ,-1)
Ejemplo n.º 3
0
def getInsertPosition(block, grid):
    (gridX, gridY) = getSize(grid)
    (blockX, blockY) = getSize(block)

    validPositions = []
    found = False
    for i in range(len(grid)):
        for j in range(len(grid[i])):
            if (grid[i][j] == 0):
                tempBool = True
                for k in range(blockX):
                    for l in range(blockY):
                        if i + k > gridX - 1 or j + l > gridY - 1:
                            tempBool = False
                            break
                        if grid[i + k][j + l] != 0:
                            tempBool = False
                            break

                if tempBool:
                    validPositions.append((i, j))
                    found = True

    if found:
        return random.choice(validPositions)
    else:
        return (-1, -1)
def checkIfInsertionPossible(grid, block):
    (gridX, gridY) = getSize(grid)
    (blockX, blockY) = getSize(block)
    
    if insertNonGoalBlock(block, grid, 15) == (-1, -1):
        return False
    
    for i in range(len(grid)):
        for j in range(len(grid[i])):
            if (grid[i][j] == 0):
                tempBool = True
                for k in range(blockX):
                    if i + k > gridX - 1:
                        tempBool = False
                        break
                    if grid[i + k][j] != 0:
                        tempBool = False
                        break
                    
                for l in range(blockY):
                    if j + l > gridY - 1:
                        tempBool = False
                        break
                    if grid[i][j + l] != 0:
                        tempBool = False
                        break
                
                if tempBool:
                    return True
    
    
    
    return False
Ejemplo n.º 5
0
def generateSlidingBlockGrid(size):

    grid = None

    grid = convertTupleToList(generateGrid(size, 0))
    goalBlock = generateGoalBlock(size)
    #     grid = insertGoalBlockInEmptyGrid(goalBlock, grid)
    grid = insertGoalBlockInStartPosition(goalBlock, grid)  #{DIFFICULT}

    i = 2
    while getSpaceNumber(grid) > max(
            getSize(goalBlock)[0],
            getSize(goalBlock)[1]) + size[0]:  #{DIFFICULT}
        #     while getSpaceNumber(grid) > (size[0]+size[1]):
        newBlock = generateNonGoalBlock(size, i)
        if getInsertPosition(newBlock, grid) != (-1, -1):
            grid = insertNonGoalBlock(newBlock, grid, i)
        else:
            continue

        i += 1

#     grid = performNSteps(grid, steps)

    if not checkIfGoalTileIsInUpperLeftHalfgrid(grid):
        return generateSlidingBlockGrid(size)
    else:
        return grid
Ejemplo n.º 6
0
def checkIfInsertionPossible(grid, block):
    (gridX, gridY) = getSize(grid)
    (blockX, blockY) = getSize(block)

    if insertNonGoalBlock(block, grid, 15) == (-1, -1):
        return False

    for i in range(len(grid)):
        for j in range(len(grid[i])):
            if (grid[i][j] == 0):
                tempBool = True
                for k in range(blockX):
                    if i + k > gridX - 1:
                        tempBool = False
                        break
                    if grid[i + k][j] != 0:
                        tempBool = False
                        break

                for l in range(blockY):
                    if j + l > gridY - 1:
                        tempBool = False
                        break
                    if grid[i][j + l] != 0:
                        tempBool = False
                        break

                if tempBool:
                    return True

    return False
def insertGoalBlockInEmptyGrid(goalBlock, emptyGrid):
    emptyGrid = convertTupleToList(emptyGrid)
    
    for i in range(len(emptyGrid) - getSize(goalBlock)[0], len(emptyGrid)):
        for j in range (0, getSize(goalBlock)[1]):
            emptyGrid[i][j] = 1
            
    return convertListToTuple(emptyGrid)
Ejemplo n.º 8
0
def insertGoalBlockInEmptyGrid(goalBlock, emptyGrid):
    emptyGrid = convertTupleToList(emptyGrid)

    for i in range(len(emptyGrid) - getSize(goalBlock)[0], len(emptyGrid)):
        for j in range(0, getSize(goalBlock)[1]):
            emptyGrid[i][j] = 1

    return convertListToTuple(emptyGrid)
def insertGoalBlockInStartPosition(goalBlock, emptyGrid):
    emptyGrid = convertTupleToList(emptyGrid)
    
    goalSize = getSize(goalBlock)
    
    for i in range(0, goalSize[0]):
        for j in range (len(emptyGrid[i]) - goalSize[1], len(emptyGrid[i])):
            emptyGrid[i][j] = 1
            
    return convertListToTuple(emptyGrid)
Ejemplo n.º 10
0
def insertGoalBlockInStartPosition(goalBlock, emptyGrid):
    emptyGrid = convertTupleToList(emptyGrid)

    goalSize = getSize(goalBlock)

    for i in range(0, goalSize[0]):
        for j in range(len(emptyGrid[i]) - goalSize[1], len(emptyGrid[i])):
            emptyGrid[i][j] = 1

    return convertListToTuple(emptyGrid)
Ejemplo n.º 11
0
def insertNonGoalBlock(block, grid, symbol):
    (blockX, blockY) = getSize(block)
    # Get the position of the leftmost upper corner
    insertPos = getInsertPosition(block, grid)

    i = insertPos[0]
    j = insertPos[1]

    grid = convertTupleToList(grid)
    grid[i][j] = symbol

    # Fill it up
    for k in range(blockX):
        for l in range(blockY):
            if grid[i + k][j + l] == 0:
                grid[i + k][j + l] = symbol

    return convertListToTuple(grid)
def insertNonGoalBlock(block, grid, symbol):
    (blockX, blockY) = getSize(block)
    # Get the position of the leftmost upper corner
    insertPos = getInsertPosition(block, grid)
   
    i = insertPos[0]
    j = insertPos[1]
    
    grid = convertTupleToList(grid)
    grid[i][j] = symbol
    
    
    # Fill it up
    for k in range(blockX):
        for l in range(blockY):
            if grid[i + k][j + l] == 0:
                grid[i + k][j + l] = symbol

                
    return convertListToTuple(grid)