# Python多人游戏不存在和交叉

``````score=[[' ',' ',' '],[' ',' ',' '],[' ',' ',' ']]
global attempts
attempts = 0
from random import randint
from time import sleep

def grid(): #draws playing grid
hideturtle()
speed(0)
pensize(0)
penup()
setpos(-200, -67)
pendown()
fd(400)
penup()
setpos(-200, 66)
pendown()
fd(400)
penup()
seth(90)
setpos(-67, -200)
pendown()
fd(400)
penup()
setpos(66, -200)
pendown()
fd(400)

def drawShape(s, x, y): #draws shape in grid box x and y = coord, s = shape type
hideturtle()
speed(100)
pensize(6)
penup()
if s == 'X': #draws 'X'
pencolor("orange")
setpos(-266 (133*x), -266 (133*y))
pendown()
seth(135)
fd(50)
rt(180)
fd(100)
rt(180)
fd(50)
rt(90)
fd(50)
rt(180)
fd(100)
elif s == 'O': #draws 'O'
pencolor("green")
setpos(-266 (133*x), -266 (133*y)-40)
seth(0)
pendown()
circle(40)

def ai(): #EXPERIMENTAL AI
x=0
y=0
d='O'
e='O'
f='O'
for i in range(3): #checks positions
if i == 0:
d=' '
elif i == 1:
d='O'
e=' '
elif i == 2:
d='O'
e='O'
f=' '
for c in range(3):
if score[c][0] == d and score[c][1] == e and score[c][2] == f:
x = c 1
y = i 1
print('v',c)
elif score[c][0] == d and score[c][1] == e and score[c][2] == f:
x = i=1
y = c 1
print('h',c)
if score[0][0] == d and score[1][1] == e and score[2][2] == f:
print('lr',i)
x = i 1
y = i 1
elif score[0][2] == d and score[1][1] == e and score[2][0] == f:
print('rl',i)
x = i 1
y = 4-i
d='X'
e='X'
f='X'
if x == 0 and y == 0: #checks oposition positions
for i in range(3):
if i == 0:
d=' '
elif i == 1:
d='X'
e=' '
elif i == 2:
d='X'
e='X'
f=' '
for c in range(3):
if score[c][0] == d and score[c][1] == e and score[c][2] == f:
x = c 1
y = i 1
print('op v')
elif score[c][0] == d and score[c][1] == e and score[c][2] == f:
x = i=1
y = c 1
print('op v')
if score[0][0] == d and score[1][1] == e and score[2][2] == f:
x = i 1
y = i 1
print('op bt')
elif score[0][2] == d and score[1][1] == e and score[2][0] == f:
x = i 1
y = 4-i
print('op tb')

if x == 0 and y == 0: #if no playable positions uses random
x = randint(1,3)
y = randint(1,3)
return x, y

def valid(u,x,y): #checks player move is valid
global attempts
if x > 3 or y > 3:
print ('Coordinate must be between 1 & 3')
elif x == '' or y == '':
print("Enter something!")
elif score[y-1][x-1] == ' ':
score[y-1][x-1] = u
drawShape(u, x, y)
attempts  =1
return True
elif score[y-1][x-1] == u:
return False
elif score[y-1][x-1] != u:
print("The other player is here! ")
return False

def userAgent(u): #makes AI or user prompts and sets array
global attempts
global a
global b
if u == 0:
a, b = ai()
score[b-1][a-1] = 'O'
print("The computer is taking its turn...")
print(a,b)
sleep(1)
drawShape('O', a, b)
attempts  =1
else:
x = input("Player " u ": enter x coordinate (1-3) ")
y = input("Player " u ": enter y coordinate (1-3) ")
try:
x = int(x)
y = int(y)
except ValueError:
print("That's not a valid number!")
userAgent(u)
while True:
if valid(u,x,y) == True:
break
x = input("Player " u ": enter x coordinate (1-3) ")
y = input("Player " u ": enter y coordinate (1-3) ")
try:
x = int(x)
y = int(y)
except ValueError:
print("That's not a valid number!")

def checkWin(n): #checks for a player win (3 in row) or stalemate
for i in range(3):
if score[i][0] == n and score[i][1] == n and score[i][2] == n:
print("Player " n " won!")
return True
elif score[0][i] == n and score[1][i] == n and score[2][i] == n:
print("Player " n " won!")
return True
if score[0][0] == n and score[1][1] == n and score[2][2] == n:
print("Player " n " won!")
return True
elif score[0][2] == n and score[1][1] == n and score[2][0] == n:
print("Player " n " won!")
return True
elif attempts == 9:
print("Stalemate!")
return True
else:
return False

def printGrid():
print(score[2])
print(score[1])
print(score[0])

from turtle import *
grid()
p = input("Are you playing by yourself? (SINGLE PLAYER EXPERIMENTAL) (y/n) ")

while True: #runs game until player win
if p == 'y':
userAgent('X')
printGrid()
if checkWin('X') == True:
break
userAgent(0)
printGrid()
if checkWin('O') == True:
break

elif p == 'n':
userAgent('X')

if checkWin('X') == True:
break
userAgent('O')

if checkWin('O') == True:
break

else:
print("You need to type y or n - try again!")
p = input("Are you playing by yourself? (SINGLE PLAYER EXPERIMENTAL) (y/n) ")

input('Press ENTER to exit')
``````

Soooo有谁可以帮助我在这里？我只需要了解服务器需要哪些代码以及客户端如何与之交互。谢谢:)）

#### 3 个答案:

1. 在两台计算机上打开套接字服务器
2. 启动游戏的人打开套接字客户端并将移动直接发送到服务器，然后重新打开套接字服务器
3. 下次移动计算机会打开一个客户端并将其移回服务器。
4. 这会删除所有运行服务器的不必要代码。

有关套接字的信息，请参阅python手册。服务器/客户端底部都有很好的例子。

https://docs.python.org/2/library/socket.html

答案 1 :(得分：0)

您可能想看看ZeroMQ。 http://zeromq.org/

具体来说，你想要PyZMQ。 http://zeromq.github.io/pyzmq/api/zmq.html

设置简单，您可以直接连接两台计算机。您可以在两者之间来回发送消息。

绝对阅读文档，但您可能需要一个请求/回复模式。

答案 2 :(得分：0)

您可以从the twisted chatserver example

开始
``````"""The most basic chat protocol possible.

run me with twistd -y chatserver.py, and then connect with multiple
telnet clients to port 1025
"""

from twisted.protocols import basic

print "Got new client!"
self.factory.clients.append(self)

def connectionLost(self, reason):
print "Lost a client!"
self.factory.clients.remove(self)

for c in self.factory.clients:
c.message(line)

def message(self, message):
self.transport.write(message   '\n')

from twisted.internet import protocol
from twisted.application import service, internet

factory = protocol.ServerFactory()
factory.protocol = MyChat
factory.clients = []

application = service.Application("chatserver")
internet.TCPServer(1025, factory).setServiceParent(application)
``````

客户端可以使用Python的内置`telnetlib`来连接

如果您愿意，稍后您可以升级为使用twisted进行客户端连接。

本文经用户投稿或网站收集转载，如有侵权请联系本站。

0条回复