2013-01-12 3 views
3

Im essayant de faire un jeu simple mais je ne peux pas comprendre comment le faire fonctionner et envoyer plus d'une chose sur le réseau. Ça marche la première fois mais ça doit aller 10 fois. Il n'envoie qu'un seul numéro au hasard mais je veux qu'il en envoie un nouveau quand le jeu recommence et que je veux un nouveau numéro.Python réseau/socket programmation, jeu simple

serveur

import socket, random    

sock = socket.socket() 
host = socket.gethostname() 
port = 12345 
sock.bind((host, port)) 
sock.listen(5) 

c, addr = sock.accept() 

cpu = random.choice(range(0, 3)) 
c.send(cpu) 

gameon = c.recv(int(1024)) 

client

import socket, random 

sock = socket.socket() # Create a socket object 
host = socket.gethostname() # Get local machine name 
port = 12345 # Reserve a port for your service. 
sock.connect((host, port)) 

GAMEON = 'Rock', 'Paper', 'Scissors' 
game = 0 
iwin = 0 
ilose = 0 
tie = 0 

while game < 10: 

    for i in range(0, 3): 
     print "%d %s" % (i + 1, GAMEON[i]) 

    player = int(input ("Choose from 1-3: ")) - 1 
    cpu = int(sock.recv(1024)) 
    print cpu 

    print"" 

    print "%s vs %s" % (GAMEON[player], GAMEON[cpu]) 
    print "" 
    if cpu != player: 
     if (player - cpu) % 3 < (cpu - player) % 3: 
     print "Player wins\n" 
     iwin += 1 
     else: 
     print "CPU wins\n" 
     ilose += 1 
    else: 
     print "TIE!\n" 
     tie += 1 
    game += 1 
    sock.send(str(game)) 
print"Game is done" 
print"you win: ", (iwin), "Times" 
print"computer wins: ", (ilose), "Times" 
print"tie: ", (tie), "Times" 

Répondre

2

Vous devez les discussions pour faire votre appel d'offres.

code Exemple

# Listen 
s.listen(10) 
print 'Socket now listening on port ' + str(PORT) + "..." 

while 1: 
    # wait 
    conn, addr = s.accept() 

    print 'Connected with ' + addr[0] + ":" + str(addr[1]) 

    # Let's fork a thread for each request 
    processThread = threading.Thread(target=processConnection, args=(conn, addr[0])); 
    processThread.start() 


s.close() 

Votre processConnection ressemblera à ceci:

# Process Connection 
def processConnection(conn, ip): 
    print "Thread started..." 
    print "-------------------------------------------------------------"; 

    cpu = random.choice(range(0, 3)) 
    conn.send(cpu) 

    gameon = conn.recv(int(1024)) 

    conn.close() 

Update 1

Si vous avez besoin du serveur pour continuer à parler avec le client, puis fais ceci. Le serveur attendra que le client renvoie un message. Si le client envoie quelque chose, le serveur renverra un nombre aléatoire. Si le client n'a plus besoin de données, fermez simplement la connexion et la boucle du serveur se terminera.

import socket, random    

sock = socket.socket() 
host = socket.gethostname() 
port = 12345 
sock.bind((host, port)) 
sock.listen(5) 

c, addr = sock.accept() 

white True: 
    cpu = random.choice(range(0, 3)) 
    c.send(cpu) 

    gameon = c.recv(int(1024)) 

    if gameon is None: 
     break 
+0

Hmm ne peux pas obtenir ce travail :(il encore juste envoyer sur demande arrêtez – user1972508

+0

C'est exactement ce qu'il fait quoi devrait Envoyer 10 numéros aléatoires l'un après l'autre? – ATOzTOA

+0

Non quand le serveur en a besoin mais il ne fonctionne qu'une fois comme avant :) Comment puis-je le faire fonctionner 10 fois? : P – user1972508