zoukankan      html  css  js  c++  java
  • 结对编程——黄金点游戏

    • 项目描述:黄金点游戏

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

      N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动。

    现在请大家根据这个游戏规则,编一个可以多人一起玩的小游戏程序,要求如下:

    1、如果可能的话尽量以C/S或B/S方式实现,即利用服务器接收和处理所有玩家提交的数字,并将结果反馈给各玩家,玩家可以通过客户端提交数字;

    2、如果采用单机方式实现的话,需要为用户提供便利的输入界面;

    3、该游戏每次至少可以运行10轮以上,并能够保留各轮比赛结果。

    本程序用C语言实现,源代码由我和我队友共同完成,代码已上传至coding.net系统中

    我的coding.net链接:https://git.coding.net/Aaric/GoldlenPoint.git

    队友的coding.net链接:https://git.coding.net/KLAPT/d.klb.git

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #define N 50
      4 int l = 1;
      5 
      6 struct User
      7 {
      8     char name[10];//名字
      9     double number;//有理数
     10     double goal;//得分
     11     double golden;//黄金数
     12     User* next=NULL;
     13 };
     14 
     15 void getin_name(User *Head1, int sum_people1)//输入名字和数字
     16 {
     17     User *q, *p;
     18     q = Head1;
     19     for (int i = 0; i<sum_people1; i++)
     20     {
     21         p = (User *)malloc(sizeof(User));
     22         p->next = NULL;
     23         printf("输入名字:
    ");
     24         scanf("%s", p->name);
     25         printf("输入数字
    ");
     26         scanf("%lf", &p->number);
     27         printf("
    ");
     28         printf("
    ");
     29         q->next = p;
     30         q = p;
     31     }
     32 
     33 }
     34 
     35 void get_count(User *Head2, int sum_people2)
     36 {
     37     double sum = 0;
     38     User *y, *s;
     39     y = Head2->next;
     40     s = Head2->next;
     41     while (y != NULL)
     42     {
     43         sum = y->number + sum;
     44         y = y->next;
     45     }
     46     s = Head2->next;
     47     while (s != NULL)
     48     {
     49         s->golden = sum / sum_people2*0.618;
     50         s = s->next;
     51     }
     52 }
     53 
     54 void get_score(User *Head3, int sum_people3, double value11, double value21)//计算得分
     55 {
     56     User *e;
     57     e = Head3->next;
     58     while (e != NULL)
     59     {
     60         if (e->number>e->golden)
     61         {
     62             if (e->number - e->golden == value11)
     63             {
     64                 e->goal = -2;
     65 
     66             }
     67             else if (e->number - e->golden == value21)
     68             {
     69 
     70                 e->goal = sum_people3;
     71             }
     72             else
     73             {
     74                 e->goal = 0;
     75             }
     76 
     77             e = e->next;
     78 
     79         }
     80         else
     81         {
     82             if (e->golden - e->number == value11)
     83             {
     84                 e->goal = -2;
     85             }
     86             if (e->golden - e->number == value21)
     87             {
     88                 e->goal = sum_people3;
     89             }
     90             else
     91             {
     92                 e->goal = 0;
     93             }
     94             e = e->next;
     95         }
     96     }
     97 }
     98 
     99 void put_message(User *Head4)//输出结果
    100 {
    101     User *h;
    102     h = Head4->next;
    103     printf("第%d轮情况:
    ", l);
    104     while (h!= NULL)
    105     {
    106         printf("姓名:%s  输入的数字:%lf  本人得分:%lf   黄金值:%lf
    ", h->name, h->number, h->goal, h->golden);
    107         h = h->next;
    108     }
    109     l++;
    110 }
    111 
    112 int main()
    113 {
    114     User users[N];
    115     double gol;
    116     double value1 = -1;//最大值
    117     double value2 = 1000;
    118     int sum_people;//总人数
    119     int ring;//总轮数
    120     printf("             **********黄金点游戏*********
    ");
    121     printf("             输入玩游戏总人数:
    ");
    122     scanf("%d", &sum_people);
    123     printf("              输入想要玩的总轮数:
    ");
    124     scanf("%d", &ring);//总轮数
    125     printf("
    ");
    126     printf("
    ");
    127 
    128     User *Head, *u;
    129     for (int i = 0; i < ring; i++) {
    130         Head = (User *)malloc(sizeof(User));
    131         Head->next = NULL;
    132         getin_name(Head, sum_people);
    133         get_count(Head, sum_people);
    134 
    135         //比较
    136         u = Head->next;
    137         while (u != NULL)
    138         {
    139             if (u->number > u->golden)
    140             {
    141                 gol = u->number - u->golden;
    142                 if (gol > value1)
    143                 {
    144                     value1 = gol;
    145                 }
    146                 if (gol <= value2)
    147                 {
    148                     value2 = gol;
    149                 }
    150                 u = u->next;
    151             }
    152             else {
    153                 gol = u->golden - u->number;
    154                 {
    155                     if (gol > value1)
    156                     {
    157                         value1 = gol;
    158                     }
    159                     if (gol <= value2)
    160                     {
    161                         value2 = gol;
    162                     }
    163                     u = u->next;
    164                 }
    165             }
    166         }
    167         get_score(Head, sum_people, value1, value2);
    168         put_message(Head);
    169         users[i].next = Head->next;
    170     }
    171     for (int r = 0; r < ring; r++) {  //游戏结束后输出各轮游戏的黄金点
    172         printf("第%d轮结果:
    ", r+1);
    173         printf("此轮黄金值是:%lf ", users[r].next->golden);
    174         printf("
    ");
    175         printf("
    ");
    176     }
    177     return 0;
    178 }
    黄金点源代码
    • 结队编程

      • 我的搭档

      我的搭档来自美丽的云南,一个山清水秀的地方。我一直好奇他为什么跨越大半个中国来沈阳,得到的回答是:命运!拽的不行不行的。在我的印象里,他确实是一个热情,开朗,大方,阳光而且很帅气的小伙子,很踏实,很青春。

    他的博客链接:http://www.cnblogs.com/KL2016/p/5964215.html

    下面是我俩的照片,近处是我,远处是我的搭档。

     
      • 我对他的评价

      评价别人可是一件很严肃的事情,背后偷摸说说也就算了,这么光明正大地评价感觉压力好大——万一出点意外打起来咋整,我可没把握打赢他!

      我队友性格很随和,跟周围人相处的都挺好,办起事来认真踏实,效率很高,一起写代码的时候他的结果经常比我的先出。一个人写的代码或多或少总会有一些不足,而且自己也很难发现,我俩一起调试代码的时候他总是很耐心的给我讲解他的思路,我的一些错误他也能及时指出,大大提高了代码的质量以及编程效率。

      • 各自的工作及习惯总结

      一开始我俩一起交流想法,讨论编程思路,总结出大概的框架,然后各自编写具体代码,将代码合并之后俩人一块调试,再一块分析一些细节问题,之后各自分配任务,再去实现自己的代码。。。经过一次次的磨合之后任务才最终完成。

      我队友的编程习惯和我差不多,包括命名规则、代码格式、封装等等,毕竟都是相同的老师教的,这就进一步提高了我们结对编程的效率。在命名规则上,他通常用单词加下划线的方式命名。如用sum_people表示总人数,见名知其意!代码格式中保证缩进及不同模块间的空行,以及必要的注释,代码可读性很高。

    • 总结

      紧赶慢赶一个星期,总算及时完成了这个任务,这期间虽然很幸苦,但很值得。有很多不会的东西需要边学边用,比如一些算法设计相关的知识。整个过程中我对结对编程最大的体会就是编程效率极高,自己编的代码对方总能很快找出一些问题,并及时修改。再加上我们都很注意编码规范,所以理解对方的代码对我们并没有很大的影响。此次任务让我对我的搭档也有了进一步的了解,希望以后的团队编程中能配合的更好。

  • 相关阅读:
    131. Palindrome Partitioning
    130. Surrounded Regions
    129. Sum Root to Leaf Numbers
    128. Longest Consecutive Sequence
    125. Valid Palindrome
    124. Binary Tree Maximum Path Sum
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    120. Triangle
    119. Pascal's Triangle II
  • 原文地址:https://www.cnblogs.com/jisuanji140212/p/5950916.html
Copyright © 2011-2022 走看看