结对编程黄金点游戏

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

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

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语言的,我已经深深的被她吸引,我相信将来我会做的更好。

 

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

 

这是每次得出的分数。

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

我会继续努力继续进步。

posted on 2016-04-09 14:24  破茧新生  阅读(301)  评论(1编辑  收藏  举报

导航