Commit beb9f4862d6fe3eef741821b6751f80ec2168538

Authored by Mestari Yousra
1 parent ef733606

code grille serveur

Showing 1 changed file with 104 additions and 0 deletions   Show diff stats
grille_serveur.py 0 → 100644
... ... @@ -0,0 +1,104 @@
  1 +import time
  2 +import zmq
  3 +import numpy as np
  4 +import builtins
  5 +
  6 +context = zmq.Context()
  7 +socket = context.socket(zmq.ROUTER)
  8 +socket.bind("tcp://*:5555")
  9 +
  10 +
  11 +
  12 +def f(c):
  13 + return ord(c)-ord("A")+1
  14 +
  15 +def grille(J,bateaux):
  16 + socket.send_multipart([J.addr,b'',b"Comment vous appelez-vous?"])
  17 + J.addr,empty,nom=socket.recv_multipart()
  18 + print(nom.decode())
  19 + J.nom=nom.decode()
  20 + J.addr=addr
  21 + #constituer sa grille
  22 + position={}
  23 + M=J.grille
  24 + for elem in bateaux:
  25 + #1er case du bateau
  26 + validation="non"
  27 + socket.send_multipart([J.addr,b'',validation.encode()])
  28 + while validation!="ok":
  29 + question="Ou voulez-vous mettre la tete du " + elem.nom + "?"
  30 + question=question.encode()
  31 + socket.send_multipart([J.addr,b'',question])
  32 + J.addr,empty,tete=socket.recv_multipart()
  33 + tete=tete.decode()
  34 + k=f(tete[0])-1
  35 + l=int(tete[1])-1
  36 + #gerer le cas de la 10eme colonne
  37 + if len(tete)==3:
  38 + l=9
  39 + #verifier que la case est libre
  40 + if M[k][l]!=0:
  41 + socket.send_multipart([J.addr,b'',b"Cette case est deja occupee"])
  42 + socket.send_multipart([J.addr,b'',validation.encode()])
  43 + #lister les possibilites de placement
  44 + else:
  45 + possibilites=[]
  46 + a,b,c,d=0,0,0,0
  47 + for case in range(0,elem.longueur):
  48 + #horizontal a gauche
  49 + if k-elem.longueur<-1 or M[k-case][l]!=0:
  50 + a+=1
  51 + #horizontal a droite
  52 + if k+elem.longueur>10 or M[k+case][l]!=0:
  53 + b+=1
  54 + #vertical en haut
  55 + if l-elem.longueur<-1 or M[k][l-case]!=0:
  56 + c+=1
  57 + #vertical en bas
  58 + if l+elem.longueur>10 or M[k][l+case]!=0:
  59 + d+=1
  60 + possibilites_cases=[]
  61 + if a==0:
  62 + possibilites.append(chr(64+k-elem.longueur+2)+ str(l+1))
  63 + possibilites_cases.append((k-elem.longueur+1,l))
  64 + if b==0:
  65 + possibilites.append(chr(64+k+elem.longueur)+str(l+1))
  66 + possibilites_cases.append((k+elem.longueur-1,l))
  67 + if c==0:
  68 + possibilites.append(chr(k+65) +str(l-elem.longueur+2))
  69 + possibilites_cases.append((k,l-elem.longueur+1))
  70 + if d==0:
  71 + possibilites.append(chr(k+65) +str(l+elem.longueur))
  72 + possibilites_cases.append((k,l+elem.longueur-1))
  73 + poss=''
  74 + for possi in possibilites:
  75 + poss+=possi+', '
  76 + poss=poss[:-2]
  77 + print('possibilites = ' + poss)
  78 + print(possibilites_cases)
  79 + #derniere case du bateau
  80 + question="Ou voulez-vous mettre la queue du " + elem.nom + " parmi les ssibilites : " + poss + "?"
  81 + socket.send_multipart([J.addr,b'',question.encode()])
  82 + J.addr,empty,queue=socket.recv_multipart()
  83 + queue=queue.decode()
  84 + m=f(queue[0])-1
  85 + n=int(queue[1])-1
  86 + if len(queue)==3:
  87 + n=9
  88 + print(m,n)
  89 + if (m,n) not in possibilites_cases:
  90 + socket.send_multipart([J.addr, b'', b"Cette combinaison n'est pas valable"])
  91 + socket.send_multipart([J.addr,b'',validation.encode()])
  92 + else:
  93 + #placement du bateau
  94 + if k==m:
  95 + for i in range(min(l,n),max(l,n)+1):
  96 + M[k][i]=1
  97 + position[(k,i)]=elem,1
  98 + if l==n:
  99 + for i in range(min(k,m),max(k,m)+1):
  100 + M[i][l]=1
  101 + position[(i,l)]=elem,1
  102 + validation="ok"
  103 + socket.send_multipart([J.addr,b'',validation.encode()])
  104 + return([M,position])
0 105 \ No newline at end of file
... ...