Exemplo n.º 1
0
 def create_supports(self):
 
     for i, pce_id in enumerate(self.pieces):
         for row in db.callproc('orders_for_piece', pce_id):
             dst = row['destination']
             order_type = int(row['order_type'])
             if dst and order_type == 2:
                 operands = db.callproc('operands_for_piece', pce_id)
                 if len(operands) == 1:
                     sup_pce = operands[0]['ter_id']
                     if not self.loc_pce.has_key(sup_pce): continue
                     sup_pce = self.loc_pce[sup_pce]
                     sup_orders = db.callproc('orders_for_piece', self.pieces[sup_pce])
                     if not sup_orders: continue
                     sup_dst = sup_orders[0]['destination']
                     if sup_dst != dst or sup_pce == i: continue
                     
                     self.pce_m[i][sup_pce] = 2
                 #print order_type, len(db.callproc('orders_for_piece', pce_id)), pce_id
                 #if self.loc_pce.has_key(dst) and self.loc_pce[dst] != i:
                     #self.pce_m[i][self.loc_pce[dst]] = 1
                 #for o in self.orders:
                     #if o['destination'] == dst and o['order_type'] == 2\
                        #and self.piece_map[int(o['pce_id'])] != i:
                         #self.pce_m[i][self.piece_map[int(o['pce_id'])]] = 2
                         
                     #print i, self.dst_pce[dst], len(self.pce_m[i])
     
     graph_algorithms._print_matrix(self.pce_m)
Exemplo n.º 2
0
def dislodge(pce_id, ter_id, exclude):
    """ Moves specified piece to a territory adjacent to ter_id but not in exclude.
        Returns True if successful, False if not.
    """
    for adj_ter in db.callproc('terr_adj', ter_id):
        #print adj_ter
        if not db.callproc('terr_occupied', adj_ter['ter_id']) and adj_ter['ter_id'] not in exclude:
            db.callproc('move_piece', pce_id, adj_ter['ter_id'])
            return True
    return False
Exemplo n.º 3
0
def has_dst(pce_id):
    orders_for_piece = db.callproc('orders_for_piece', pce_id)
    if orders_for_piece:
        piece_order = orders_for_piece[0]
        return bool(piece_order['has_dst'])
    
    return False
Exemplo n.º 4
0
def has_op(pce_id):
    orders_for_piece = db.callproc('orders_for_piece', pce_id)
    if orders_for_piece:
        piece_order = orders_for_piece[0]
        return bool(piece_order['operands'])
    
    return False
Exemplo n.º 5
0
 def __init__(self, gam_id):
     self.gam_id = gam_id
     self.terr_list = sorted(
         [int(row['ter_id']) for row in db.callproc('terrs_in_game', gam_id)]
     )
     self.terr_map = dict([(t, i) for i, t in enumerate(self.terr_list)])
     #self.terr_map = dict([(self.terr_list[i], i) for i in xrange(len(self.terr_list))])
     self.ter_m = [[0 for x in self.terr_list] for y in self.terr_list]
     for ter_id in self.terr_list:
         for row in db.callproc('terr_adj', ter_id):
             ter = self.terr_map[ter_id]
             adj = self.terr_map[row['ter_id']]
             self.ter_m[ter][adj] = 1
         self.ter_m[ter][ter] = 1
     
     self.get_orders()
     self.create_moves()
     self.create_supports()
Exemplo n.º 6
0
 def get_orders(self):
     pieces_for_game = db.callproc('pieces_for_game', self.gam_id)
     self.pieces = [int(p['pce_id']) for p in pieces_for_game]
     self.pieces_info = dict(zip(self.pieces, pieces_for_game))
     #[(int(p['pce_id']), p) for p in db.callproc('pieces_for_game', self.gam_id)]
     #self.pieces = sorted(self.pieces_info.keys())
     self.piece_map = dict([(pce_id, i) for i, pce_id in enumerate(self.pieces)])
     
     self.orders = db.callproc('orders_for_game', self.gam_id)
     self.operands = db.callproc('operands_for_game', self.gam_id)
     
     #print self.pieces
     self.loc_pce = dict([
                     (int(self.pieces_info[pce_id]['ter_id']), i) 
                             for i, pce_id in enumerate(self.pieces)
                     ])
     self.pce_loc = dict([
                     (self.loc_pce[ter_id], ter_id) 
                             for ter_id in self.loc_pce.keys()
                     ])
     #print self.loc_pce, self.pce_loc
     self.dst_pce = dict([
                     (int(o['destination']), self.piece_map[int(o['pce_id'])]) 
                             for o in self.orders 
                             if o['destination'] != None
                     ])
     self.pce_dst = dict([
                     (self.dst_pce[ter_id], ter_id) 
                             for ter_id in self.dst_pce.keys()
                     ])
     #print self.dst_pce, self.pce_dst
     #self.op_pce = dict([
                     #(int(o['ter_id']), self.piece_map[int(o['pce_id'])]) 
                             #for o in self.operands if o['ter_id'] and o['pce_id']
                     #])
     #self.pce_op = dict([
                     #(self.op_pce[ter_id], ter_id) 
                             #for ter_id in self.op_pce.keys()
                     #])
     #print self.op_pce, self.pce_op
     
     self.pce_m = [[0 for x in self.pieces] for y in self.pieces]
Exemplo n.º 7
0
 def create_moves(self):
 
     for i, pce_id in enumerate(self.pieces):
         for row in db.callproc('orders_for_piece', pce_id):
             dst = row['destination']
             order_type = int(row['order_type'])
             if dst and order_type == 1:
                 #print order_type, len(db.callproc('orders_for_piece', pce_id)), pce_id
                 if self.loc_pce.has_key(dst) and self.loc_pce[dst] != i:
                     self.pce_m[i][self.loc_pce[dst]] = 1
                 for o in self.orders:
                     if o['destination'] == dst and o['order_type'] == 1\
                        and self.piece_map[int(o['pce_id'])] != i:
                         self.pce_m[i][self.piece_map[int(o['pce_id'])]] = 1
                         
                     #print i, self.dst_pce[dst], len(self.pce_m[i])
     
     graph_algorithms._print_matrix(self.pce_m)
Exemplo n.º 8
0
def execute(pce_id):
    """So far, only supports move orders"""
    order = db.callproc('orders_for_piece', pce_id)
    if order and order[0]['order_type'] == 1:
        db.callproc('move_piece', pce_id, order[0]['destination'])
        print "Move order by", pce_id, "executed<br>"