Problema joc - socket python
Last Updated: May 16 2017 22:37, Started by
serjnho
, May 13 2017 10:17
·
0
#1
Posted 13 May 2017 - 10:17
Salutare,
Imi cer scuze daca s-a mai postat problema asta anterior. Incerc sa fac un joc(x si 0) sa functioneze in Ubuntu in limbajul Python 2.7 dar m-am blocat in anumite locuri. Ideea este sa creez un server care sa dirijeze doi clienti. Problema: Serverul trimite tabelul si mesajul ca e mutarea clientului x : sendBoards() client_list[currentPlayer].sendall('Mutarea ta') Clientul primeste atat tabela cat si randul cu Mutarea ta. Doar ca pe client am facut un IF astfel incat sa merg mai departe in functie de ultimul mesaj, in cazul de fata Mutarea ta : data = s.recv(BUFFER) print data, '\n' if (data == 'Mutarea ta'): In cazul de fata data nu cuprinde doar ultimul rand('Mutarea ta'), ci tot bufferul.. Cum as putea sa modific astfel incat sa am la argument la IF ultimul rand din buffer ? Multumesc anticipat. |
#2
Posted 13 May 2017 - 10:59
Introduci un separator gen \n care sa te ajute sa spargi ce primesti in mesaje individuale. Neaparat verifici sa ai mereu separatorul la final, altfel poate primesti doar Mutar intr-un apel la recv si-l interpretezi gresit, cand defapt restul e inca "pe fir".
|
#3
Posted 13 May 2017 - 11:38
Multumesc mult. Am incercat sa pun si separator. Pe client primesc mereu :
Current Board: ------------------ ___________ ___________ Mutarea ta Si eu in IF am : data = s.recv(BUFFER) print data, '\n' if (data == 'Mutarea ta'): Si data vad ca ia tot BUFFER nu doar ultimul rand.. |
#4
Posted 13 May 2017 - 11:39
#5
Posted 13 May 2017 - 11:49
pe server am facut asta:
sendBoards() client_list[currentPlayer].sendall('\nMutarea ta\n') print 'Se asteapta playerul', currentPlayer, '...\n' if (currentPlayer==0): client_list[1].sendall('Nu e inca randul tau') if (currentPlayer==1): client_list[0].sendall('Nu e inca randul tau') Pe client asta: data = s.recv(BUFFER) print data, '\n' if (data == '\nMutarea ta\n'): move = raw_input("Fa o mutare (Introdu 0-8): ") print 'Ai selectat ', move s.sendall(move) Inca nu ma pricep prea bine pe partea asta.. |
#6
Posted 13 May 2017 - 12:17
data = s.recv(...)
split data dupa \n => array de comenzi (mai putin ultima pe care o lasi acolo si o procesezi dupa ce mai primesti cel putin inca un \n) pentru fiecare element in comenzi, compari cu "Mutarea ta" sau altele |
#7
Posted 13 May 2017 - 12:23
dani.user, on 13 mai 2017 - 12:17, said:
data = s.recv(...) split data dupa \n => array de comenzi (mai putin ultima pe care o lasi acolo si o procesezi dupa ce mai primesti cel putin inca un \n) pentru fiecare element in comenzi, compari cu "Mutarea ta" sau altele |
#8
Posted 13 May 2017 - 12:39
def sendBoards():
printBoard() for i in range(0,2): theBoard = "" theBoard += '\nTabelul: \n\n'+' '+str(board[0])+' '+'|'+' '+str(board[1])+' '+'|'+' '+str(board[2])+'\n---+---+---\n'+' '+str(board[3])+' '+'|'+' '+str(board[4])+' '+'|'+' '+str(board[5])+'\n---+---+---\n'+' '+str(board[6])+' '+'|'+' '+str(board[7])+' '+'|'+' '+str(board[8])+'\n' client_list[i].sendall(theBoard) Asta e boardul.. |
#9
Posted 15 May 2017 - 05:54
Trebuie să citești tot bufferul, și apoi să îl parsezi și să extragi din el doar ce te interesează.
|
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users