# -*- coding: utf-8 -*-
from server import Game
import sys
from typing import Text
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import gobangGUI
import requests
import json
import time
import threading
server_ip = None
client_ip = None
BLACK = 1
WHITE = 2
YELLOW = 3
def connectServer(ip): #查看服务器是否在线并连接服务器
try:
r = requests.get("http://"+ip+":8088"+"/Game/Ready/feedback")
global server_ip
server_ip = ip
return True,r.text
except Exception as e:
print(e)
return False,None
def GetIntoGame(ip,color):
try:
req = {"ip":ip,"color":color}
req = json.dumps(req) #字典转化为字符串形式
r = requests.post("http://"+server_ip+":8088"+"/Game/GetIn",req)
print("r:",r.text)
return True,r.text
except Exception as e:
print(e)
return False,None
class Home(QMainWindow):#派生类
def __init__(self):
super(Home, self).__init__()
#QtGui.QWidget.__init__(self)
self.style = """
QPushButton{background-color:grey;color:white;}
#window{ background-image: url(background1.jpg); }
"""
self.setStyleSheet(self.style)
self.initUI()
def initUI(self):
self.resize(650, 480)
self.statusBar().showMessage('Ready')
self.setObjectName("window")
self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
self.center()
widget = QWidget()
label = QLabel()
label.setText("<font size=%s><B>%s</B></font>" %("15", "五子棋对战系统"))
self.ipInput = QLineEdit(self)
self.ipInput.setPlaceholderText('输入服务器ip')
connect = QPushButton("connect", self)
connect.clicked.connect(self.connect_server)
widget.setStatusTip(' ')
#start.resize(50, 25)
quit = QPushButton("Quit", self)
#quit.resize(50,25)
quit.clicked.connect(self.quitClicked)
vbox1 = QVBoxLayout() # 垂直布局
vbox2 = QVBoxLayout()
vbox3 = QVBoxLayout()
vbox4 = QVBoxLayout()
#两边空隙填充
label1 = QLabel()
label1.resize(50,50)
label2 = QLabel()
label2.resize(50, 50)
vbox1.addWidget(label1)
#vbox2.addWidget(label)
vbox4.addWidget(self.ipInput)
vbox4.addWidget(connect)
vbox4.addWidget(quit)
vbox3.addWidget(label2)
# 按钮两边空隙填充
label3 = QLabel()
label3.resize(50, 50)
label4 = QLabel()
label4.resize(50, 50)
hbox1 = QHBoxLayout()
hbox1.addWidget(label3)
hbox1.addLayout(vbox4)
hbox1.addWidget(label4)
#标题与两个按钮上下协调
label5 = QLabel()
label5.resize(1, 1)
label6 = QLabel()
label6.resize(1, 1)
label7 = QLabel()
label7.resize(1, 1)
vbox2.addWidget(label5)
vbox2.addWidget(label)
vbox2.addWidget(label6)
vbox2.addLayout(hbox1)
vbox2.addWidget(label7)
hbox = QHBoxLayout()
hbox.addLayout(vbox1)
hbox.addLayout(vbox2)
hbox.addLayout(vbox3)
widget.setLayout(hbox)
self.setCentralWidget(widget)
def connect_server(self):
text = self.ipInput.text()
succ,_ = connectServer(text)
if succ:
self.hide()
self.ui = ChooseColor() #必须将另一个界面改为成员变量,负责MainPage会与函数调用周期一样一闪而过
self.ui.show()
else:
self.hide()
self.ui = ChooseColor() #必须将另一个界面改为成员变量,负责MainPage会与函数调用周期一样一闪而过
self.ui.show()
#QMessageBox.warning(self, "警告信息", "服务器未开启", QMessageBox.Yes,QMessageBox.Yes)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
QApplication.postEvent(self, QEvent(174))
event.accept()
def mouseMoveEvent(self, event):
if event.buttons() == Qt.LeftButton:
self.move(event.globalPos() - self.dragPosition)
event.accept()
def quitClicked(self):
reply = QMessageBox.question(self, 'Warning',
'Are you sure to quit?', QMessageBox.Yes,
QMessageBox.No)
if reply == QMessageBox.Yes:
quit()
def center(self):
qr = self.frameGeometry() # 得到该主窗口的矩形框架qr
cp = QDesktopWidget().availableGeometry().center() # 屏幕中间点的坐标cp
qr.moveCenter(cp) # 将矩形框架移至屏幕正中央
self.move(qr.topLeft()) # 应用窗口移至矩形框架的左上角点
class ChooseColor(Home):
def __init__(self):
super(ChooseColor, self).__init__()
def initUI(self):
self.resize(1000, 400)
self.statusBar().showMessage('Ready')
self.setObjectName("window")
self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
self.center()
self.get_status()
widget = QWidget()
label = QLabel()
label.setText("<font size=%s><B>%s</B></font>" %("15", "持方选择"))
black_label = QLabel()
black_label.setText("<font size=%s><B>%s</B></font>" %("6", "黑方"))
self.black_ip = QLabel()
self.black_ip.setText("<font size=%s><B>%s</B></font>" %("6",self.black))
black_in = QPushButton("加入", self)
black_in.clicked.connect(self.BlackGetIn)
widget.setStatusTip(' ')
#start.resize(50, 25)
white_label = QLabel()
white_label.setText("<font size=%s><B>%s</B></font>" %("6", "白方"))
self.white_ip = QLabel()
self.white_ip.setText("<font size=%s><B>%s</B></font>" %("6",self.white))
white_in = QPushButton("加入", self)
white_in.clicked.connect(self.WhiteGetIn)
yellow_label = QLabel()
yellow_label.setText("<font size=%s><B>%s</B></font>" %("6", "黄方"))
self.yellow_ip = QLabel()
self.yellow_ip.setText("<font size=%s><B>%s</B></font>" %("6",self.yellow))
yellow_in = QPushButton("加入", self)
yellow_in.clicked.connect(self.YellowGetIn)
start = QPushButton("Start", self)
start.clicked.connect(self.startClicked)
quit = QPushButton("Quit", self)
quit.clicked.connect(self.quitClicked)
refresh = QPushButton("刷新", self)
refresh.clicked.connect(self.refreshClicked)
#quit.resize(50,25)
# start.clicked.connect(self.startClicked)
# quit.clicked.connect(self.quitClicked)
vbox1 = QVBoxLayout() # 垂直布局
vbox2 = QVBoxLayout()
vbox3 = QVBoxLayout()
vbox4 = QVBoxLayout()
vbox5 = QVBoxLayout()
vbox6 = QVBoxLayout()
vbox7 = QVBoxLayout()
#两边空隙填充
label1 = QLabel()
label1.resize(50,50)
label2 = QLabel()
label2.resize(50, 50)
vbox1.addWidget(label1)
#vbox2.addWidget(label)
vbox4.addWidget(black_label)
vbox4.addWidget(self.black_ip)
vbox4.addWidget(black_in)
vbox5.addWidget(white_label)
vbox5.addWidget(self.white_ip)
vbox5.addWidget(white_in)
vbox7.addWidget(yellow_label)
vbox7.addWidget(self.yellow_ip)
vbox7.addWidget(yellow_in)
vbox3.addWidget(label2)
# 按钮两边空隙填充
label3 = QLabel()
label3.resize(50, 50)
label4 = QLabel()
label4.resize(50, 50)
hbox1 = QHBoxLayout(
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于Python实现五子棋(三人对战).zip (20个子文件)
gobang-master
server.py 8KB
img
white.png 1KB
yellow.png 2KB
chessboard.jpg 49KB
black.png 1KB
sound
win.wav 27KB
defeated.wav 12KB
move.wav 15KB
gobangGUI.py 9KB
client_test2.py 14KB
client_test3.py 14KB
client_test.py 14KB
.idea
aws.xml 304B
go-bang-multi-player.iml 537B
misc.xml 294B
modules.xml 299B
workspace.xml 15KB
.gitignore 184B
inspectionProfiles
profiles_settings.xml 174B
chessboard.py 2KB
共 20 条
- 1
资源评论
- BNYZW6662023-04-19资源内容详细,总结地很全面,与描述的内容一致,对我启发很大,学习了。
我慢慢地也过来了
- 粉丝: 6045
- 资源: 3856
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功