黄金点游戏

黄金点游戏

      黄金点游戏是一个数字小游戏,其游戏规则是:

      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

posted @ 2016-04-09 19:21  胡林状  阅读(487)  评论(1编辑  收藏  举报