10周
程序名 | 功能 | 序号 |
---|---|---|
1 | hj_main.py | 主函数 |
2 | hj_people.py | 由于确定游戏人数,进入下一界面 |
3 | hj_game.py | 显示主界面,游戏主程序 |
4 | xls.py | 用于导出游戏数据 |
hj_people.py
from tkinter import *
import tkinter.messagebox
from hj_game import *
class MyError1(Exception):
pass
class MyError2(Exception):
pass
class MyError3(Exception):
pass
class MyError4(Exception):
pass
class LoginPage(object):
def __init__(self, master=None):
self.root = master # 定义内部变量root
self.root.geometry('%dx%d' % (400, 200)) # 设置窗口大小
self.root.title("游戏人数")
self.player_num = StringVar()
self.createPage()
def createPage(self):
self.page = Frame(self.root) # 创建Frame
self.page.pack()
# photo = PhotoImage(file='welcome.gif')
# print(photo)
# Label(self.page, image=photo).grid(row=0)
l = Label(self.page, text="欢迎来到黄金点游戏!", bg="pink", font=("微软雅黑", 15),
width=24, height=1)
l.grid(row=0)
l1 = Label(self.page, text="请输入游戏人数:", bg="pink", font=("微软雅黑", 12),
width=15, height=1)
l1.grid(row=1)
Entry(self.page, textvariable=self.player_num).grid(row=2)
Button(self.page, text='开始', command=self.loginCheck).grid(row=3,sticky=W)
Button(self.page, text='退出', command=self.page.quit).grid(row=3,column=1,sticky=W)
def loginCheck(self):
try:
# 判断输入类型
num=int(self.player_num.get())
if num==1:
raise MyError1()
elif num <= 0:
raise MyError3()
elif num > 20:
raise MyError2()
tkinter.messagebox.showinfo(title='欢迎', message='游戏人数为'+str(num))
self.page.destroy()
hj_game(self.root,num)
except MyError1:
tkinter.messagebox.showinfo(title='错误', message='一个人怎么玩!')
except MyError2:
tkinter.messagebox.showinfo(title='错误', message='这么多人怎么玩!')
except MyError3:
tkinter.messagebox.showinfo(title='错误', message='真就不当人了呗!')
except MyError4:
tkinter.messagebox.showinfo(title='错误', message='输入错误!')
hj_game.py
from tkinter import *
import tkinter.messagebox
import hj_people
import xls
class hj_game(object):
def __init__(self,master=None,num=0):
# 窗口设置
self.root = master # 定义内部变量root
self.root.title(str(num)+"人运动")
self.root.geometry('%dx%d' % (600,400)) # 设置窗口大小
# 用于游戏的数据
self.player_num = num # 游戏人数
self.value_list = [] # 数值列表
self.player_value = StringVar() # 单人的值
self.player_No = 0 # 次序
self.average_value = 0
self.score_list = [0 for i in range(self.player_num)]
# 游戏局数
self.gameloop = 1
# 创建游戏界面
self.createPage()
def createPage(self):
# 创建Frame
self.page = Frame(self.root)
self.page.pack()
# 窗口上的部件
tip = Label(self.page, text="黄金点", bg="pink", font=("微软雅黑", 15),
width=24, height=1)
tip.grid(row=0, column=0)
self.label1 = Label(self.page,text="第1位玩家:")
self.label1.grid(row=1,column=0)
self.value_Entry = Entry(self.page, textvariable=self.player_value, show=None)
self.value_Entry.grid(row=2, column=0)
Button(self.page, text="提交", command=self.Botton_clicked).grid(row=3, column=0, stick=E)
self.botton_text = Text(self.page, height=15,width=30,)
self.botton_text.grid(row=4)
Button(self.page, text='退出', command=self.page.quit).grid(row=5, column=0)
Button(self.page, text='导出', command=self.show).grid(row=5, column=1)
def Botton_clicked(self):
# 配置
try:
judge(float(self.player_value.get()))
if self.player_No == 0:
self.value_list.clear()
self.botton_text.insert('end',"第"+str(self.gameloop)+"局游戏")
self.botton_text.insert('end', "\n")
self.gameloop += 1
if self.player_No < self.player_num:
sentence1 = '第' + str(self.player_No+1)+"位玩家:"
self.label1.config(text=sentence1, bg="white")
self.botton_text.insert('end', sentence1+self.player_value.get())
self.botton_text.insert('end', "\n")
self.player_No+=1
self.value_list.append(float(self.player_value.get()))
if self.player_No ==self.player_num:
print(self.value_list)
self.average_value = sum(self.value_list) / self.player_num * 0.618
after_num_list = [abs(i - self.average_value) for i in self.value_list]
self.player_No = 0
score(after_num_list,self.score_list,self.player_num)
self.botton_text.insert('end', "本局的黄金点:" + str(self.average_value))
self.botton_text.insert('end', "\n")
self.botton_text.insert('end', "当前各玩家的值:"+str(self.value_list))
self.botton_text.insert('end', "\n")
self.botton_text.insert('end', "各个分数"+str(self.score_list))
self.botton_text.insert('end', "\n")
self.botton_text.insert('end', "继续输入即可进入下一盘游戏")
self.botton_text.insert('end', "\n")
# xls.a(self.player_num,self.value_list,self.score_list,self.gameloop)
self.label1.config(text="第1位玩家:", bg="white")
self.player_value.set("")
except (hj_people.MyError1, ValueError):
tkinter.messagebox.showinfo(title='错误', message='输入错误!')
def show(self):
try:
xls.a(self.player_num,self.value_list,self.score_list,self.gameloop)
tkinter.messagebox.showinfo(title='提示', message='导出成功!')
except IndexError:
tkinter.messagebox.showinfo(title='提示', message='本局游戏还未结束!')
# 返回最高,最低
def score(after_num_list, score_list, n):
active = after_num_list.index(max(after_num_list))
negative = after_num_list.index(min(after_num_list))
score_list[active] -= 2
score_list[negative] += n
return active,negative
def judge(num):
if num > 0 and num < 100:
return True
else:
raise hj_people.MyError1
if __name__ == "__main__":
root = Tk()
hj_game(root,3)
root.mainloop()
```
```python
import xlsxwriter
def a(player_num,score_list,value_list,gameloop):
workbook = xlsxwriter.Workbook('H:\\图像化界面学习\\xls.xlsx') # 创建一个Excel文件
worksheet = workbook.add_worksheet() # 创建一个sheet
worksheet.write_row('A1', ["第"+str(gameloop-1)+"次游戏"])
title = ['玩家','数值', '得分'] # 表格title
worksheet.write_row('A2', title) # title 写入Excel
for i in range(player_num):
row = 'A' + str(i+3)
data = ['玩家' + str(i+1),score_list[i],value_list[i]]
worksheet.write_row(row, data)
i += 1
workbook.close()
if __name__== "__main__":
num =5
s= [1,2,3,4,2]
value= [12,23,3,6,7]
a(num,s,value,1)
hj_main.py
from hj_people import *
root = Tk()
LoginPage(root)
root.mainloop()
xls.py
import xlsxwriter
def a(player_num,score_list,value_list,gameloop):
workbook = xlsxwriter.Workbook('H:\\图像化界面学习\\xls.xlsx') # 创建一个Excel文件
worksheet = workbook.add_worksheet() # 创建一个sheet
worksheet.write_row('A1', ["第"+str(gameloop-1)+"次游戏"])
title = ['玩家','数值', '得分'] # 表格title
worksheet.write_row('A2', title) # title 写入Excel
for i in range(player_num):
row = 'A' + str(i+3)
data = ['玩家' + str(i+1),score_list[i],value_list[i]]
worksheet.write_row(row, data)
i += 1
workbook.close()
if __name__== "__main__":
num =5
s= [1,2,3,4,2]
value= [12,23,3,6,7]
a(num,s,value,1)
游戏界面: