zoukankan      html  css  js  c++  java
  • 软件工程第三次作业

    结对编程:黄金点游戏

    一、题目描述

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

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

       1、本作业属于结对编程项目,必须由二人共同完成,并分别将本次作业过程发到博客,同时将本次作业源代码提交到coding系统;

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

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

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

    二、需求分析

    游戏需要实现以下功能:

       1.玩家人数,轮次,数据输入;

       2.G值的计算与输出;

       3.每位玩家得分成绩输出;

    游戏由输入,输出,数据计算处理三部分组成。

    三、程序设计

    由于水平有限,不能用C/S和B/S来实现,所以用C写了个简单的单机游戏,部分代码如下:

    这里定义了结构体,包含玩家信息

    1 typedef struct player {  //定义玩家结构体
    2     int name;
    3     int score;
    4     int win;
    5     int defeat;
    6     float number;
    7     float b;    
    8 }PLAYER; 
    View Code

    三个功能函数,开始,规则介绍,计算

    1 void start();   //游戏的初始化
    2 void rule();            //游戏规则介绍
    3 void count(PLAYER *p,float ave,int num);//计算比赛得分的函数
    View Code

    为输入的玩家分配空间,玩家输入数据,计算G值

     1     p=(PLAYER *)malloc(10*sizeof(PLAYER)); //动态分配结构体数组
     2 
     3     system("cls");
     4     printf("
    
    
    ");
     5     printf("                 请输入游戏人数: ");
     6     fflush(stdin);
     7     scanf("%d",&player_num);                
     8 
     9     if(player_num>10){
    10         p=(PLAYER *)realloc(p,player_num*sizeof(PLAYER));//空间不足而需要增加空间
    11        }
    12 
    13     printf("                 请输入游戏轮数: ");
    14     fflush(stdin);
    15     scanf("%d",&game_num);                           
    16 
    17     for(j=0;j<game_num;j++){
    18         printf("
    
    ");
    19         printf("第%d轮比赛:
    ",j+1);
    20         for(i=0,sum=0;i<player_num;i++) {          //sum设为总数和
    21             if(flag==1){
    22                 p[i].name=i+1;
    23                 p[i].score=0;       //初始化初值为0
    24                 p[i].win=0;
    25                 p[i].defeat=0;
    26               }                              
    27             printf("      玩家%d: ",p[i].name);
    28             scanf("%f",&p[i].number);
    29             sum+=p[i].number;
    30         }
    31         ave=sum/player_num;        //计算平均值
    32         ave=(float)(ave*0.618);   //计算黄金点的值
    33         printf("      黄金点G的值为:%f
    ",ave);
    34         count(p,ave,player_num); 
    35         flag=0;
    36     }
    View Code

    计算玩家的成绩

     1  int i;
     2     char ch;
     3     float max=(float)fabs(p[0].number-ave);
     4     float min=(float)fabs(p[0].number-ave);
     5     
     6     for(i=0;i<num;i++) {        //统计出本轮最大值,最小值
     7         p[i].b=(float)fabs(p[i].number-ave); 
     8         if(max<p[i].b)
     9             max=p[i].b;        
    10         if(min>p[i].b)
    11             min=p[i].b;       
    12     }
    13     
    14     for(i=0;i<num;i++) {       //挨个玩家赋予成绩
    15         if(p[i].b==max) {
    16             p[i].score-=2;    
    17         }
    18         else if(p[i].b==min) {
    19             p[i].score+=num;
    20         }
    21         else{
    22             p[i].score+=0;
    23         }
    24     }
    25 
    26     printf("累计比赛得分:
    ");
    27     for(i=0;i<num;i++) {       //挨个玩家输出成绩
    28         printf("      玩家%d: %d
    ",p[i].name,p[i].score);
    29     }
    View Code

    四、程序实现与总结

    1.结对编程过程中,我负责代码的编写,我的队友刘馨负责代码的审理,下图是结对照片。

    2.游戏界面:

    3.开始游戏,输入人数、轮数,玩家数据

    4.输出G值,玩家分数

    5.规则介绍

    6.总结

         在编程过程中遇到许多问题,变量取名不规范,别人不易看懂,没有加注释,代码的书写不整洁,得分数据处理时情况考虑不周,没有考虑数据全部相等

    的情况,这些大大小小的问题都在编程中队友的矫正发现下得到及时的解决。队友是个女孩,沉稳文静,观察思考细致,工作认真,具有很好的想法。我们通

    过查阅料来尽力完善方方面面。期间我们收获良多,学到了很多以前没有学到的知识,也感受到团队协作的重要,两个人更容易发现错误,分工明确,取长

    补短,优势互补。

    7.博客园链接

    我的链接:https://i.cnblogs.com/lovewj/

    同伴的链接:http://www.cnblogs.com/wwsthg/

    8.coding.net地址:https://coding.net/u/lovewj/p/goldgame/git/upload/master/

  • 相关阅读:
    批量渲染烘焙贴图工具
    Reset textruemap _path of ZIP and copy allfiles to samepackage
    剔除数组中的相同元素
    选择样条曲线的OPEN 点
    帮朋友修改的小工具
    MAX脚本规范
    jQuery牛人
    最近在连远程的时候,粘贴数据库中数据信息时,为什么会不成功呢
    最近在连远程的时候,粘贴数据库中数据信息时,为什么会不成功呢
    Model层代码自动生成
  • 原文地址:https://www.cnblogs.com/lovewj/p/5967080.html
Copyright © 2011-2022 走看看