第二次开发记录
黄金点游戏: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)部分的代码尚未完成,故暂时无法实现图形界面