Python网络/套接字编程,简单的游戏

时间:2013-01-12 16:08:33

标签: python

我试图制作一个简单的游戏,但无法理解如何使其工作并通过网络发送更多的东西。它第一次工作,但它应该去10次。它现在只发送1个随机数,但我希望它在游戏再次发送时发送一个新的并想要一个新号码。

服务器

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

问题是您的服务器将提供一个请求然后停止。你需要把它放在某种while循环中。

我在Python中编写了一个基本的IM服务器/客户端,它可以帮助您:https://github.com/hdgarrood/PyMess/blob/master/server/basictcpserver.py#L59