def scelta_presa(self, carta, prese_possibili): self.mazzo.hide() self.carte_terra.hide_all() for player in self.players: player.mano.hide_all() player.carte_prese.hide() index = self.notifiche.notify(_('What do you take?'),0) boxes=[] n=0 while n<len(prese_possibili): box = widgets.Box(self.app,1,len(prese_possibili[n])) box.set_position(10,n*(box.get_height()+10)) self.app.stage.add_actor(box) boxes.append(box) i=0 while i < len(prese_possibili[n]): card = widgets.Card(prese_possibili[n][i].suit,prese_possibili[n][i].value) card.set_reactive(True) card.connect('button-press-event',self.scelta_fatta,boxes,carta,prese_possibili[n],index) box.add(card,0) i=i+1 n=n+1
def show_last_move(self): if self.giocatore == 1: self.mazzo.hide() self.carte_terra.hide_all() for player in self.players: player.mano.hide_all() player.carte_prese.hide() index = self.notifiche.notify(_('%s played ... and took ...'%self.players[-1].name),0) boxes=[] n=0 while n<len(self.ultima_presa): box = widgets.Box(self.app,1,len(self.ultima_presa[n])) box.set_position(10,n*(box.get_height()+10)) self.app.stage.add_actor(box) boxes.append(box) i=0 while i < len(self.ultima_presa[n]): card = widgets.Card(self.ultima_presa[n][i].suit,self.ultima_presa[n][i].value) card.set_reactive(True) card.connect('button-press-event',self.app.hide_last_move,None,(boxes,index)) box.add(card,0) i=i+1 n=n+1 return boxes,index
def gioca_ai(self): carte_mano = self.players[self.giocatore].mano.get_list() carte_terra = self.carte_terra.get_list() giocate = [] no_prese = 1 n = 0 i = 0 for carta in carte_mano: prese_possibili = self.prese(carta) if prese_possibili != [[]]: no_prese = 0 for presa in prese_possibili: giocate.append([carta, presa]) #se solo 1 giocata possibile if len(giocate) == 1: migliore = giocate[0] #se non si puo' prendere else: migliore = [carte_mano[0],[],-1000] for giocata in giocate: par = [] flag = no_prese ### no_prese = 1 #2 carte uguali n = 0 for carta in carte_mano: if carta.value == giocata[0].value: n = n+1 par.append((n>=2)*flag) #non denari par.append((giocata[0].suit != 0)*flag) #non 7 par.append((giocata[0].value != 7)*flag) #carta piu' bassa n = 0 for carta in carte_mano: if carta.value >= giocata[0].value: n = n + 1 par.append((n == len(carte_mano))*flag) #non 7 a terra n=0 if len(self.prese(widgets.Card(0,7),carte_terra+[giocata[0]])) != 0: n=1 par.append(n*flag) #presa dopo presa_dopo = 0 for carta in carte_mano: if carta != giocata[0]: if len(self.prese(carta,carte_terra+[giocata[0]])) != 0: presa_dopo += 1 par.append(presa_dopo*flag) #carte avversario conosciute scopa_avversario = 0 presa_avversario = 0 if self.players[self.next()].scoperte: for carta in self.players[self.next()].mano.get_list(): for presa in self.prese(carta, carte_terra+[giocata[0]]): if len(presa) == len(carte_terra)+1: scopa_avversario = 1 presa_avversario = 1 par.append(scopa_avversario*flag) par.append((not scopa_avversario)*presa_avversario*flag) #scopa avversario valore_terra = giocata[0].value for carta in carte_terra: valore_terra += carta.value par.append((not scopa_avversario)*(valore_terra <= 10)*flag) ### no_prese=0 flag = not no_prese #scopa par.append((len(giocata[1]) == len(carte_terra))*flag) # valore_terra = 0 carte_da_lasciare=[] for carta in carte_terra: if not carta in giocata[1]: valore_terra += carta.value carte_da_lasciare.append(carta) if giocata[1] == []: valore_terra += giocata[0].value carte_da_lasciare.append(giocata[0]) #carte avversario conosciute scopa_avversario = 0 presa_avversario = 0 if self.players[self.next()].scoperte: for carta in self.players[self.next()].mano.get_list(): for presa in self.prese(carta, carte_da_lasciare): if len(presa) == len(carte_da_lasciare): scopa_avversario = 1 presa_avversario = 1 par.append(scopa_avversario*flag) par.append((not scopa_avversario)*presa_avversario*flag) #probabile scopa avversario par.append((not scopa_avversario)*(valore_terra <= 10)*flag) ### se non si prende niente flag = (not no_prese)*(len(giocata[1]) == 0) #non denaro par.append((giocata[0].suit != 0)*flag) #non 7 par.append((giocata[0].value != 7)*flag) #carta piu' bassa for carta in carte_mano: if carta.value > giocata[0].value: n = n + 1 par.append((n == len(carte_mano))*flag) ### se si prende qualcosa flag = (not no_prese)*(len(giocata[1]) != 0) carte_da_prendere=list(giocata[1]) carte_da_prendere.append(giocata[0]) #numero carte prese par.append(len(carte_da_prendere)*flag) tmp = [0,0,0,0,0] for carta in carte_da_prendere: #se denaro if carta.suit == 0: tmp[0] += 1 #se sette if carta.value == 7: tmp[1] += 1 #se sette bello if carta.suit == 0: tmp[2] += 1 #se sei if carta.value == 6: tmp[3] += 1 #se asso if carta.value == 1: tmp[4] += 1 for v in tmp: par.append(v*flag) value = self.players[self.giocatore].value(par, ai_values) if value > migliore[2]: migliore[0], migliore[1], migliore[2] = giocata[0], giocata[1], value self.gioca_carta(self.giocatore,migliore[0],migliore[1])