2020 week09 黄金点游戏Python界面实现

 

文章目录

目录

文章目录

前言

一、黄金点游戏介绍

二、具体实现

1.主程序实现(游戏逻辑)

2.主界面UI实现

1.代码展示

2.部分窗口定义

3.主界面运行截图

总结



前言

由于上次的文章缺少说明文字,因此这次将进行更具体的文字说明。


 

一、黄金点游戏介绍

黄金点游戏是一个数字小游戏,其游戏规则是:
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界面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个Python Tkinter图形界面日历的实现方法: ```python import calendar import tkinter as tk from tkinter import ttk class Calendar: def __init__(self, parent, values): self.values = values self.parent = parent self.cal = calendar.TextCalendar(calendar.SUNDAY) self.year = 1 self.month = 1 self.wid = [] self.day_selected = 1 self.month_selected = self.month self.year_selected = self.year self.day_name = '' self.setup(self.year, self.month) def clear(self): for w in self.wid[:]: w.grid_forget() #w.destroy() self.wid.remove(w) def go_prev(self): if self.month > 1: self.month -= 1 else: self.month = 12 self.year -= 1 self.clear() self.setup(self.year, self.month) def go_next(self): if self.month < 12: self.month += 1 else: self.month = 1 self.year += 1 self.clear() self.setup(self.year, self.month) def selection(self, day, name): self.day_selected = day self.month_selected = self.month self.year_selected = self.year self.day_name = name self.values['day_selected'] = day self.values['month_selected'] = self.month self.values['year_selected'] = self.year self.values['day_name'] = name self.clear() self.setup(self.year, self.month) def setup(self, y, m): left = tk.Button(self.parent, text='<', command=self.go_prev) self.wid.append(left) left.grid(row=0, column=1) header = tk.Label(self.parent, height=2, text='{} {}'.format(calendar.month_abbr[m], str(y))) self.wid.append(header) header.grid(row=0, column=2, columnspan=3) right = tk.Button(self.parent, text='>', command=self.go_next) self.wid.append(right) right.grid(row=0, column=5) days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] for num, name in enumerate(days): t = tk.Label(self.parent, text=name[:3]) self.wid.append(t) t.grid(row=1, column=num) for w, week in enumerate(self.cal.monthdayscalendar(y, m), 2): for d, day in enumerate(week): if day: #print(calendar.day_name[day]) b = tk.Button(self.parent, width=1, text=day, command=lambda day=day:self.selection(day, calendar.day_name[(day-1) % 7])) self.wid.append(b) b.grid(row=w, column=d) sel = tk.Label(self.parent, height=2, text='{} {} {} {}'.format( self.day_name, calendar.month_name[self.month_selected], self.day_selected, self.year_selected)) self.wid.append(sel) sel.grid(row=8, column=0, columnspan=7) ok = tk.Button(self.parent, width=5, text='OK', command=self.kill_and_save) self.wid.append(ok) ok.grid(row=9, column=2, columnspan=3, pady=10) def kill_and_save(self): self.parent.destroy() def main(): root = tk.Tk() root.title("Calendar") app = Calendar(root, {}) root.mainloop() if __name__ == '__main__': main() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值