Changeset 794

Show
Ignore:
Timestamp:
07/20/10 22:57:13 (7 weeks ago)
Author:
confluence
Message:

added symmetry

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • confluence/randombubble.py

    r793 r794  
    55 
    66import random 
     7from copy import deepcopy 
    78from networkx import Graph, connected_components, draw 
    89 
     
    3233 
    3334class RandomRow(Row): 
    34     def __init__(self, row_index, selection): 
     35    def __init__(self, row_index, selection, symmetric): 
    3536        super(RandomRow, self).__init__(row_index) 
    36         self.balls = [Ball(random.choice(selection)) for b in range(self.num_balls())] 
     37        if symmetric: 
     38            startballs = [Ball(random.choice(selection)) for b in range(4)] 
     39            self.balls = startballs + list(reversed(deepcopy(startballs)[:self.num_balls()/2])) 
     40        else: 
     41            self.balls = [Ball(random.choice(selection)) for b in range(self.num_balls())] 
    3742 
    3843class BlankRow(Row): 
     
    4348class Level(object): 
    4449    BALLS = range(8) 
     50    ASYM, SYM_HORIZ, SYM_BOTH = range(3) 
    4551 
    46     def __init__(self, fill_rows, colours, density): 
     52    def __init__(self, fill_rows, colours, density, symmetry): 
    4753        self.rows = [] 
    4854 
    4955        selection = random.sample(self.BALLS, colours) + [None] * density 
     56        symmetric_rows = symmetry > 0 
    5057 
    51         for row in range(fill_rows): 
    52             self.rows.append(RandomRow(row, selection)) 
     58        if symmetry > 1: 
     59            for row in range((fill_rows + 1)/2): 
     60                self.rows.append(RandomRow(row, selection, symmetric_rows)) 
     61            for rand_row in reversed(self.rows[:fill_rows/2]): 
     62                self.rows.append(deepcopy(rand_row)) 
     63        else: 
     64            for row in range(fill_rows): 
     65                self.rows.append(RandomRow(row, selection, symmetric_rows)) 
    5366 
    5467        for row in range(fill_rows, 10): 
     
    99112            colours = kwargs.get("colours", random.randint(1,8)) 
    100113            density = kwargs.get("density", random.randint(1,4)) 
    101             level = Level(fill_rows, colours, density) 
     114            symmetry = kwargs.get("symmetry", random.randint(0,2)) 
     115            level = Level(fill_rows, colours, density, symmetry) 
    102116            if level.valid(): 
    103117                self.levels.append(level)