Python网络/套接字编程,简单游戏
我试图做一个简单的游戏,但不知道如何让它工作,并发送超过一个东西在网络上。它第一次起作用,但应该能运行10次。它现在只发送1个随机数,但我希望它在游戏再次进行时发送一个新的随机数,并需要一个新的随机数 服务器Python网络/套接字编程,简单游戏,python,Python,我试图做一个简单的游戏,但不知道如何让它工作,并发送超过一个东西在网络上。它第一次起作用,但应该能运行10次。它现在只发送1个随机数,但我希望它在游戏再次进行时发送一个新的随机数,并需要一个新的随机数 服务器 import socket, random sock = socket.socket() host = socket.gethostname() port = 12345 sock.bind((host, port)) sock.listen(5) c,
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"
导入套接字,随机
sock=socket.socket()#创建套接字对象
host=socket.gethostname()#获取本地计算机名
端口=12345#为您的服务保留一个端口。
sock.connect((主机、端口))
GAMEON=‘石头’、‘布’、‘剪刀’
游戏=0
iwin=0
ilose=0
平局=0
当游戏<10时:
对于范围(0,3)内的i:
打印“%d%s%”(i+1,游戏机[i])
player=int(输入(“从1-3中选择:”)-1
cpu=int(sock.recv(1024))
打印cpu
打印“”
打印“%s vs%s%”(GAMEON[player],GAMEON[cpu])
打印“”
如果是cpu!=玩家:
如果(播放机-中央处理器)%3<(中央处理器-播放机)%3:
打印“玩家获胜\n”
iwin+=1
其他:
打印“CPU赢\n”
ilose+=1
其他:
打印“领带!\n”
平局+=1
游戏+=1
袜子发送(str(游戏))
打印“游戏结束”
打印“you win:”,(iwin),“Times”
打印“计算机获胜:”,(ilose),“次”
打印“tie:,(tie),“Times”
您需要线程来完成您的出价
示例代码
# 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
问题是您的服务器将提供一个请求,然后停止。你需要把它放在某种while循环中
我用Python编写了一个基本的IM服务器/客户端,可能会对您有所帮助:Hmm无法实现这一点:(它仍然只是根据请求发送,然后停止。这正是它所做的。它应该做什么?一个接一个地发送10个随机数?服务器需要时不需要,但它只能像以前一样工作1次:)我如何让它工作10次请解释一下。当客户端连接时会发生什么?我认为客户端和服务器一直都是连接的,我可以在代码末尾关闭连接,对吗?我知道如果你想连接多个客户端,线程是有用的,但这并不重要。现在游戏第一次运行是因为服务器通过conn.send(cpu)发送了一个号码,但是当游戏第二次循环时,它从来没有发送过另一个号码bcuz它不知道什么时候发送它,它从来没有收到请求或者它想要的任何东西:(也许我应该重新开始,把游戏服务器端和客户端连接起来。