黄金点游戏
黄金点游戏
黄金点游戏是一个数字小游戏,其游戏规则是:
N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动。
现在请大家根据这个游戏规则,编一个可以多人一起玩的小游戏程序,要求如下:
1、本作业属于结对编程项目,必须由二人共同完成,并分别将本次作业过程发到博客,同时将本次作业源代码提交到codeing系统;
2、如果可能的话尽量以C/S或B/S方式实现,即利用服务器接收和处理所有玩家提交的数字,并将结果反馈给各玩家,玩家可以通过客户端提交的数字;
3、如果采用单机方式实现的话,需要为用户提供便利的输入界面;
4、该游戏每次至少可以运行10轮以上,并能够保留各轮比赛结果。
用结构体保存玩家信息
typedef struct gameplayer //定义玩家结构体 { int name; int score; int win; int fail; float number; float b; }PLAYER; //含有玩家的姓名,分数,编号,分数
计算及输出玩家成绩
void suan_score(PLAYER *p,float ave,int num,FILE *fp) { int i; char ch; float max=(float)fabs(p[0].number-ave); float min=(float)fabs(p[0].number-ave); for(i=0;i<num;i++) //统计出本轮最大值,最小值 { p[i].b=(float)fabs(p[i].number-ave); if(max<p[i].b) max=p[i].b; if(min>p[i].b) min=p[i].b; } for(i=0;i<num;i++) //挨个玩家赋予成绩 { if(p[i].b==max) { p[i].score-=2; } if(p[i].b==min) { p[i].score+=num; } } printf("累计比赛的得分:\n"); for(i=0;i<num;i++) //挨个玩家输出成绩 printf(" 玩家%d: %d\n",p[i].name,p[i].score); while(1) { printf("是否继续 Y or N : "); scanf("%c",&ch); if(ch=='y'||ch=='Y') { break; } else if(ch=='n'||ch=='N') { exit(0); } } }
运行界面
开始游戏输入界面,输入玩家人数、游戏轮次和玩家输入的数
输出本轮运行成绩并决定是否进行下一轮游戏
总结,通过这次结队编程我知道了规范编码和编写相应的注释的重要性,不然队友很难读懂你写的程序;并且学会了如何与队友培养默契为以后工作打下了基础。
结对编程工作照:
结对伙伴博客园地址:http://www.cnblogs.com/lvjianxiong/
结对伙伴Coding主页地址:https://coding.net/u/lvjianxiong
本人Coding主页地址:https://coding.net/u/hulinzhuang