def __init__ (self, cards = None): simu.model.table.Table.__init__ (self) # Draw cards. cards = [ ] while len (cards) != 3: card = randrange (20) if card not in cards: cards.append (card) self.cards = cards def pos (card): king_pos = card // 4 queen_pos = card % 4 if queen_pos >= king_pos: queen_pos += 1 return (king_pos, queen_pos) # Well, this is a boring write only code which create every elements. self.pawns = [ ] # Put pawns in green zones. green_pos = pos (cards[0]) for i in xrange (5): if i == green_pos[0]: kind = 'king' elif i == green_pos[1]: kind = 'queen' else: kind = 'pawn' pawn = RoundObstacle (100, 1) pawn.pos = (200, 10 + 280 * (5 - i)) pawn.kind = kind self.pawns.append (pawn) pawn = RoundObstacle (100, 1) pawn.pos = (3000 - 200, 10 + 280 * (5 - i)) pawn.kind = kind self.pawns.append (pawn) # Put pawns in playing zone. kind = 'pawn' for j in xrange (2): play_pos = pos (cards[2 - j]) for i in xrange (5): if i in play_pos: pawn = RoundObstacle (100, 1) pawn.pos = (1500 - 350 * (1 + j), 350 * (5 - i)) pawn.kind = kind self.pawns.append (pawn) pawn = RoundObstacle (100, 1) pawn.pos = (1500 + 350 * (1 + j), 350 * (5 - i)) pawn.kind = kind self.pawns.append (pawn) # Put center pawn. kind = 'pawn' pawn = RoundObstacle (100, 1) pawn.pos = (1500, 350 * 3) pawn.kind = kind self.pawns.append (pawn) # Add everything to obstacles. self.obstacles += self.pawns
def check_tower (self): """Check whether several elements can make a tower.""" for slots in (self.front_slots, self.back_slots): if slots[0].pawn is not None and slots[1].pawn is not None: assert slots[0].pawn.kind != 'tower' tower = RoundObstacle (100, 1) tower.kind = 'tower' tower.tower = [ slots[0].pawn, slots[1].pawn ] slots[0].pawn, slots[1].pawn = tower, None self.table.add_pawn (tower) if slots[0].pawn is not None and slots[0].pawn.kind == 'tower' \ and slots[2].pawn and slots[2].door_motor.angle: slots[0].pawn.tower.append (slots[2].pawn) slots[2].pawn = None if slots[0].pawn is None and slots[1].pawn is None \ and slots[2].pawn and slots[2].door_motor.angle: slots[0].pawn, slots[2].pawn = slots[2].pawn, None