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
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())
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