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

    这次的编程实验我的队友是慕向昕,我们共同完成了本次实验。

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

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

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

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

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

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

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

    在得到这个题目后我们对这次的实验如何进行进行了一些讨论。

    我们先从实验方法上进行了讨论,要实现可视化可选择的语言有很多但是我们学习的CC++要实现界面的就不如其他语言了。于是经过分析我们决定使用一种新的语言java语言,java是一种出色的面向对象的跨平台编程语言。为了能更好的学习java,我向图书馆借了三本有关java的书。如《java典型模块与项目实战大全》、《java程序设计与项目实践》、《java学习笔记》,并且从网上买了一本《零基础学java》的书。我们共同努力共同学习来完成这个编程实验。

    在学习的过程中我们并没有停下编程。我们对本次编程进行了探讨画出编程的流程图便于本次的实验。进过我们共同的商议决定先编程实现游戏的进行。于是我们便先完成了如下代码:

    for(int h=0;h<nump;h++){
    
             goal[h]=0;
    
             gan[h]=0;
    
            }
    
            for(int s=0;s<numg;s++)
    
            { 
    
                 System.out.println("游戏开始");
    
           for(int k=0;k<nump;k++) { 
    
            System.out.println("由玩家输入估计的数值num值为整形");
    
            double num = in.nextDouble(); //接收float型数据
    
                numn[s][k]=num;    
    
                }
    
                                       
    
            for(int j=0;j<nump;j++)
    
            {
    
          sum+=numn[s][j];
    
              }
    
       
    
         G=(sum/nump)*0.618;//求G值  
    
          double dif=0;
    
          
    
         for(int qq=0;qq<nump;qq++){//求分数
    
         dif=Math.abs(numn[s][qq]-G);
    
         goal[qq]=dif;    
    
           }
    
            for(int f=0;f<nump;f++)
    
             {
    
                if(max<goal[f])
    
                   max=goal[f];
    
                if(min>goal[f])
    
                 min=goal[f];                
    
              }
    
             for(int th=0;th<nump;th++)
    
             {
    
              if(goal[th]==min)
    
              gan[th]=gan[th]+nump;
    
              if(goal[th]==max)
    
              gan[th]=gan[th]-2;
    
             }             
    
             
    
            for(int tt=0;tt<nump;tt++)
    
            {
    
             System.out.println(gan[tt]);
    
              }
    
            }        

       这个代码是用三个数组来实现的,numn[][]数组是来存放游戏者输入的值的,goal[]是中间数组用来求分数的时候对他们判断的差距进行存放。还有一个数组gan[]用来存放每个玩家的分数的。使用多个for循环来控制语句,控制变量。外层for循环来控制游戏的进行次数。这个代码的实现还是很简单的。我们分别进行的编码最终选用了我的来实现程序。就是上面所写代码。

       在编程的过程中我们遇到过麻烦但是我们去查书、去上网百度,最终这些麻烦都得到了很好地解决。我们从最初的连java的输入输出都不会到完成一个程序虽然遇到过困难但是我们克服了,这个过程是非常的享受的。

    这是我们一起进行编程一起讨论。

     

    我们经过几天的学习对java的了解也更多了。Java的运行过程也略有熟悉,我就将输入输出之类的加上,将程序完善。

    代码如下:

    import java.awt.event.MouseEvent;
    
    import java.util.Scanner;
    
    public class shiyan4 {  
    
        @SuppressWarnings("resource")
    
    public static void main(String args[])  
    
        {  
    
            Scanner in=new Scanner(System.in); //使用Scanner类定义对象  
    
            double numn[][] = new double [100][100]; 
    
            double goal[] = new double [100];
    
            double gan[] = new double [100];
    
            double max=0,min=100;
    
            double sum=0,G=0;
    
            System.out.println("请输入人数mump");  
    
            double nump=in.nextDouble(); //接收float型数据 
    
            System.out.println("请输入游戏次数mumg");  
    
            double numg=in.nextDouble(); //接收float型数
    
            for(int h=0;h<nump;h++){
    
             goal[h]=0;
    
             gan[h]=0;
    
            }
    
            for(int s=0;s<numg;s++)
    
            { 
    
                 System.out.println("游戏开始");
    
           for(int k=0;k<nump;k++) { 
    
            System.out.println("由玩家输入估计的数值num值为整形");
    
            double num = in.nextDouble(); //接收float型数据
    
                numn[s][k]=num;    
    
                }
    
                                       
    
            for(int j=0;j<nump;j++)
    
            {
    
          sum+=numn[s][j];
    
              }
    
       
    
         G=(sum/nump)*0.618;//求G值  
    
          double dif=0;
    
          
    
         for(int qq=0;qq<nump;qq++){//求分数
    
         dif=Math.abs(numn[s][qq]-G);
    
         goal[qq]=dif;    
    
           }
    
            for(int f=0;f<nump;f++)
    
             {
    
                if(max<goal[f])
    
                   max=goal[f];
    
                if(min>goal[f])
    
                 min=goal[f];                
    
              }
    
             for(int th=0;th<nump;th++)
    
             {
    
              if(goal[th]==min)
    
              gan[th]=gan[th]+nump;
    
              if(goal[th]==max)
    
              gan[th]=gan[th]-2;
    
             }             
    
             
    
            for(int tt=0;tt<nump;tt++)
    
            {
    
             System.out.println(gan[tt]);
    
              }
    
            }        
    
    }
    
    }

          这个代码达到了老师要求的大部分,我们想对代码进行改善,如加上界面,但是我们遇到了一些麻烦,对界面的学习我们还不到位,尽管我们很想很好地完成老师的任务,但是很遗憾我们没能实现。没能很好的完成老师布置的任务。不过我会继续努力学习java语言的,我已经深深的被她吸引,我相信将来我会做的更好。

     

    这是进行游戏的过程,有一个人负责进行游戏操作决定玩家的人数和游戏的轮数,玩家把自己估计的值说个操作者,由操作者进行输入,我们这个游戏每轮都会给出成绩玩家,操作者可以决定玩家是否看每次的分数,增加游戏的乐趣。

     

    这是每次得出的分数。

    这次的编程过程很愉快,我们都进行了努力去编写这个程序,这个程序是我付出了很多,但同时我也收获了很多。我的编程伙伴是慕向昕,他编程也很有想法,编程序的整体思想很好,同时他也很虚心谦让,我们共同努力共同进步。

    我会继续努力继续进步。

  • 相关阅读:
    docker清理无用资源
    为什么不需要在 Docker 容器中运行 sshd
    转载:SQL注入演示demo
    docker方式安装prometheus主控
    promethus监控结构
    oracle的函数
    oracle冷备份后恢复
    oracle的冷备份
    oracle常用
    oracle的系统文件的查询
  • 原文地址:https://www.cnblogs.com/pmfei/p/5371587.html
Copyright © 2011-2022 走看看