软件工程课程设计_第十周

软件工程课程设计_第九周

小组成员

黄金点游戏UI界面

 

小组成员

姓名学号
罗正2018141461092
张伯威2018141461065

黄金点游戏UI界面

设计要求

  • N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。
  • 采用单机方式实现,提供简单UI界面
  • 十个人进行十轮,每轮过后将没跟的分数打印出来

开发环境

使用Python语言及其自带UI库开发

设计思路

  • 使用Python自带的tkinter UI库
  • Label组件获取用户输入的数字
  • Entry组件打印信息
  • Button获取用户动作

代码展示

import tkinter as tk
class goldpoint:
    def __init__(self):
        #分数列表
        self.pointList = []
        self.players = 10
        for i in range(self.players):
            self.pointList.append(0)
    # 写入十个人输入的数据,计算黄金点
    def wrtitenum(self,times,numberList:list)->list:
        if times < 10:
            average = 0
            closestNumber = 0
            fartherNumber = 0
            closestSub = 100
            fartherSub = 0
            for i in range(len(numberList)):
                average = average + float(numberList[i])
            average = average / 10 * 0.618

            for i in range(len(numberList)):
                playerSub = abs(float(numberList[i]) - average)
                if i == 0:
                    closestSub = fartherSub = playerSub
                    closestNumber = fartherNumber = 0
                else:
                    if playerSub < closestSub:
                        closestNumber = i
                    if playerSub > fartherSub:
                        fartherNumber = i
            print("Win:", closestNumber, "Lose:", fartherNumber)
            self.pointList[closestNumber] = self.pointList[closestNumber] + 10
            self.pointList[fartherNumber] = self.pointList[fartherNumber] - 2
            return [average,closestNumber,fartherNumber]
    #     获得目前分数列表
    def getscore(self):
        return self.pointList

class myGUI:
    def __init__(self):
        # 窗口
        self.windows=tk.Tk()
        self.windows.title('黄金点游戏')
        self.framelist=[]
        self.labellist=[]
        self.entrylist=[]
        self.numlist=[1]*10
        self.pointlist=[]
        self.gp=goldpoint()
        self.times=0
        self.showlablevalue=[]
        self.showlable = []
        self.windows.geometry('600x480')
        for i in range(10):
            self.pointlist.append(0)
        for i in range(10):
            self.framelist.append(tk.Frame(self.windows))
            self.labellist.append(tk.Label(self.framelist[i],text='请第'+str(i)+'个人输入'))
            self.entrylist.append(tk.Entry(self.framelist[i], show='*',width=10))
            self.showlablevalue.append(tk.StringVar())
            self.showlable.append(tk.Label(self.framelist[i], textvariable=self.showlablevalue[i]))
            self.labellist[i].pack(side='left')
            self.entrylist[i].pack(side='left')
            self.showlable[i].pack(side='right')
            self.framelist[i].pack()
        self.calFrame=tk.Frame(self.windows)
        self.calbt=tk.Button(self.calFrame,text='计算',command=self.cal)
        self.calbt.pack()
        self.calFrame.pack()
        self.bottomFrame=tk.Frame(self.windows)
        self.resultvalue=tk.StringVar()
        self.resultlabe=tk.Label(self.bottomFrame,textvariable=self.resultvalue)
        self.resultlabe.pack()
        self.bottomFrame.pack()
    # 当计算按钮被点击后触发的函数,计算黄金点以及每个人的分数
    def cal(self):
        for i in range(10):
            self.numlist[i]=float(self.entrylist[i].get())
        if self.times<10:
            result=self.gp.wrtitenum(self.times,self.numlist)
            self.resultvalue.set('goldpoint: '+str(result[0])+'   Win: '+str(result[1])+'  Lose: '+str(result[2]))
            self.pointlist=self.gp.getscore()
            for i in range(3):
                print(result[i])
            for i in range(10):
                self.entrylist[i].delete(0,"end")
                self.showlablevalue[i].set('第' + str(i) + '个人的分数是:' + str(self.pointlist[i]))
                print(self.pointlist[i])
            self.times+=1
            print("times=",self.times)
        #超过十次之后,可以再添加一些重新开始之类的选项,目前还没想好,后续可以再补充
        else:
            print('times>10')

    def gamerun(self):
        self.windows.mainloop()
test=myGUI()
test.gamerun()

效果展示

  • 第一次输入:
    黄金点游戏1
  • 计算一次之后:
    黄金点游戏2

有待改进

  • UI 界面比较简陋,不够精美
  • 当用户输入10次之后,没有设置如重新开始等选项
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值