Ejemplo n.º 1
0
    def __init__(self, cfgfile, **parameters):
        '''
        `cfgfile` is the path to the "enginecfg" configuration file.
        
        Recognised keyword arguments are:
            width=              # int >= 4
            height=             # int >= 4
            mines=              # int; Only integers are allowed here.
            gametype=           # str; 'moore', 'hex' or 'neumann'
            guessless=          # bool; Must be possible to solve without
                                #       guessing?
        
        As of version 0.0.20, no parameters are mandatory; they all
        have default values.  This may change in the future.
        '''
        # Define some constants.
        self.gametypes = ('moore', 'hex', 'neumann')

        # Handle parameters.
        default = {
            'width': 10,
            'height': 10,
            'mines': 10,
            'gametype': 'moore',
            'guessless': True,
        }
        for key in default:
            if key not in parameters:
                parameters[key] = default[key]
        assert parameters['gametype'] in ('neumann', 'hex', 'moore')

        self.cfg = eval(open(cfgfile).read())
        # Prevent DoS:
        area = parameters['width'] * parameters['height']
        if area > self.cfg['init-field']['sec-maxarea']:
            raise security_alert('Area too large, aborting')

        # Begin initialization.
        self.dimensions = (parameters['width'], parameters['height'])
        self.gametype = parameters['gametype']
        self.n_mines = parameters['mines']
        self.guessless = parameters['guessless']
        if self.gametype == 'hex':
            self.field = fields.hexagonal_field(
                parameters['width'],
                parameters['height'],
                True  # Flagcount
            )
        else:
            self.field = fields.generic_field(
                [parameters['width'], parameters['height']],
                self.gametype == 'moore',
                True  # Flagcount
            )

        self.game_status = 'pre-game'  # play-game game-won game-lost

        self.solver = solver.solver()
        self.solver.field = self.field
Ejemplo n.º 2
0
def runhex(x=39, y=18, m=112):
    field = anonymine_fields.hexagonal_field(x, y)
    field.set_callback('input', output, None)

    mines = field.all_cells()
    random.shuffle(mines)
    field.fill(mines[:m])

    for mine in mines[m:]:
        for neighbour in field.get_neighbours(mine):
            if neighbour in mines[:m]:
                break
        else:
            field.reveal(mine)
            break

    solver = anonymine_solver.solver()
    solver.field = field
    print(solver.solve())
Ejemplo n.º 3
0
def runhex(x=39, y=18, m=112):
    field = anonymine_fields.hexagonal_field(x, y)
    field.set_callback('input', output, None)
    
    mines = field.all_cells()
    random.shuffle(mines)
    field.fill(mines[:m])
    
    for mine in mines[m:]:
        for neighbour in field.get_neighbours(mine):
            if neighbour in mines[:m]:
                break
        else:
            field.reveal(mine)
            break
    
    solver = anonymine_solver.solver()
    solver.field = field
    print(solver.solve())
Ejemplo n.º 4
0
 def __init__(self, cfgfile, **parameters):
     '''
     `cfgfile` is the path to the "enginecfg" configuration file.
     
     Recognised keyword arguments are:
         width=              # int >= 4
         height=             # int >= 4
         mines=              # int; Only integers are allowed here.
         gametype=           # str; 'moore', 'hex' or 'neumann'
         flagcount=          # bool; Count how many flags are left?
         guessless=          # bool; Must be possible to solve without
                             #       guessing?
     
     As of version 0.0.20, no parameters are mandatory; they all
     have default values.  This may change in the future.
     '''
     # Define some constants.
     self.gametypes = ('moore', 'hex', 'neumann')
     
     # Handle parameters.
     default = {
         'width':     10,
         'height':    10,
         'mines':     10,
         'gametype':  'moore',
         'flagcount': True,
         'guessless': True,
     }
     for key in default:
         if key not in parameters:
             parameters[key] = default[key]
     assert parameters['gametype'] in ('neumann', 'hex', 'moore')
     
     self.cfg = eval(open(cfgfile).read())
     # Prevent DoS:
     area = parameters['width'] * parameters['height']
     if area > self.cfg['init-field']['sec-maxarea']:
         raise security_alert('Area too large, aborting')
     
     # Begin initialization.
     self.dimensions = (parameters['width'], parameters['height'])
     self.gametype = parameters['gametype']
     self.n_mines = parameters['mines']
     self.flagcount = parameters['flagcount']
     self.guessless = parameters['guessless']
     if self.gametype == 'hex':
         self.field = fields.hexagonal_field(
             parameters['width'],
             parameters['height'],
             parameters['flagcount']
         )
     else:
         self.field = fields.generic_field(
             [parameters['width'], parameters['height']],
             self.gametype == 'moore',
             parameters['flagcount']
         )
     
     self.game_status = 'pre-game' # play-game game-won game-lost
     
     self.solver = solver.solver()
     self.solver.field = self.field