首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python网络/套接字编程,简单的游戏

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

Stack Overflow用户
提问于 2013-01-13 00:08:33
回答 2查看 3.4K关注 0票数 3

我正在尝试做一个简单的游戏,但无法理解如何让它工作,并通过网络发送更多的东西。它第一次工作,但它应该运行10次。它现在只发送一个随机数,但我希望它在游戏再次进行时发送一个新的数字,并想要一个新的数字。

服务器

代码语言:javascript
复制
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))

客户端

代码语言:javascript
复制
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"
EN

回答 2

Stack Overflow用户

发布于 2013-01-13 00:12:05

你需要线程来做你的命令。

示例代码

代码语言:javascript
复制
# 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将如下所示:

代码语言:javascript
复制
# 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

如果您需要服务器与客户端保持对话,则执行以下操作。服务器将等待客户端发回一条消息。如果客户端发送任何内容,服务器将返回一个随机数。如果客户端不需要更多的数据,只需关闭连接,服务器循环就会结束。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2013-01-13 00:15:11

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

我用Python语言编写了一个基本的IM服务器/客户端,它可能会对您有所帮助:https://github.com/hdgarrood/PyMess/blob/master/server/basictcpserver.py#L59

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14295161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档