Commit 644f4499 authored by Mestari Yousra's avatar Mestari Yousra
Browse files

algo fonctionnel

parent 67301222
Loading
Loading
Loading
Loading
+80 −28
Original line number Diff line number Diff line
import zmq
import numpy as np

context = zmq.Context()

@@ -7,35 +8,86 @@ context = zmq.Context()
socket = context.socket(zmq.DEALER)
socket.connect("tcp://147.250.9.87:5555")

def grille_client(J):
	for i in range(5):
def f(c):
    return ord(c)-ord("A")+1
    
def grille_client(bateaux):
	chaine=''
	position={}
	M=np.zeros((10,10))
	for elem in bateaux:
		validation="non"

		#verifier que les bateaux sont bien mis
		empty,validation=socket.recv_multipart()
		while validation.decode() != "ok":

		while validation != "ok":
			#question de la tete
			empty,reponse=socket.recv_multipart()
			print(reponse.decode())
			#reponse de la tete
			position_avant=input()
			socket.send_multipart([b'',position_avant.encode()])
			empty,reponse=socket.recv_multipart()
			#tete illegale
			if reponse.decode()=="Cette case est deja occupee":
				print(reponse.decode())
				empty,validation=socket.recv_multipart()
			#tete legale
			question= "Ou voulez-vous mettre la tete du " + elem.nom + "?"
			tete=input(question +"\n")
			k=f(tete[0])-1
			l=int(tete[1])-1
			#gerer le cas de la 10eme colonne
			if len(tete)==3:
				l=9
			#verifier que la case est libre            
			if M[k][l]!=0:
				print("Cette case est deja occupee")
			#lister les possibilites de placement
			else:
				#question de la queue
				print(reponse.decode())
				#reponse de la queue
				position_queue=input()
				socket.send_multipart([b'',position_queue.encode()])
				empty,reponse=socket.recv_multipart()
				#queue illegale
				if reponse.decode()=="Cette combinaison n'est pas valable":
					print(reponse.decode())
					empty,validation=socket.recv_multipart()
				#queue legale
				possibilites=[]
				a,b,c,d=0,0,0,0
				for case in range(0,elem.longueur):    
					#horizontal a gauche                    
					if k-elem.longueur<-1 or M[k-case][l]!=0:
						a+=1
				    #horizontal a droite
					if k+elem.longueur>10 or M[k+case][l]!=0:
						b+=1
		            #vertical en haut
					if l-elem.longueur<-1 or M[k][l-case]!=0:
						c+=1
		            #vertical en bas
					if l+elem.longueur>10 or M[k][l+case]!=0:
						d+=1
				possibilites_cases=[]
				if a==0:
					possibilites.append(chr(64+k-elem.longueur+2)+ str(l+1))
					possibilites_cases.append((k-elem.longueur+1,l))
				if b==0:
					possibilites.append(chr(64+k+elem.longueur)+str(l+1))
					possibilites_cases.append((k+elem.longueur-1,l))
				if c==0:
					possibilites.append(chr(k+65) +str(l-elem.longueur+2))
					possibilites_cases.append((k,l-elem.longueur+1))
				if d==0:
					possibilites.append(chr(k+65) +str(l+elem.longueur))
					possibilites_cases.append((k,l+elem.longueur-1))
				poss=''
				for possi in possibilites:
					poss+=possi+', '
				poss=poss[:-2]
		        #derniere case du bateau             
				question="Ou voulez-vous mettre la queue du " + elem.nom + " parmi les possibilites : " + poss + "?"
				queue=input(question + "\n")
				m=f(queue[0])-1
				n=int(queue[1])-1
				if len(queue)==3:
					n=9
				if (m,n) not in possibilites_cases:
					print("Cette combinaison n'est pas valable")
				else:
					empty,validation=socket.recv_multipart()
	return						
 No newline at end of file
		        #placement du bateau                
					chaine=chaine+elem.nom +':'+ tete + "-"+ queue + ','
					
					#a mettre dans une fonction annexe pour le serveur et
					if k==m:
						for i in range(min(l,n),max(l,n)+1):
							M[k][i]=1
							position[(k,i)]=elem.nom,elem.longueur,1
					if l==n:
						for i in range(min(k,m),max(k,m)+1):
							M[i][l]=1
							position[(i,l)]=elem.nom,elem.longueur,1
					print(M)
					validation="ok"
	return(M,position,chaine)