Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.86 KB | None | 0 0
  1. import socket
  2.  
  3.  
  4. class Server:
  5. def __init__(self):
  6. self._host = '192.168.100.12'
  7. self._port = 8090
  8. self._nr_players = None
  9. self._server = None
  10. self._connections = list()
  11. self._usernames = list()
  12. self._words = list()
  13. self._nr_conns = 0
  14. self._endgame_words = list()
  15.  
  16. @property
  17. def host(self):
  18. return self._host
  19.  
  20. @property
  21. def port(self):
  22. return self._port
  23.  
  24. @property
  25. def nr_players(self):
  26. return self._nr_players
  27.  
  28. @nr_players.setter
  29. def nr_players(self, nr_players):
  30. self._nr_players = nr_players
  31.  
  32. def read_number_of_players(self):
  33. self.nr_players = int(input("Number of players: "))
  34.  
  35. def set_server(self):
  36. self._server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  37. self._server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  38. self._server.bind((self.host, self.port))
  39. self._server.listen(10)
  40.  
  41. def get_list_of_endgame_words(self):
  42. self._endgame_words = ["nt", "tz"]
  43.  
  44. def run(self):
  45. self.get_list_of_endgame_words()
  46. self.read_number_of_players()
  47. self.set_server()
  48.  
  49. print("Serverul de joc a fost pornit!")
  50.  
  51. while self._nr_conns < self.nr_players:
  52. conn, addr = self._server.accept()
  53.  
  54. username = conn.recv(1024).decode("utf-8")
  55.  
  56. if username in self._usernames:
  57. conn.send('username_taken'.encode())
  58. else:
  59. self._connections.append(conn)
  60. self._usernames.append(username)
  61. self._nr_conns = len(self._connections)
  62.  
  63. if self._nr_conns == self.nr_players:
  64. message = "Jocul a început!"
  65. elif self._nr_conns == self.nr_players - 1:
  66. message = "Jocul va începe în curând. Mai este nevoie de un jucător."
  67. else:
  68. message = "Jocul va începe în curând. Mai este nevoie de {} jucători".format(
  69. self.nr_players - self._nr_conns)
  70.  
  71. conn.send(message.encode())
  72. print("Jucatorul cu username-ul {} s-a alaturat jocului.".format(username))
  73.  
  74. while self._nr_conns > 1:
  75. for i in range(0, self._nr_conns):
  76. if self._words:
  77. print(self._connections)
  78. print(i)
  79. last_letters = self._words[len(self._words)-1][-2::]
  80. message = "Introdu un cuvânt care să înceapă cu literele {}: ".format(last_letters)
  81. self._connections[i].send(message.encode())
  82. word = self._connections[i].recv(1024).decode('utf-8')
  83. current_username = self._usernames[i]
  84.  
  85. if word[-2:] in self._endgame_words:
  86. for j in range(0, self._nr_conns):
  87. message = "Jucatorul {} a spus cuvantul {} care v-a inchis si a castigat jocul!".format(
  88. current_username, word)
  89. self._connections[j].send(message.encode())
  90. self._connections[j].recv(1024)
  91.  
  92. self._connections[i].send("Felicitari! Ai castigat!".encode())
  93. self._connections[i].close()
  94. self._connections.remove(self._connections[i])
  95.  
  96. for k in range(0, len(self._connections)):
  97. self._connections[k].send('Ai fost eliminat!'.encode())
  98. self._connections[k].close()
  99. self._connections.remove(self._connections[k])
  100.  
  101. elif word[:2] == last_letters:
  102. self._words.append(word)
  103.  
  104. for j in range(0, self._nr_conns):
  105. message = 'Jucatorul ' + current_username + ' a spus cuvantul ' + word
  106. self._connections[j].send(message.encode())
  107. self._connections[j].recv(1024)
  108. else:
  109. for j in range(0, self._nr_conns):
  110. message = "Jucatorul {} a spus cuvantul {} si a fost eliminat!".format(
  111. current_username, word)
  112. self._connections[j].send(message.encode())
  113. self._connections[j].recv(1024)
  114.  
  115. self._connections[i].send('Ai fost eliminat!'.encode())
  116. print('Jucătorul ' + self._usernames[i] + ' a fost eliminat!')
  117. self._usernames.remove(self._usernames[i])
  118. self._connections[i].close()
  119. self._connections.remove(self._connections[i])
  120. self._words = []
  121. break
  122. else:
  123. message = 'Esti primul. Introdu un cuvant: '
  124. self._connections[i].send(message.encode())
  125. word = self._connections[i].recv(1024).decode('utf-8')
  126. self._words.append(word)
  127. current_username = self._usernames[i]
  128. for j in range(0, self._nr_conns):
  129. message = 'Jucatorul ' + current_username + ' a spus cuvantul ' + word
  130. self._connections[j].send(message.encode())
  131. self._connections[j].recv(1024)
  132.  
  133. self._nr_conns = len(self._usernames)
  134.  
  135. print("Castigatorul jocului este {}".format(self._usernames[0]))
  136. self._connections[0].send('Felicitari! Ai castigat!'.encode())
  137. self._connections[0].close()
  138.  
  139. self._server.close()
  140.  
  141.  
  142. if __name__ == '__main__':
  143. server = Server()
  144. server.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement