文章目录
目录
前言
由于上次的文章缺少说明文字,因此这次将进行更具体的文字说明。
一、黄金点游戏介绍
黄金点游戏是一个数字小游戏,其游戏规则是:
N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动。
如果你和其他20 个聪明人玩这个游戏, 你会选择什么数字呢?
二、具体实现
1.主程序实现(游戏逻辑)
以下是针对游戏中的逻辑进行代码实现,制作成各种函数以方便进行绑定按钮事件。
代码如下(示例):
class person:
def __init__(self, name):
self.name = name
self.score_list = []
self.score = 0 # 初始分数为0
def change_score(self, num):
self.score += num
self.score_list.append(self.score)
def show(self):
gamewin.main_ui.textBrowser.append(str(self.name)+":"+str(self.score))
print(str(self.name)+":"+str(self.score))
def show_scorelist(self):
gamewin.main_ui.textBrowser.append(str(self.name)+":"+str(self.score_list))
print(str(self.name)+":"+str(self.score_list))
def Gold_Point(people,num):
Gpoint = np.mean(num)*0.618
print("输入完成!结果如下:")
# num = [abs(x-Gpoint) for x in num] # 减去Gpoint算距离
# num = [x-min(num) for x in num] # 减去距离最小值,0为最近距离的数字
close_num = min(num)
farther_num = max(num) # 得到最大的数字,数字对应的下标就是该人在people数组里的下标
for i in range(len(num)):
if num[i] == close_num:
people[i].change_score(len(people))
elif num[i] == farther_num:
people[i].change_score(-2)
else:
people[i].change_score(0)
for person in people:
person.show()
def inital():
print("请输入参与人数:")
people_num = int(input())
people = []
# 初始化
for i in range(people_num):
print("请玩家"+str(i)+"输入姓名:")
name = input()
people.append(person(name))
return people
2.主界面UI实现
1.代码展示
这里的代码设计的主界面,初步设计的是两个页面,以及四个按钮
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "黄金点游戏"))
self.pushButton.setText(_translate("MainWindow", "开始新游戏"))
self.pushButton_3.setText(_translate("MainWindow", "查看上一轮结果"))
self.pushButton_4.setText(_translate("MainWindow", "退出游戏"))
self.pushButton_2.setText(_translate("MainWindow", "继续游戏"))
2.主窗口定义
对于主界面的大小以及各个按钮的设计
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(500, 400)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(100, 0, 300, 150))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
3.主界面运行截图
如图所示,实现主界面的四个按钮
4.游戏UI的设计原理
可以通过按钮实现游戏轮次的运行,并且反馈出每一轮的结果
这里的代码展示了对个人分数的初始设定,然后统计之后对每个人的分数进行加减
以及如何展示每一轮的所有人的分数得分
class person:
def __init__(self, name):
self.name = name
self.score_list = []
self.score = 0 # 初始分数为0
def change_score(self, num):
self.score += num
self.score_list.append(self.score)
def show(self):
gamewin.main_ui.textBrowser.append(str(self.name)+":"+str(self.score))
print(str(self.name)+":"+str(self.score))
def show_scorelist(self):
gamewin.main_ui.textBrowser.append(str(self.name)+":"+str(self.score_list))
print(str(self.name)+":"+str(self.score_list))
总结
下一步准备进行的是游戏的页面的绑定,并且完善游戏UI界面。