Exemplo n.º 1
0
def play ():
    
    grid = []
    util.create_grid (grid)
    add_block (grid)
    add_block (grid)
    won_message = False
    while (True):
        util.print_grid (grid)
        key = input ("Enter a direction:\n")
        if (key in ['x', 'u', 'd', 'l', 'r']):
            saved_grid = util.copy_grid (grid)
            if (key == 'x'):
                return
            elif (key == 'u'):
                push.push_up (grid)
            elif (key == 'd'):
                push.push_down (grid)
            elif (key == 'r'):
                push.push_right (grid)
            elif (key == 'l'):
                push.push_left (grid)
            if util.check_lost (grid):
                print ("Game Over!")
                return
            elif util.check_won (grid) and not won_message:
                print ("Won!")
                won_message = True  
            if not util.grid_equal (saved_grid, grid):
                add_block (grid)
Exemplo n.º 2
0
def push_down (grid):
    """merge grid values downwards"""
 
    new_grid=[]
    new_grid=util.create_grid(new_grid)
    
    while grid!=new_grid:
        new_grid=util.copy_grid(grid)
        
        for row in range(3,0,-1):
            for col in range(4):
                if grid[row][col]==0:
                    grid[row][col]=grid[row-1][col]
                    grid[row-1][col]=0
    for row in range(3,0,-1):
        for col in range(4):    
            if grid[row][col]==grid[row-1][col]:
                grid[row][col]= grid[row][col]+grid[row-1][col]
                grid[row-1][col]=0
    for row in range(3,0,-1):
        for col in range(4):
            if grid[row][col]==0:
                grid[row][col]=grid[row-1][col]
                grid[row-1][col]=0 
    return grid    
Exemplo n.º 3
0
def push_down (grid):
    """merge grid values downwards"""
 
    grid_copy=[]
    grid_copy=util.create_grid(grid_copy)
    
    while grid!=grid_copy:
        grid_copy=util.copy_grid(grid)
        
        for y in range(3,0,-1):
            for x in range(4):
                if grid[y][x]==0:
                    grid[y][x]=grid[y-1][x]
                    grid[y-1][x]=0

                    
        for x in range(4):    
            if grid[y][x]==grid[y-1][x]:
                grid[y][x]= grid[y][x]+grid[y-1][x]
                grid[y-1][x]=0
    for y in range(3,0,-1):
        for x in range(4):
            if grid[y][x]==0:
                grid[y][x]=grid[y-1][x]
                grid[y-1][x]=0 
    return grid    
Exemplo n.º 4
0
def push_up (grid):
    """merge grid values upwards"""
    grid_copy=[]#grid_copy empty list 
    grid_copy=util.create_grid(grid_copy)
    
    while grid!=grid_copy:
        grid_copy=util.copy_grid(grid)#this calls util and creates a grid copy
        
        for y in range(3):#iterate throught the list in grid 
            for x in range(4):
                if grid[y][x]==0:#if the number is 0 we move the value to the right one unit 
                    grid[y][x]=grid[y+1][x]
                    grid[y+1][x]=0 #zero value is then put in.


    for y in range(3):
        for x in range(4):    
            if grid[y][x]==grid[y+1][x]:
                grid[y][x]= grid[y][x]+grid[y+1][x]
                grid[y+1][x]=0
 
 
 
    for y in range(3):
        for x in range(4):
            if grid[y][x]==0:
                grid[y][x]=grid[y+1][x]
                grid[y+1][x]=0 
    return grid
Exemplo n.º 5
0
def push_up(grid):     # Merge grid values upwards (i.e. copy the values into an array, manipulate the array and replace the origional array with the new array)
    old_grid = util.copy_grid(grid)     # Create a copy of the origional grid
    while len(grid) > 0:
        del grid[0]
    util.create_grid(grid)      # Grid with 0's
    for col in range(4):
        pos = 0
        merge = 0
        for row in range(4):
            if old_grid[row][col] == grid[merge][col]:
                grid[merge][col] += old_grid[row][col]
                merge += 1
            else:
                grid[pos][col] = old_grid[row][col]
                pos += 1
                if pos-merge >= 2:
                    merge += 1
