要求的黄金点游戏程序
➢ 游戏规则:N个同学(N通常大于10),每人写一个0~100之间的有理数
(不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618
(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同
学得到N分,离G最远的同学得到-2分,其他同学得0分。
➢ 采用单机方式实现,需要为用户提供便利的输入界面。
➢ 该游戏每次至少可以运行10轮以上,并能够保留各轮比赛结果。
➢ 后续在此基础上迭代开发。
**
流程图
**
类表(java)
类/函数/变量声明 | 作用 |
---|---|
class gamer | 参与者类,包括参与者编号,输入值和分数 |
public int gamenumber | 参与者编号 |
public int point | 输入值 |
int score | 分数 |
gamer() | 构造函数,编号,输入值,分数初始化为0,0,10 |
gamer(int number) | 重构构造函数,number决定参与者编号,输入值和分数0,10 |
class win | 胜者类,负责保存胜者编号和黄金点 |
int winernum | 胜利者编号 |
int goldenpoint | 胜利时黄金点 |
win() | 构造函数,编号,黄金点,0,0 |
win(int a, int b) | 构造函数,黄金点,a,b |
class game | 游戏类,执行游戏机制 |
int sum | 黄金点 |
int winernum | 胜者编号 |
win gamerun(gamer[] gamers) | 参数为参与者实例数组,执行游戏机制,返回胜者对象 |
private static gamer getApproximate(int x, gamer[] src) | 计算与x最接近的gamer[i].point并返回gamer[i] |
class goldenmain | 主类,负责执行调用 |
int gamerN | 参与者数量 |
static void main | 调用执行 |
代码版本(java)
未完成。。。
代码版本(python)
代码概述:
本程序大致按照PPT上的内容加以完成
待修改的地方:
- 测试数据主要是通过随机数产生(为了方便看结果),但是值得注意的是
judge()
函数(用于判断玩家的数值是否满足要求)暂时还没有调用 - 玩家数目是预先确定,而本程序没有给出中途修改的接口
- 最终结果如何保存至文件中,需要思考
import random
def judge(num):
if (num > 0 and num < 100):
return True
else:
return False
def modify_num(num):
return num * 0.618
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
def play():
game_num = 1
while (True):
print("=====第", game_num, "次游戏=====")
# 先清空数据
num_list.clear()
for i in range(n):
# player_num = float(input("请",i,"位玩家输入您的数据:"))
# 此处用 随机数进行替代
player_num = random.uniform(0, 100)
judge(player_num)
num_list.append(player_num)
average_num = sum(num_list) / len(num_list)
g_num = modify_num(average_num)
after_num_list = [abs(i - average_num) for i in num_list]
score(after_num_list, score_list, n)
print("每个人输入数值:", num_list)
print("均值", average_num)
print("每个人数值:", after_num_list)
print("当前分数:", score_list)
# 这里可以填充写入文件的代码,大概率会是csv文件
game_stop_or_not = input("是否继续!(Y/N)")
if (game_stop_or_not == 'N' or game_stop_or_not == 'n'):
print("感谢使用!")
break
elif (game_stop_or_not != 'y' or game_stop_or_not != 'Y'):
print("输入有误!进入下一场游戏")
game_num += 1
if __name__ == "__main__":
print("======欢迎进入黄金点游戏!======")
N = input("请输入游戏人数:")
n = int(N)
num_list = []
score_list = [0 for i in range(n)]
play()