软工课设:黄金点游戏
发表时间:2020-10-19
发布人:葵宇科技
浏览次数:72
这里写自定义目录标题
- 课设要求
- 设计思路及流程图
- 代码
- 结对编程感想
课设要求
分组编写一个满足下列要求的黄金点游戏程序。
? 游戏规则:N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618 (所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同 学得到N分,离G最远的同学得到-2分,其他同学得0分。
? 采用单机方式实现,需要为用户提供便利的输入界面。
? 该游戏每次至少可以运行10轮以上,并能够保留各轮比赛结果。
? 后续在此基础上迭代开发。
设计思路及流程图
设计语言:C++
设置goldgame结构体来存放用户的输入数据和分数;
首先,用户输入参与人数,创建结构体数组存储用户信息,然后在功能选择界面选择开始游戏,结束游戏,显示分数等功能;
开始游戏后,用户依次输入数字,系统将计算平均值并乘以0.618,然后通过循环n次选出与这个值最近与最远的用户编号,并对其进行加分与扣分;
跳转至功能选择界面,用户继续选择需要执行的功能。
代码
#include <iostream>
#include<cmath>
using namespace std;
struct goldpoint
{
double data;
int score = 0;
};
int main()
{
int n,m = 0;
double number=0;
cout << "请输入参与人数";
cin >> n;
goldpoint student[n];
ff1: cout << "请选择功能:1:进行游戏;2:结束游戏;3:查看当前分数"<< endl;
cin >> m;
while(m!=2)
{
if(m==1)
{
cout << "请依次输入" << n <<"位学生的数字" << endl;
for(int i=0; i<n; i++)
{
cin>>student[i].data;
number+=student[i].data;
}
double avg = number/n*0.618;
double max=fabs(student[0].data-avg), min=fabs(student[0].data-avg);
int flagmax=0, flagmin=0;
for(int i=0; i<n; i++)
{
if(max < fabs(student[i].data-avg))
{
max = fabs(student[i].data-avg);
flagmax = i;
}
if(min > fabs(student[i].data-avg))
{
min = fabs(student[i].data-avg);
flagmin = i;
}
}
student[flagmax].score-=2;
student[flagmin].score+=2;
cout << "本轮游戏最近者:" << flagmin+1 << "号同学" << endl;
cout << "本轮游戏最远者:" << flagmax+1 << "号同学" << endl;
}
if(m==3)
{
for(int i=0; i < n; i++)
cout << "stunent" << i+1 << ":" << student[i].score << endl;
}
goto ff1;
}
return 0;
}
结对编程感想
结对编程是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员。两个程序员经常互换角色。
在此次结对编程中,我们可以及时讨论思路,解决了一个人思考的局限性;一个人工作时,由于时间跨度较大,在编译时,之前的一些细节思路会有所遗忘,增大debug的难度,而通过结对编程,在输入代码的同时,另一个人可以及时地作出反馈,及时改掉一些bug,在编译之前就解决它,大大地提高了效率;最后,因为是两个人一起编程,不会像独自编程时那样随意,而是会集中注意力以免被队友挑出漏洞,同时在代码格式的使用上也会比较严谨,这样也在一定程度上提高了代码质量。