Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import socket
- class Server:
- def __init__(self):
- self._host = '192.168.100.12'
- self._port = 8090
- self._nr_players = None
- self._server = None
- self._connections = list()
- self._usernames = list()
- self._words = list()
- self._nr_conns = 0
- self._endgame_words = list()
- @property
- def host(self):
- return self._host
- @property
- def port(self):
- return self._port
- @property
- def nr_players(self):
- return self._nr_players
- @nr_players.setter
- def nr_players(self, nr_players):
- self._nr_players = nr_players
- def read_number_of_players(self):
- self.nr_players = int(input("Number of players: "))
- def set_server(self):
- self._server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self._server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- self._server.bind((self.host, self.port))
- self._server.listen(10)
- def get_list_of_endgame_words(self):
- self._endgame_words = ["nt", "tz"]
- def run(self):
- self.get_list_of_endgame_words()
- self.read_number_of_players()
- self.set_server()
- print("Serverul de joc a fost pornit!")
- while self._nr_conns < self.nr_players:
- conn, addr = self._server.accept()
- username = conn.recv(1024).decode("utf-8")
- if username in self._usernames:
- conn.send('username_taken'.encode())
- else:
- self._connections.append(conn)
- self._usernames.append(username)
- self._nr_conns = len(self._connections)
- if self._nr_conns == self.nr_players:
- message = "Jocul a început!"
- elif self._nr_conns == self.nr_players - 1:
- message = "Jocul va începe în curând. Mai este nevoie de un jucător."
- else:
- message = "Jocul va începe în curând. Mai este nevoie de {} jucători".format(
- self.nr_players - self._nr_conns)
- conn.send(message.encode())
- print("Jucatorul cu username-ul {} s-a alaturat jocului.".format(username))
- while self._nr_conns > 1:
- for i in range(0, self._nr_conns):
- if self._words:
- print(self._connections)
- print(i)
- last_letters = self._words[len(self._words)-1][-2::]
- message = "Introdu un cuvânt care să înceapă cu literele {}: ".format(last_letters)
- self._connections[i].send(message.encode())
- word = self._connections[i].recv(1024).decode('utf-8')
- current_username = self._usernames[i]
- if word[-2:] in self._endgame_words:
- for j in range(0, self._nr_conns):
- message = "Jucatorul {} a spus cuvantul {} care v-a inchis si a castigat jocul!".format(
- current_username, word)
- self._connections[j].send(message.encode())
- self._connections[j].recv(1024)
- self._connections[i].send("Felicitari! Ai castigat!".encode())
- self._connections[i].close()
- self._connections.remove(self._connections[i])
- for k in range(0, len(self._connections)):
- self._connections[k].send('Ai fost eliminat!'.encode())
- self._connections[k].close()
- self._connections.remove(self._connections[k])
- elif word[:2] == last_letters:
- self._words.append(word)
- for j in range(0, self._nr_conns):
- message = 'Jucatorul ' + current_username + ' a spus cuvantul ' + word
- self._connections[j].send(message.encode())
- self._connections[j].recv(1024)
- else:
- for j in range(0, self._nr_conns):
- message = "Jucatorul {} a spus cuvantul {} si a fost eliminat!".format(
- current_username, word)
- self._connections[j].send(message.encode())
- self._connections[j].recv(1024)
- self._connections[i].send('Ai fost eliminat!'.encode())
- print('Jucătorul ' + self._usernames[i] + ' a fost eliminat!')
- self._usernames.remove(self._usernames[i])
- self._connections[i].close()
- self._connections.remove(self._connections[i])
- self._words = []
- break
- else:
- message = 'Esti primul. Introdu un cuvant: '
- self._connections[i].send(message.encode())
- word = self._connections[i].recv(1024).decode('utf-8')
- self._words.append(word)
- current_username = self._usernames[i]
- for j in range(0, self._nr_conns):
- message = 'Jucatorul ' + current_username + ' a spus cuvantul ' + word
- self._connections[j].send(message.encode())
- self._connections[j].recv(1024)
- self._nr_conns = len(self._usernames)
- print("Castigatorul jocului este {}".format(self._usernames[0]))
- self._connections[0].send('Felicitari! Ai castigat!'.encode())
- self._connections[0].close()
- self._server.close()
- if __name__ == '__main__':
- server = Server()
- server.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement