Changeset 799

Show
Ignore:
Timestamp:
07/21/10 13:05:55 (7 weeks ago)
Author:
confluence
Message:

made more user-friendly

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • confluence/foreverbubble/foreverbubble.py

    r798 r799  
    11#!/usr/bin/python 
    2  
     2# 
     3# requires: argparse, networkx.  Works on Linux.  Might work on OSX.  Probably doesn't work on Windows.  Patches appreciated. 
     4# 
    35# Copyright 2010 Adrianna Pinska, Simon Cross 
    46# This program is distributed under the terms of the GNU General Public License v3 
     
    810 
    911import random 
     12import os 
    1013from copy import deepcopy 
    11 from optparse import OptionParser 
    12 from networkx import Graph, connected_components, draw 
     14 
     15from argparse import ArgumentParser 
     16from networkx import Graph, connected_components 
    1317 
    1418class Ball(object): 
     
    5256class Level(object): 
    5357    BALLS = range(8) 
     58 
    5459    ASYM, SYM_HORIZ, SYM_BOTH = range(3) 
    5560    SYMMETRIES = { 
     
    5964    } 
    6065 
    61     def __init__(self, fill_rows, colours, density, symmetry): 
     66    def __init__(self, fill_rows=None, colours=None, emptyspace=None, symmetry=None): 
     67        if fill_rows is None: 
     68            fill_rows = random.randint(6,10) 
     69        if colours is None: 
     70            colours = random.randint(1,8) 
     71        if emptyspace is None: 
     72            emptyspace = random.randint(1,4) 
     73        if symmetry is None: 
     74            symmetry = random.randint(0,2) 
     75 
    6276        self.rows = [] 
    6377 
    64         selection = random.sample(self.BALLS, colours) + [None] * density 
     78        selection = random.sample(self.BALLS, colours) + [None] * emptyspace 
    6579        symmetric_rows = symmetry > 0 
    6680 
     
    119133        l = 0 
    120134        self.levels = [] 
     135 
    121136        while l < num_levels: 
    122             fill_rows = kwargs.get("fill_rows", random.randint(6,10)) 
    123             colours = kwargs.get("colours", random.randint(1,8)) 
    124             density = kwargs.get("density", random.randint(1,4)) 
    125             symmetry = kwargs.get("symmetry", random.randint(0,2)) 
    126             level = Level(fill_rows, colours, density, symmetry) 
     137            level = Level(**kwargs) 
    127138            if level.valid(): 
    128139                self.levels.append(level) 
     
    133144 
    134145if __name__ == '__main__': 
    135     print LevelSet(10) 
     146    parser = ArgumentParser() 
     147    parser.add_argument('-f', '--filename', dest='filename', type=str, default="%s/.frozen-bubble/levels/foreverbubble" % os.getenv('HOME'), metavar='FILE', help='levelset save location (default: %default)') 
     148    parser.add_argument('-n', '--number', dest='number', type=int, default=20, metavar='NUMBER', help='number of levels to generate (default: %default)') 
     149 
     150    parser.add_argument('-r', '--rows', dest='fill_rows', type=int, choices=xrange(1,11), metavar='ROWS', help='number of rows [1-10] to generate per level (default: pick randomly for each level)') 
     151    parser.add_argument('-c', '--colours', dest='colours', type=int, choices=xrange(1,9), metavar='COLOURS', help='number of colours [1-8] to use per level (default: pick randomly for each level)') 
     152    parser.add_argument('-e', '--empty-space', dest='emptyspace', type=int, choices=xrange(0,4), metavar='SPACE', help='amount of empty space [0-3] on each level (default: pick randomly for each level)') 
     153    parser.add_argument('-s', '--symmetry', dest='symmetry', type=str, choices=Level.SYMMETRIES.keys(), metavar='SYMMETRY', help='symmetry (one of %r) of each level (default: pick randomly for each level)' % Level.SYMMETRIES.keys()) 
     154    args = parser.parse_args() 
     155 
     156    symmetry = Level.SYMMETRIES[args.symmetry] if args.symmetry else None 
     157 
     158    levelset = LevelSet(args.number, fill_rows=args.fill_rows, colours=args.colours, emptyspace=args.emptyspace, symmetry=symmetry) 
     159 
     160    levelsetfile = open(args.filename, "w") 
     161    levelsetfile.write(str(levelset)) 
     162    levelsetfile.close()