现代软件工程-黄金点游戏

黄金点游戏程序

背景

N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618 (所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。

需求分析

实现背景里的规则

采用单机方式实现,需要为用户提供便利的输入界面。

该游戏每次至少可以运行10轮以上,并能够保留各轮比赛结果。

后续在此基础上迭代开发。

使用语言:C++

定义了以下几个类:

Player类:

class Player {
	public:
		int score;
		int id;
		double value;
		Player(){
			id = 0;
			score = 0;
			value = 0;
		}
};

Judger类

class Judger {
	public:
		//轮次
		int times;
		//人数
		int count;
		int score[100][10];
		float ans;
		void CalAns(Player p[],int GameTimes);
		void Print();
};

重要函数:

CalAns函数:

功能:用于计算游戏结果,并为成员打分

void Judger::CalAns(Player p[],int GameTimes) { //我们发现当多名临界分数玩家答案一样时,得分会不符合直觉,后续中我们将进行优化
	double total = 0;
	double Max = 0;
	int Maxi=0;
	double Min = 200;
	int Mini=0;
	for (int i = 0; i < count; i++) {
		total += p[i].value;
	}
	ans = total / count * 0.618;
	cout << "ans:" << ans << endl;

	for (int i = 0; i < count; i++) {
		if (abs(p[i].value - ans) < Min)
		{
			Min = abs(p[i].value - ans);
			Mini = i;
		}
		if (abs(p[i].value - ans) > Max)
		{
			Max = abs(p[i].value - ans);
			Maxi = i;
		}
	}	
		p[Maxi].score -= 2;
		p[Mini].score += 2;
		for (int i = 0; i < count; i++) {
			score[GameTimes][i] = p[i].score;
		}
}

Print函数

功能:用于输出游戏结果

void Judger::Print() {
	for (int i = 0; i < count; i++) {
		double tmptot=0;
		cout << "玩家" << i + 1 << "每轮的分数为:";
		for (int j = 0; j < times; j++) {
			cout << score[j][i] << " ";
			tmptot += score[j][i];
		}
		cout << "总分:" << tmptot << endl;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值