Exemplo n.º 6
0
def push_left(grid):  # Merge grid values right 
    old_grid = util.copy_grid(grid)     # Create a copy of the origional grid
    while len(grid) > 0:
        del grid[0]
    util.create_grid(grid)      # Grid with 0's
    for row in range(4): 
        pos = 0
        merge = 0
        for col in range(4):
            if old_grid[row][col] != 0:
                if old_grid[row][col] == grid[row][merge]:
                    grid[row][merge] += old_grid[row][col]
                    merge += 1
                else:
                    grid[row][pos] = old_grid[row][col]
                    pos += 1
                    if pos - merge >= 2:
                        merge += 1      
Exemplo n.º 7
0
def push_right(grid):   # Merge grid values left
    old_grid = util.copy_grid(grid)     # Create a copy of the origional grid
    while len(grid) > 0:
        del grid[0]
    util.create_grid(grid)      # Grid with 0's
    for row in range(4): 
        pos = 3
        merge = 3
        for col in range(3,-1,-1):
            if old_grid[row][col] != 0:
                if old_grid[row][col] == grid[row][merge]:
                    grid[row][merge] += old_grid[row][col]
                    merge -= 1
                else:
                    grid[row][pos] = old_grid[row][col]
                    pos -= 1
                    if merge - pos >= 2:
                        merge -= 1         
Exemplo n.º 8
0
def push_up(grid):
    """Merge numbers upward"""
    oldgrid = util.copy_grid(grid)
    while len(grid)> 0:
        del grid[0]
    util.create_grid(grid)
    for column in range(4):
        position = 0
        merge = 0
        for row in range(4):
            if oldgrid[row][column] != 0:
                if oldgrid[row][column] == grid[merge][column]:
                    grid[merge][column] += oldgrid[row][column]
                    merge += 1
                else:
                    grid[position][column] = oldgrid[row][column]
                    position += 1
                    if position-merge >= 2:
                        merge += 1
Exemplo n.º 9
0
def push_right(grid):
    """Merge numbers to the right"""
    oldgrid = util.copy_grid(grid)
    while len(grid)> 0:
        del grid[0]
    util.create_grid(grid)
    for row in range(4):
        position = 3
        merge = 3
        for column in range(3,-1,-1):
            if oldgrid[row][column] != 0:
                if oldgrid[row][column] == grid[row][merge]:
                    grid[row][merge] += oldgrid[row][column]
                    merge -= 1
                else:
                    grid[row][position] = oldgrid[row][column]
                    position -= 1
                    if merge - position >= 2:
                        merge -= 1
Exemplo n.º 10
0
def play ():
    """generate grid and play game interactively"""
    # create grid
    grid = []
    util.create_grid (grid)
    # add 2 starting random numbers
    add_block (grid)
    add_block (grid)
    won_message = False
    while (True):
        util.print_grid (grid)
        key = input ("Enter a direction:\n")
        if (key in ['x', 'u', 'd', 'l', 'r']):
            # make a copy of the grid
            saved_grid = util.copy_grid (grid)
            if (key == 'x'):
                # quit the game
                return
            # manipulate the grid depending on input
            elif (key == 'u'):
                push.push_up (grid)
            elif (key == 'd'):
                push.push_down (grid)
            elif (key == 'r'):
                push.push_right (grid)
            elif (key == 'l'):
                #print(grid)
                push.push_left (grid)
                #print(grid)
            # check for a grid with no more gaps or legal moves
            if util.check_lost (grid):
                print ("Game Over!")
                return
            # check for a grid with the final number
            elif util.check_won (grid) and not won_message:
                print ("Won!")
                won_message = True
            # finally add a random block if the grid has changed    
            if not util.grid_equal (saved_grid, grid):
                add_block (grid)
