八周工作记录

要求的黄金点游戏程序
➢ 游戏规则: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上的内容加以完成

待修改的地方:
  1. 测试数据主要是通过随机数产生(为了方便看结果),但是值得注意的是judge()函数(用于判断玩家的数值是否满足要求)暂时还没有调用
  2. 玩家数目是预先确定,而本程序没有给出中途修改的接口
  3. 最终结果如何保存至文件中,需要思考
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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值