0

下面是我必须创建的一个简单游戏的 Python 代码,现在我很难分离代码以使用套接字在客户端和服务器上玩游戏。任何帮助,将不胜感激

import random
rannum = random.randrange(0,10,1)
print rannum
counter = 0
a=0

while(a==0):
    guess = int(raw_input("What is your guess?: "))
    counter = counter + 1

    diff = abs(guess - rannum)
    if(diff >5):
        print "Way Off!"
    elif(diff >2):
        print "Close!"
    elif (diff>1):
        print "Closer!"
    elif(diff >0):
        print "Even Closer!"

    elif (diff==0):
        print "Correct"
        name = str(raw_input("What is your name?: "))
        print name + " Your score is: "
        print counter
        f = open('high_scores.txt', 'a')
        score = str(counter)
        f.write(name + " " + score + "\n")
        f.close()
        break
4

2 回答 2

1

代码中的客户端接口只是raw_input函数和print语句。实际上,您需要做的就是将它们转换为recvsend在套接字上调用,然后您就拥有了一个服务器。或者,更简单地说,将套接字包装进去makefile,然后只写和读行:

import random
import socket
rannum = random.randrange(0,10,1)
print rannum
counter = 0
a=0

sock = socket.socket()
sock.bind(('127.0.0.1', 12345))
sock.listen(5)
clientsock, addr = sock.accept()
client = clientsock.makefile('r+')

while(a==0):
client.write('What is your guess?: ')
guess = int(client.readline())
counter = counter + 1

diff = abs(guess - rannum)
if(diff >5):
    client.write("Way Off!\n")

…

您甚至可以在不编写客户端的情况下进行测试,只需使用nc localhost 12345. (如果您在 Windows 上,则没有nc内置的;谷歌“netcat Windows”并为自己获取一份副本。)然后只需查看文档socket.connect,您应该能够编写客户端。

现在,您可能想要稍微重新组织一下您的界面。也许客户端应该提供提示并格式化结果(例如,您可以在同一台服务器上拥有不同的英语和西班牙语客户端——或者更好的是,一个好的 GUI 客户端)。为此,您需要为客户端和服务器设计某种协议以用于通信。(事实上​​,即使是上面的简单示例也有一个隐含的协议:每个提示、响应等都由换行符分隔。我通过使用makefile和“欺骗”readline来自动处理它。但是弄清楚如何分隔消息——换行符、长度——前缀等——只是第一步。)

您可能还需要考虑是否真的要设计一个位于 TCP 之上的“原始”协议,或者使用为您处理低级内容的东西(Web 服务、基于套接字的 JSON-RPC 等) .) 所以你只需要自己编写特定于应用程序的东西。

最后,这是一个非常非常糟糕的服务器。它只接受一个客户端,并且同步进行所有操作,所以如果客户端搞砸了,服务器就无法恢复。真正的服务器需要所谓的“反应器”或“前导器”(您可以使用 构建自己的select.select,或使用asyncore或第三方之类的东西twisted),或者需要为每个accept.

于 2012-11-07T09:20:02.217 回答
0

这个问题不是很清楚,但是您应该首先尝试定义客户端中的内容和服务器上的内容。在你的情况下,它应该是这样的:

  • 客户端上的用户交互(提示和获取值)
  • 随机值生成、用户输入验证和服务器上的高分管理

然后你必须考虑客户端和服务器如何通信:你如何开始一个新游戏,管道需要做什么(一个方向的猜测值,另一个方向的猜测质量)......

于 2012-11-07T09:19:11.143 回答