Esempio n. 1
0
	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
Esempio n. 2
0
	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
Esempio n. 3
0
	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])