我是编程新手,我的程序有一些问题。希望有人可以帮助我
我正在尝试使用 socket 和 pyqt5 在 Python 上创建一个石头剪刀布游戏。当我在不使用 pyqt5 的情况下运行它时,我的程序可以正常工作,但是在尝试实现它之后我被卡住了。希望有人能解释我的错误。
在窗口中,我应该输入“石头”或“纸”或“剪刀”。然后它应该被发送到服务器,服务器应该随机生成上述选项之一并检查谁获胜。在它将结果发送回客户端(我的窗口)之后。此外,每次我发送数据时,它都应该在窗口中保持分数。
这是我的 server.py
import socket
import pickle
import random
s=socket.socket()
ip_host=socket.gethostname()
port=3030
s.bind((ip_host, port))
s.listen(5)
c,addr = s.accept()
choices=["rock", "paper", "scissors"]
tie=0
win=0
lose=0
while win!=3 or lose!=3:
player=pickle.loads(c.recv(1024))
num=random.randint(0,2)
cpu=choices[num]
if player==cpu:
print("Tie")
tie+=1
c.send(pickle.dumps('tie'))
else:
if (player=='rock' and cpu=='paper') or (player=='paper' and cpu=='scissors') or (player=='scissors' and cpu=='rock'):
print("You lose")
lose+=1
c.send(pickle.dumps("lose"))
else:
print("You win")
win+=1
c.send(pickle.dumps("win"))
c.close()
s.close()
这是我的client.py
import socket
import pickle
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys
s=socket.socket()
server_host=socket.gethostname()
server_port=3030
s.connect((server_host, server_port))
print("Connected to some server")
class grid_pro(QWidget):
"""grid example"""
def __init__(self):
super().__init__()
self.setGeometry(200,200,200,200)
self.setWindowTitle("Rock-Paper-Scissors")
self.label=QLabel("Enter rock, paper or scissors:")
self.input=QLineEdit()
self.guess=QPushButton("Guess")
self.win=QLabel('You: 0')
self.lose=QLabel("CPU: 0")
self.result=QLabel("Start")
self.grid=QGridLayout(self)
self.grid.addWidget(self.label, 0, 0)
self.grid.addWidget(self.input, 0, 1)
self.grid.addWidget(self.guess, 1, 0)
self.grid.addWidget(self.result, 1, 1)
self.grid.addWidget(self.win, 2, 0)
self.grid.addWidget(self.lose, 2, 1)
self.guess.clicked.connect(self.client)
self.client()
self.show()
def client(self):
win=0
lose=0
tie=0
while 1:
self.win.setText('You: %d'%(win))
self.lose.setText('CPU: %d'%(lose))
n=str(self.input.text())
s.send(pickle.dumps(n))
result=pickle.loads(s.recv(1024))
if result=='win':
print("You win")
win+=1
elif result=='lose':
lose+=1
print("You lose")
elif result=='tie':
tie+=1
print("Tie")
if win==3 or lose==3:
break
self.result.setText("You "+result+'!!')
app=QApplication(sys.argv)
form=grid_pro()
sys.exit(app.exec_())