黄金点游戏程序开发(一)需求分析及简单python代码实现
游戏规则:N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618 (所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同 学得到N分,离G最远的同学得到-2分,其他同学得0分。
1.顺序图分析
2.需求分析
2.1 功能需求
用户输入参与人数N:
N = input("请输入参与游戏人数:")
第n轮玩家输入0~100有理数:
for i in range(int(N)):
a = input("请玩家" + str(i+1) + "输入0~100之间的有理数:")
gamenumbwer.append(a)
计算G的值:
for i in range(int(N)):
Gnum += float(gamenumbwer[i])
Gnum = (Gnum*0.618)/int(N)
筛选距离G值最近和最远的玩家:
for i in range(int(N)):
dis = abs(float(gamenumbwer[i])-Gnum)
distance.append(dis)
close = distance.index(min(distance))
far = distance.index(max(distance))
得到并保存第n轮玩家得分:
print("玩家"+str(posc)+"获得"+str(N)+"分,玩家"+str(posf)+"失去两分,其余同学获得0分")
score[posc-1] += int(N)
score[posf-1] -= 2
print(score)
循环n论过后统计总得分
for i in range(int(N)):
print("玩家"+str(i)+"得分为:"+str(score[i]))
2.2输入限制
玩家必须输入0~100的有理数,否则需要重新输入
while True:
a = input("请玩家" + str(i+1) + "输入0~100之间的有理数:")
if not str.isdigit(a):
print("输入错误")
continue
elif float(a)<=0 or float(a)>=100:
print("输入错误")
continue
else:
break
2.3 多名玩家同时得分或失分
游戏中玩家可能距离G值的距离相同,此时会有多名玩家得分或者失分:
# 最大的N个数的索引
max_num_index_list = map(nums.index, heapq.nlargest(N, nums))
# 最小的N个数的索引
min_num_index_list = map(nums.index, heapq.nsmallest(N, nums))
使用最大最小N个数的检索来找到所有得分和失分的玩家
3.部分运行代码截图
4.后续迭代要求
美化图形界面,观察黄金点游戏迭代规律,设计多轮游戏,并且设计游戏结束后的排名机制和奖励惩罚机制,增强游戏趣味性。
5.开发环境
编写语言:python3
运行系统:windows10操作系统