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表示总人数,见名知其意!代码格式中保证缩进及不同模块间的空行,以及必要的注释,代码可读性很高。

    • 总结

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

  • 相关阅读:
    java堆溢出和栈溢出
    一张图看懂JVM
    java学习书籍
    Linux内核、mysql内核、Tcp/Ip内核、java等知识书籍
    mac 下安装mysql8.0
    软件各种系统架构图
    架构师必看:软件架构图的艺术
    JVM
    docker 镜像整理
    自定义ResultMap查询,这里的关联写法只能用于不分页
  • 原文地址:https://www.cnblogs.com/jisuanji140212/p/5950916.html
Copyright © 2011-2022 走看看