Commit beb9f486 authored by Mestari Yousra's avatar Mestari Yousra
Browse files

code grille serveur

parent ef733606
Loading
Loading
Loading
Loading

grille_serveur.py

0 → 100644
+104 −0
Original line number Diff line number Diff line
import time
import zmq
import numpy as np
import builtins

context = zmq.Context()
socket = context.socket(zmq.ROUTER)
socket.bind("tcp://*:5555")



def f(c):
    return ord(c)-ord("A")+1

def grille(J,bateaux):
	socket.send_multipart([J.addr,b'',b"Comment vous appelez-vous?"])
	J.addr,empty,nom=socket.recv_multipart()
	print(nom.decode())
	J.nom=nom.decode()
	J.addr=addr
	#constituer sa grille
	position={}
	M=J.grille        
	for elem in bateaux:
		#1er case du bateau
		validation="non"
		socket.send_multipart([J.addr,b'',validation.encode()])
		while validation!="ok":
			question="Ou voulez-vous mettre la tete du " + elem.nom + "?"
			question=question.encode()            
			socket.send_multipart([J.addr,b'',question])
			J.addr,empty,tete=socket.recv_multipart()
			tete=tete.decode()
			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:
				socket.send_multipart([J.addr,b'',b"Cette case est deja occupee"])
				socket.send_multipart([J.addr,b'',validation.encode()])
			#lister les possibilites de placement
			else:
				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]
				print('possibilites = ' + poss)
				print(possibilites_cases)
		        #derniere case du bateau             
				question="Ou voulez-vous mettre la queue du " + elem.nom + " parmi les ssibilites : " + poss + "?"
				socket.send_multipart([J.addr,b'',question.encode()])
				J.addr,empty,queue=socket.recv_multipart()
				queue=queue.decode()
				m=f(queue[0])-1
				n=int(queue[1])-1
				if len(queue)==3:
					n=9
				print(m,n)
				if (m,n) not in possibilites_cases:
					socket.send_multipart([J.addr, b'', b"Cette combinaison n'est pas valable"])
					socket.send_multipart([J.addr,b'',validation.encode()])	
				else:
		        #placement du bateau                
					if k==m:
						for i in range(min(l,n),max(l,n)+1):
							M[k][i]=1
							position[(k,i)]=elem,1
					if l==n:
						for i in range(min(k,m),max(k,m)+1):
							M[i][l]=1
							position[(i,l)]=elem,1
					validation="ok"
					socket.send_multipart([J.addr,b'',validation.encode()])
		return([M,position])
 No newline at end of file