Exemplo n.º 11
0
def play():
    """generate grid and play game interactively"""
    # create grid
    grid = []
    util.create_grid(grid)
    # add 2 starting random numbers
    add_block(grid)
    add_block(grid)
    won_message = False
    while (True):
        util.print_grid(grid)
        key = input("Enter a direction:\n")
        if (key in ['x', 'u', 'd', 'l', 'r']):
            # make a copy of the grid
            saved_grid = util.copy_grid(grid)
            if (key == 'x'):
                # quit the game
                return
            # manipulate the grid depending on input
            elif (key == 'u'):
                push.push_up(grid)
            elif (key == 'd'):
                push.push_down(grid)
            elif (key == 'r'):
                push.push_right(grid)
            elif (key == 'l'):
                push.push_left(grid)
            # check for a grid with no more gaps or legal moves
            if util.check_lost(grid):
                print("Game Over!")
                return
            # check for a grid with the final number
            elif util.check_won(grid) and not won_message:
                print("Won!")
                won_message = True
            # finally add a random block if the grid has changed
            if not util.grid_equal(saved_grid, grid):
                add_block(grid)
Exemplo n.º 12
0
def play ():
    # makes the game and plays
    # makes grid
    grid = []
    util.create_grid (grid)
    # adds 2 random numbers to start with
    add_block (grid)
    add_block (grid)
    won_message = False
    while (True):
        util.print_grid (grid)
        key = input ("Enter a direction:\n")
        if (key in ['x', 'u', 'd', 'l', 'r']):
            # copies the grid
            saved_grid = util.copy_grid (grid)
            if (key == 'x'):
                # end the game
                return
            # edit the grid depending on the input
            elif (key == 'u'):
                push.push_up (grid)
            elif (key == 'd'):
                push.push_down (grid)
            elif (key == 'r'):
                push.push_right (grid)
            elif (key == 'l'):
                push.push_left (grid)
            # check for a grid with no more gaps or legal moves
            if util.check_lost (grid):
                print ("Game Over!")
                return
            # check for a grid with the last number
            elif util.check_won (grid) and not won_message:
                print ("Won!")
                won_message = True
            # lastly add a random block if the grid has changed    
            if not util.grid_equal (saved_grid, grid):
                add_block (grid)
Exemplo n.º 13
0
def play():
    grid = []

    # CREATE THE GRID
    util.create_grid(grid)

    # PLACE THE TWO NUMBERS ON THE BOARD
    util.generate_next_position(grid)

    while (True):
        # Clear the terminal so that the game seems more interactive
        os.system('cls' if os.name == 'nt' else 'clear')

        # PRINT THE CURRENT GRID
        util.print_grid(grid)

        # set 'key' to a user input which represents the move they would like to do
        key = input("Enter a direction:\n")

        # check if 'key' is one of the available options
        if (key in ['x', 'u', 'd', 'l', 'r']):
            if (key == 'x'):
                # quit the game
                return
            # manipulate the grid depending on input
            elif (key == 'u'):
                grid = push.push_up(grid)
            elif (key == 'd'):
                grid = push.push_down(grid)
            elif (key == 'r'):
                grid = push.push_right(grid)
            elif (key == 'l'):
                grid = push.push_left(grid)

            print(grid)
            # check for a grid with no more gaps or legal moves
            util.check_for_loss(grid)
            util.check_for_win(grid)
Exemplo n.º 14
0
def push_right (grid):
    """merge grid values right""" 
    grid_copy=[]
    grid_copy=util.create_grid(grid_copy)
      





    while grid!=grid_copy:
        grid_copy=util.copy_grid(grid)
        
        for y in range(4):
            for x in range(3,0,-1):
                if grid[y][x]==0:
                    grid[y][x]=grid[y][x-1]
                    grid[y][x-1]=0
 
 
 
 
    for y in range(4):
        for x in range(3,0,-1):    
            if grid[y][x]==grid[y][x-1]:
                grid[y][x]= grid[y][x]+grid[y][x-1]
                grid[y][x-1]=0





    for y in range(4):
        for x in range(3,0,-1):
            if grid[y][x]==0:
                grid[y][x]=grid[y][x-1]
                grid[y][x-1]=0 
    return grid        
