Commit 673012228597e7019d1fbef32e02a91b7f075482

Authored by Mestari Yousra
1 parent a7334e5d

algo fonctionnel

Showing 1 changed file with 40 additions and 97 deletions   Show diff stats
grille_serveur.py
1   -import time
2   -import zmq
  1 +
3 2 import numpy as np
4   -import builtins
5 3  
6   -context = zmq.Context()
7   -socket = context.socket(zmq.ROUTER)
8   -socket.bind("tcp://*:5555")
  4 +def f(c):
  5 + return ord(c)-ord("A")+1
9 6  
  7 +def split(c,sep):
  8 + L=[]
  9 + while len(c)!=0:
  10 + i=c.index(sep)
  11 + L.append(c[:i])
  12 + c=c[i+1:len(c)]
  13 + return L
10 14  
11 15  
12   -def f(c):
13   - return ord(c)-ord("A")+1
14 16  
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
  17 +def grille(chaine):
  18 + #reconstituer la grille
  19 + M=np.zeros((10,10))
22 20 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])
105 21 \ No newline at end of file
  22 + liste=split(chaine,",")
  23 + for elem in liste:
  24 + A=split(elem+":",":")
  25 + nom=A[0]
  26 + pos=A[1]
  27 + pos=split(pos+"-","-")
  28 + tete=pos[0]
  29 + k=f(tete[0])-1
  30 + l=int(tete[1])-1
  31 + #gerer le cas de la 10eme colonne
  32 + if len(tete)==3:
  33 + l=9
  34 + queue=pos[1]
  35 + m=f(queue[0])-1
  36 + n=int(queue[1])-1
  37 + if len(queue)==3:
  38 + n=9
  39 + if k==m:
  40 + for i in range(min(l,n),max(l,n)+1):
  41 + M[k][i]=1
  42 + position[(k,i)]=nom,max(l,n)-min(l,n)+1,1
  43 + if l==n:
  44 + for i in range(min(k,m),max(k,m)+1):
  45 + M[i][l]=1
  46 + position[(i,l)]=nom,max(k,m)-min(k,m)+1,1
  47 +
  48 + return(M,position)
106 49 \ No newline at end of file
... ...