2013-01-12 57 views
3

我试图做一个简单的游戏,但不能理解如何使它工作并通过网络发送更多的东西。它第一次运作,但它应该去10次。它现在只发送1个随机数,但我希望它在游戏再次发送时发送一个新数字,并且需要一个新数字。Python网络/套接字编程,简单游戏

服务器

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)) 

客户

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" 

回答

2

你需要线程听从你的命令。

示例代码

# 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() 

processConnection看起来就像这样:

# 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() 

更新1

如果您需要的服务器,以保持与客户交谈,然后做这个。服务器将等待客户端发回消息。如果客户端发送任何东西,服务器将返回一个随机数。如果客户端不需要数据,只需关闭连接,服务器循环将结束。

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

嗯,不能让这个工作:(它仍然只是发送要求,然后停止 – user1972508

+0

这正是它应该是什么它呢?一个接一个地发送10个随机数字? – ATOzTOA

+0

当服务器需要一个,但它只能工作1次,像以前一样:)我怎样才能让它工作10次? :P – user1972508