Exemplo n.º 15
0
def push_right (grid):
    """merge grid values right""" 
    new_grid=[]
    new_grid=util.create_grid(new_grid)
      
    while grid!=new_grid:
        new_grid=util.copy_grid(grid)
        
        for row in range(4):
            for col in range(3,0,-1):
                if grid[row][col]==0:
                    grid[row][col]=grid[row][col-1]
                    grid[row][col-1]=0
    for row in range(4):
        for col in range(3,0,-1):    
            if grid[row][col]==grid[row][col-1]:
                grid[row][col]= grid[row][col]+grid[row][col-1]
                grid[row][col-1]=0
    for row in range(4):
        for col in range(3,0,-1):
            if grid[row][col]==0:
                grid[row][col]=grid[row][col-1]
                grid[row][col-1]=0 
    return grid        
Exemplo n.º 16
0
def play(agent='human', record=True, filename='human_games.dat', delay=1):
    """generate grid and play game interactively"""
    # create grid
    grid = []
    util.create_grid(grid)
    # add 2 starting random numbers
    add_block(grid)
    add_block(grid)
    won_message = False
    score = 0
    trajectory = []
    saved_grid = [[]]
    try:
        while (True):
            util.print_grid(grid)
            if agent == HUMAN:
                key = input("Enter a direction:\n")
                if (key == 'x'):
                    # quit the game
                    break
                try:
                    key = util.action_num_to_letter(int(key))
                except:
                    continue
            elif agent == SVM or agent == NN:
                if util.grid_equal(saved_grid,
                                   grid):  #previous action not allowed
                    #use pior agent since model is deterministic given the same input
                    key = agents.random_agent_with_prior()
                    print("Prior")
                else:
                    print("Model")
                    model_agent = agents.Model()
                    model_agent.load_model(filename="models/" + agent +
                                           ".joblib")
                    key = model_agent.predict([np.array(grid).flatten()])
                    key = util.action_num_to_letter(int(key[0]))
                print(key)
            elif agent == RANDOM:
                key = agents.random_agent()
            elif agent == RANDOM_WITH_PRIOR:
                key = agents.random_agent_with_prior()
            if (key in ['u', 'd', 'l', 'r']):
                # make a copy of the grid
                saved_grid = util.copy_grid(grid)
                # manipulate the grid depending on input
                if (key == 'u'):
                    _, add_score = push.push_up(grid)
                elif (key == 'd'):
                    _, add_score = push.push_down(grid)
                elif (key == 'r'):
                    _, add_score = push.push_right(grid)
                elif (key == 'l'):
                    _, add_score = push.push_left(grid)
                score += add_score
                print("Score: ", score)
                if record and key in 'ludr':
                    data_instance = np.array(saved_grid).flatten()
                    data_instance = np.append(
                        data_instance,
                        [util.action_letter_to_num(key), add_score, score])
                    data_instance = np.append(data_instance,
                                              np.array(grid).flatten())
                    trajectory.append(data_instance)
                # check for a grid with no more gaps or legal moves
                if util.check_lost(grid):
                    print("Game Over!")
                    break
                # check for a grid with the final number
                elif util.check_won(grid) and not won_message:
                    print("Won!")
                    won_message = True
                # finally add a random block if the grid has changed
                if not util.grid_equal(saved_grid, grid):
                    add_block(grid)
            if agent != HUMAN:
                time.sleep(delay)  #in seconds
    finally:
        if record:
            util.save_game(trajectory,
                           filename="games/" + agent.lower() + "/" +
                           agent.lower())
