私はプログラミングが初めてで、プログラムに問題があります。誰かが私を助けてくれることを願っています
ソケットと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_())