Compréhension sur les principes en python
Bonjour,
Je me permet de vous faire un petit poste pour connaitre vos avis sur mes quelques ligne de code, sachant que je vient du monde du C et du PHP cela fait quelque jours que je pratique le python... quel régale... j'adore
J'ai codée un petit jeu en réseau de célèbre "Plus" et "Moins" en plus complet bien-sur, je voulais connaitre vos critiques par rapport a mon code et aussi vos avis sur celui ci, le but de ma demande et savoir si je m’oriente dans le bon sens dans l'apprentissage de ce langage.
Partie Server :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
import socket
import random
import _thread
class GameServer:
""" Server class for gaming LESS/MORE/WINNER """
server = True
max_connected = 50
lock = False
number = 0
def __init__(self, host=socket.gethostbyname(socket.gethostname()),
port=random.randint(1025, 10000)):
""" Init parameter of game server
:param host:
:param port:
"""
self.host = host
self.port = port
""" Declare list for management users """
self.socket_list = list()
self.gamers = list()
self.number = random.randint(1, 100)
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.bind((self.host, self.port))
self.server.listen(self.max_connected)
self.lock = _thread.allocate_lock()
def renew(self):
""" Renew number """
self.number = random.randint(1, 100)
print('New game started, number is %i' % self.number)
def id(self):
""" Generate new gamer ID"""
game_id = 0
while game_id not in self.gamers:
game_id = random.randint(1, 1000)
self.gamers.append(game_id)
return game_id
def broadcast(self, winner):
""" Diffused information at other gamer"""
for gamer in self.socket_list:
gamer.send(GameServer.write('WINNER:%i' % winner))
def whoes(self):
""" Return number of users """
return len(self.gamers)
@staticmethod
def write(message):
""" Convert message to encode """
return str(message).encode()
def handler(self, client, game_id):
""" Thread client to liberate accept """
while True:
try:
request = client.recv(1024).decode()
if request == 'END':
print('Gamer %i has left the game...' % game_id)
self.gamers.remove(game_id)
client.close()
break
request = request.split(':')
if request[1] == 'WHOES':
client.send(GameServer.write('NB:%i' % self.whoes()))
continue
else:
r_number = int(request[1])
print('Received %i from %i' % (game_id, r_number))
if r_number == self.number:
self.broadcast(game_id)
print('Winner ! gamer %i' % game_id)
self.renew()
else:
if r_number < self.number:
client.send('MORE:0'.encode())
elif r_number > self.number:
client.send('LESS:0'.encode())
except ConnectionError:
print('lost connection with gamer %i ...' % game_id)
client.close()
def run(self):
""" Run server """
print('Server start on %s:%i ...' % (self.host, self.port))
print('Secret number is %i ' % self.number)
while True:
(gamer, addr) = self.server.accept()
game_id = self.id()
print('accept connection to %s : %s' % (str(addr), game_id))
self.socket_list.append(gamer)
gamer.send(str(game_id).encode())
_thread.start_new_thread(self.handler, (gamer, game_id,))
#Server start
game = GameServer(host='127.0.0.1', port=58005)
game.run() |
La partie client:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
import socket
Host = '127.0.0.1'
Port = 58005
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((Host, Port))
game_id = client.recv(1024)
game_id = str(game_id.decode())
print('My game id is: %s' % game_id)
while True:
command = game_id + ':' + input('Enter number: ').rstrip('\n')
client.send(command.encode())
reply = str(client.recv(1024).decode()).split(':')
code = reply[0]
if code == 'WINNER':
if reply[1] == game_id:
print('Your win !')
else:
print('Your loose... the winner is %s' % reply[1])
restart = input('Would you like to restart game ? [y/n]: ')
if restart == 'y':
continue
else:
client.send('END'.encode())
client.close()
break
else:
if code == 'MORE':
print('The number is superior')
elif code == 'LESS':
print('The number is inferior')
elif code == 'NB':
print('Number of connected %s' % reply[1])
else:
print('Impossible to parse response of server...')
continue |
Je vous remercies d'avance pour avoir pris le temps de lire le code :)
Excellente journée.
Divx.