Exemplo n.º 17
0
def run_test (test):
   if test == 0:
      grid = []    
      util.create_grid (grid)
      print(grid)
      print (len (grid))
      print (len (grid[0]))
      print (len (grid[1]))
      print (len (grid[2]))
      print (len (grid[3]))
      print (grid[0][0])
      print (grid[1][2])
      print (grid[2][1])
      print (grid[3][3])
   elif test == 1:
      grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      util.print_grid (grid)
   elif test == 2:
      grid = [[2,0,2,0],[0,4,0,8],[0,16,0,128],[2,2,2,2]]
      util.print_grid (grid)
   elif test == 3:
      grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      print (util.check_lost (grid))
   elif test == 4:
      grid = [[2,0,2,0],[0,4,0,8],[0,16,0,128],[2,2,2,2]]
      print (util.check_lost (grid))
   elif test == 5:
      grid = [[2,2,2,2],[2,2,2,2],[2,2,2,2],[2,2,2,2]]
      print (util.check_lost (grid))
   elif test == 6:
      grid = [[4,16,2,4],[2,4,16,2],[2,4,8,4],[4,8,4,2]]
      print (util.check_lost (grid))
   elif test == 7:
      grid = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      print (util.check_lost (grid))
   elif test == 8:
      grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      print (util.check_won (grid))
   elif test == 9:
      grid = [[2,0,2,0],[0,4,0,8],[0,16,0,128],[2,2,2,2]]
      print (util.check_won (grid))
   elif test == 10:
      grid = [[2,2,2,2],[2,2,2,2],[2,2,2,2],[2,2,2,2]]
      print (util.check_won (grid))
   elif test == 11:
      grid = [[4,16,2,4],[2,4,16,2],[2,4,8,4],[4,8,4,2]]
      print (util.check_won (grid))
   elif test == 12:
      grid = [[2,32,2,4],[4,2,16,2],[8,0,8,4],[2,0,4,2]]
      print (util.check_won (grid))
   elif test == 13:
      grid = [[2,2,8,0],[0,8,16,0],[16,32,8,8],[2,8,4,4]]
      print (util.check_won (grid))
   elif test == 14:
      grid = [[64,32,32,2],[8,4,2,0],[4,2,0,0],[2,0,0,0]]
      print (util.check_won (grid))
   elif test == 15:
       grid = [[64,32,32,2],[8,4,2,0],[4,2,0,0],[2,0,0,0]]
       print (util.check_won (grid))
   elif test == 16:
      grid = [[128,4,0,0],[8,4,2,0],[4,2,0,2],[2,0,0,0]]
      print (util.check_won (grid))
   elif test == 17:
      grid = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      test_grid = util.copy_grid (grid)
      print (grid[0][0],test_grid[0][0])
      print (grid[1][2],test_grid[1][2])
      print (grid[3][3],test_grid[3][3])
      grid[0][0] = 64
      grid[1][2] = 64
      grid[3][3] = 64
      print (grid[0][0],test_grid[0][0])
      print (grid[1][2],test_grid[1][2])
      print (grid[3][3],test_grid[3][3])
   elif test == 18:
      grid1 = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      grid2 = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      print (util.grid_equal (grid1, grid2))
   elif test == 19:
      grid1 = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      grid2 = [[4,2,8,2],[2,8,16,4],[16,32,8,4],[4,8,4,2]]
      print (util.grid_equal (grid1, grid2))
   elif test == 20:
      grid1 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      grid2 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      print (util.grid_equal (grid1, grid2))
   elif test == 21:
      grid1 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      grid2 = [[2,4,8,16],[32,64,128,256],[512,1024,2048,4096],[8192,16384,32768,65536]]
      print (util.grid_equal (grid1, grid2))
   elif test == 22:
      grid1 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      grid2 = [[2,2,2,2],[2,2,2,2],[2,2,2,2],[2,2,2,2]]
      print (util.grid_equal (grid1, grid2))
Exemplo n.º 18
0
def play():
    """generate grid and play game interactively"""
    # create grid
    grid = []
    util.create_grid(grid)
    # add 2 starting random numbers
    add_block(grid)
    add_block(grid)
    # initially set 'won_message' to False. 'won_message' is used to determine if the user has been alerted that they won as to not keep printing the winning  message if they continue playing.
    won_message = False
    # start
    while (True):
        # Clear the terminal so that the game seems more interactive
        os.system('cls' if os.name == 'nt' else 'clear')
        # print the current state of the grid
        util.print_grid(grid)
        # set 'key' to a user input which represents the move they would like to do
        key = input("Enter a direction:\n")
        # check if 'key' is one of the available options
        if (key in ['x', 'u', 'd', 'l', 'r']):
            # make a copy of the grid
            saved_grid = util.copy_grid(grid)
            if (key == 'x'):
                # quit the game
                return
            # manipulate the grid depending on input
            elif (key == 'u'):
                push.push_up(grid)
            elif (key == 'd'):
                push.push_down(grid)
            elif (key == 'r'):
                push.push_right(grid)
            elif (key == 'l'):
                push.push_left(grid)
            # check for a grid with no more gaps or legal moves
            if util.check_lost(grid):
                print("Game Over!")
                return
            # check for a grid with the final number
            elif not won_message and util.check_won(grid):
                print("Won!")
                won_message = True
                # Clear the terminal so that the game seems more interactive
                os.system('cls' if os.name == 'nt' else 'clear')
                # print the current state of the grid
                util.print_grid(grid)
                if input('Would you like to keep playing? (Y)es or (N)o: '
                         ).lower() == 'n':
                    print('Game Over!')
                    return
            # finally add a random block if the grid has changed
            if not util.grid_equal(saved_grid, grid):
                add_block(grid)
            # check for a grid with no more gaps or legal moves
            if util.check_lost(grid):
                # Clear the terminal so that the game seems more interactive
                os.system('cls' if os.name == 'nt' else 'clear')
                # print last state of grid
                util.print_grid(grid)
                print("Game Over!")
                return
Exemplo n.º 19
0
def run_test (test):
   if test == 0:
      grid = []    
      util.create_grid (grid)
      print (len (grid))
      print (len (grid[0]))
      print (len (grid[1]))
      print (len (grid[2]))
      print (len (grid[3]))
      print (grid[0][0])
      print (grid[1][2])
      print (grid[2][1])
      print (grid[3][3])
   elif test == 1:
      grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      util.print_grid (grid)
   elif test == 2:
      grid = [[2,0,2,0],[0,4,0,8],[0,16,0,128],[2,2,2,2]]
      util.print_grid (grid)
   elif test == 3:
      grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      print (util.check_lost (grid))
   elif test == 4:
      grid = [[2,0,2,0],[0,4,0,8],[0,16,0,128],[2,2,2,2]]
      print (util.check_lost (grid))
   elif test == 5:
      grid = [[2,2,2,2],[2,2,2,2],[2,2,2,2],[2,2,2,2]]
      print (util.check_lost (grid))
   elif test == 6:
      grid = [[4,16,2,4],[2,4,16,2],[2,4,8,4],[4,8,4,2]]
      print (util.check_lost (grid))
   elif test == 7:
      grid = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      print (util.check_lost (grid))
   elif test == 8:
      grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      print (util.check_won (grid))
   elif test == 9:
      grid = [[2,0,2,0],[0,4,0,8],[0,16,0,128],[2,2,2,2]]
      print (util.check_won (grid))
   elif test == 10:
      grid = [[2,2,2,2],[2,2,2,2],[2,2,2,2],[2,2,2,2]]
      print (util.check_won (grid))
   elif test == 11:
      grid = [[4,16,2,4],[2,4,16,2],[2,4,8,4],[4,8,4,2]]
      print (util.check_won (grid))
   elif test == 12:
      grid = [[2,32,2,4],[4,2,16,2],[8,0,8,4],[2,0,4,2]]
      print (util.check_won (grid))
   elif test == 13:
      grid = [[2,2,8,0],[0,8,16,0],[16,32,8,8],[2,8,4,4]]
      print (util.check_won (grid))
   elif test == 14:
      grid = [[64,32,32,2],[8,4,2,0],[4,2,0,0],[2,0,0,0]]
      print (util.check_won (grid))
   elif test == 15:
       grid = [[64,32,32,2],[8,4,2,0],[4,2,0,0],[2,0,0,0]]
       print (util.check_won (grid))
   elif test == 16:
      grid = [[128,4,0,0],[8,4,2,0],[4,2,0,2],[2,0,0,0]]
      print (util.check_won (grid))
   elif test == 17:
      grid = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      test_grid = util.copy_grid (grid)
      print (grid[0][0],test_grid[0][0])
      print (grid[1][2],test_grid[1][2])
      print (grid[3][3],test_grid[3][3])
      grid[0][0] = 64
      grid[1][2] = 64
      grid[3][3] = 64
      print (grid[0][0],test_grid[0][0])
      print (grid[1][2],test_grid[1][2])
      print (grid[3][3],test_grid[3][3])
   elif test == 18:
      grid1 = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      grid2 = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      print (util.grid_equal (grid1, grid2))
   elif test == 19:
      grid1 = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      grid2 = [[4,2,8,2],[2,8,16,4],[16,32,8,4],[4,8,4,2]]
      print (util.grid_equal (grid1, grid2))
   elif test == 20:
      grid1 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      grid2 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      print (util.grid_equal (grid1, grid2))
   elif test == 21:
      grid1 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      grid2 = [[2,4,8,16],[32,64,128,256],[512,1024,2048,4096],[8192,16384,32768,65536]]
      print (util.grid_equal (grid1, grid2))
   elif test == 22:
      grid1 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      grid2 = [[2,2,2,2],[2,2,2,2],[2,2,2,2],[2,2,2,2]]
      print (util.grid_equal (grid1, grid2))
Exemplo n.º 20
0
def start():
    grid = create_grid(GRID_SIZE)

    prey_pos = (231, 201)
    hunter_pos = (1, 1)
    hunter_dir = (1, 1)

    prey = RandomPrey(prey_pos, hunter_pos, hunter_dir, grid)
    is_prey_move = False

    walls_placed = 0
    hunter = HalfHunter(hunter_pos, hunter_dir, prey_pos, MAX_WALLS)
    hunter.set_grid(grid)

    turn = 0
    cooldown = WALL_COOLDOWN
    while True:

        log("Turn:", turn)
        log("Hunter Position", hunter.position)
        log("Prey Position", prey.position)

        walls_to_remove, new_wall = hunter.placeAndRemoveWall()
        if len(walls_to_remove) > 0:
            for wall in walls_to_remove:
                wall_start_pos, wall_direc, wall_length = wall
                grid = remove_wall(wall_start_pos, wall_direc, wall_length, grid)
            walls_placed -= len(walls_to_remove)

        if cooldown == 0:
            if new_wall != () and walls_placed < MAX_WALLS:
                wall_start_pos, wall_direc, wall_length = new_wall
                new_grid, valid = place_wall(hunter_pos, prey_pos, wall_start_pos, wall_direc, wall_length, grid)
                if valid:
                    walls_placed += 1
                    walls.append((wall_start_pos, wall_direc, wall_length))
                    grid = new_grid
                    log(f"Hunter places wall starting at {wall_start_pos} of length {wall_length} in direction {wall_direc}")
                    cooldown = WALL_COOLDOWN
        elif cooldown > 0:
            cooldown -= 1

        hunter_dir = hunter.direction
        log("Hunter moves in direction:", hunter_dir)
        hunter_pos, new_hunter_dir = get_new_pos(hunter_pos, hunter_dir, grid)
        log("Hunter new position:", hunter_pos)
        hunter_dir = new_hunter_dir
        prey.receiveHunterPosition(hunter_pos, hunter_dir)
        hunter.updatePosition(hunter_pos, hunter_dir)

        if is_prey_move:
            prey_dir = prey.getMove()
            log("Prey moves in direction:", prey_dir)
            prey_pos, prey_dir = get_new_pos(prey.position, prey_dir, grid)
            log("Prey new position:", prey_pos)
            hunter.receivePreyPosition(prey_pos)
            prey.updatePosition(prey_pos)

        if compute_distance(hunter_pos, prey_pos) <= 4:
            break

        turn += 1

        log()
        if is_prey_move:
            is_prey_move = False
        else:
            is_prey_move = True

    print("Hunter caught prey in", turn, "turns")
