第二次开发记录

第二次开发记录

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

(1)项目语言:C++
(2)软件平台:Visual Studio 2017
(3)运行环境:Windows10 操作系统

(4)目前已实现功能:
在核心部分代码中,游戏的基本功能已经实现完全,即用户自己输入游戏轮数和人数设定,再输入自己所写的数,然后程序自动运行得出分数。

#include<bits/stdc++.h>

using namespace std;

 

int main()

{

	int game_num;

	map <string, double> mp;

	int i, n;

	double num, sum, ave, G;

	int temp = 0;

	string name;

	printf("Please enter the number of person who play this game:");

	scanf("%d", &n);

	printf("\n");

	printf("Please enter the number of rounds:");

	scanf("%d", &game_num);

	printf("\n");

 

	while (game_num--)

	{

		++temp;

		mp.clear(); 

		sum = 0; ave = 0; G = 0;

		printf("Round %d has begun:\n", temp);

	
//游戏开始
		for (i = 0; i < n; i++)

		{	

			cout<< "Player No." << i+1 << " please enter a number in range of 0-100" <<endl; 

			cout<< "Please enter the name:"; 

			cin >> name ;

			cout<< "Please enter your number:";

			cin >> num;

			cout<< endl;

			

			if (num>0.0&&num<100.0)

			{

				mp [name] = num; 

				sum += num;

			}
//错误识别和更正

			else
			{

				printf("Out of range (Please enter an number in the range of 0-100)\n");

				printf("Please enter again\n");

				i--;

			}

	}

 

		map<string, double>::iterator iter, result_high, result_low;

		

		printf("The sum is :%.3lf\n", sum);

		ave = sum / n;

		printf("The average number is :%.3lf\n", ave);

		G = ave * 0.618;//进行计算

		printf("G-Point is:%.3lf\n", G);

	

		for (iter = mp.begin(); iter != mp.end(); iter++)

		{

			iter->second = (double)fabs(G - (double)iter->second); 

		}

	

		for (iter = mp.begin(), result_high = mp.begin(), result_low = mp.begin(); iter != mp.end(); iter++)

		{

			if (iter->second<result_high->second)

				result_high = iter;

			if (iter->second>result_low->second)

				result_low = iter;

		}

	

		cout << endl;

		cout << "Winner is " << "\t" << "The Deviation" << endl;

		cout << result_high->first << "\t" << "        " <<result_high->second << "\t" << "        Gains " << n << " scores" << endl;

		cout << "Non-winner is " << "\t" << "The Deviation" << endl;

		cout << result_low->first << "\t" << "        " << result_low->second << "\t" << "        Lose 2 scores" << endl;

		cout << endl;

	

		for (iter = mp.begin(); iter != mp.end(); iter++)

		{

			iter->second = 0;

		}

	

		for (iter = mp.begin(); iter != mp.end(); iter++)

		{

			if (iter == result_high)

				iter->second += n;

			if (iter == result_low)

				iter->second += -2;

		}

			cout << "The result of Round " << temp << " is:" << endl;

			cout << "Name:" << "\t" << "Final score: " << endl;

			for (iter = mp.begin(); iter != mp.end(); iter++)

				cout << iter->first << "\t" << iter->second << endl;

				cout << endl;

		}

		return 0;

}

不足之处

1.如何将多轮游戏数据保存下来,比如第一轮游戏的分数能够继承到后续几轮游戏中的功能尚未实现;
2.由于QT库配置环境、安装出现问题并且尚未解决,图形界面(GUI)部分的代码尚未完成,故暂时无法实现图形界面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值