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 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