Exemplo n.º 21
0
def run_test (test):
   if test == 0:
      grid = []    
      util.create_grid (grid)
      print (len (grid))
      print (len (grid[0]))
      print (len (grid[1]))
      print (len (grid[2]))
      print (len (grid[3]))
      print (grid[0][0])
      print (grid[1][2])
      print (grid[2][1])
      print (grid[3][3])
   elif test == 1:
      grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      util.print_grid (grid)
   elif test == 2:
      grid = [[2  File "/home/rngkum001/python/util.py", line 21
    print("|")
             ^
IndentationError: unindent does not match any outer indentation level
rngkum001@sl-dual-78:~/python$ python3 question2.py >  output.txt
Traceback (most recent call last):
,0,2,0],[0,4,0,8],[0,16,0,128],[2,2,2,2]]
      util.print_grid (grid)
   elif test == 3:
      grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      print (util.check_lost (grid))
   elif test == 4:
      grid = [[2,0,2,0],[0,4,0,8],[0,16,0,128],[2,2,2,2]]
      print (util.check_lost (grid))
   elif test == 5:
      grid = [[2,2,2,2],[2,2,2,2],[2,2,2,2],[2,2,2,2]]
      print (util.check_lost (grid))
   elif test == 6:
      grid = [[4,16,2,4],[2,4,16,2],[2,4,8,4],[4,8,4,2]]
      print (util.check_lost (grid))
   elif test == 7:
      grid = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      print (util.check_lost (grid))
   elif test == 8:
      grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      print (util.check_won (grid))
   elif test == 9:
      grid = [[2,0,2,0],[0,4,0,8],[0,16,0,128],[2,2,2,2]]
      print (util.check_won (grid))
   elif test == 10:
      grid = [[2,2,2,2],[2,2,2,2],[2,2,2,2],[2,2,2,2]]
      print (util.check_won (grid))
   elif test == 11:
      grid = [[4,16,2,4],[2,4,16,2],[2,4,8,4],[4,8,4,2]]
      print (util.check_won (grid))
   elif test == 12:
      grid = [[2,32,2,4],[4,2,16,2],[8,0,8,4],[2,0,4,2]]
      print (util.check_won (grid))
   elif test == 13:
      grid = [[2,2,8,0],[0,8,16,0],[16,32,8,8],[2,8,4,4]]
      print (util.check_won (grid))
   elif test == 14:
      grid = [[64,32,32,2],[8,4,2,0],[4,2,0,0],[2,0,0,0]]
      print (util.check_won (grid))
   elif test == 15:
      grid = [[64,32,32,2],[8,4,2,0],[4,2,0,0],[2,0,0,0]]
      print (util.check_won (grid))
   elif test == 16:
      grid = [[128,4,0,0],[8,4,2,0],[4,2,0,2],[2,0,0,0]]
      print (util.check_won (grid))
   elif test == 17:
      grid = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      test_grid = util.copy_grid (grid)
      print (grid[0][0],test_grid[0][0])
      print (grid[1][2],test_grid[1][2])
      print (grid[3][3],test_grid[3][3])
      grid[0][0] = 64
      grid[1][2] = 64
      grid[3][3] = 64
      print (grid[0][0],test_grid[0][0])
      print (grid[1][2],test_grid[1][2])
      print (grid[3][3],test_grid[3][3])
   elif test == 18:
      grid1 = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      grid2 = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      print (util.grid_equal (grid1, grid2))
   elif test == 19:
      grid1 = [[4,2,8,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
      grid2 = [[4,2,8,2],[2,8,16,4],[16,32,8,4],[4,8,4,2]]
      print (util.grid_equal (grid1, grid2))
   elif test == 20:
      grid1 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      grid2 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      print (util.grid_equal (grid1, grid2))
   elif test == 21:
      grid1 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      grid2 = [[2,4,8,16],[32,64,128,256],[512,1024,2048,4096],[8192,16384,32768,65536]]
      print (util.grid_equal (grid1, grid2))
   elif test == 22:
      grid1 = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
      grid2 = [[2,2,2,2],[2,2,2,2],[2,2,2,2],[2,2,2,2]]
      print (util.grid_equal (grid1, grid2))