• 黄金点游戏


    一.问题描述.

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

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

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

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

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

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

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

    二.问题分析及代码实现.

    这个项目要求的是从N个用户处获取数据,经过G点运算获取其差值,找出差值最大者和差值最小者对其进行分数赋予,在预设轮数后结束游戏并输出结果。思路清晰明了,大致为以下几个步骤分:

    1.创建n个用户的方框

    function CreatBox() {
        document.getElementById("result").innerHTML="";
        document.getElementById("Box_num").innerHTML="";
        var Pnum1=document.getElementById("P_num").value;
        var o = document.getElementById("Box_num");
        for (i = 0; i < Pnum1; i++) {
            var Box_num = document.createElement("input"); 
            Box_num.setAttribute('type', 'text');
            Box_num.setAttribute('name', 'B_num');
            Box_num.setAttribute('class', 'form-control');
            Box_num.setAttribute('class', 'input-sm');
            o.appendChild(Box_num); 
        }
    }

    2.创建每人得分的对话框

    function Creatarea(a) {
        document.getElementById("result").innerHTML="";
        var o = document.getElementById("result");
        var res = document.createElement("textarea"); 
        res.setAttribute('name', 'res');
        res.setAttribute('class', 'res');
        res.setAttribute('rows', '10');
        res.setAttribute('cols', '40');
        res.setAttribute('readonly', 'readonly');
        o.appendChild(res); 
        for (i = 0; i <a.length; i++) {
            j=i+1;
            res.innerHTML+="第"+j+"个人的分数是:"+a[i]+"
    ";
        }
    }

    3.创建总得分的对话框

    function Creatarea2(a) {
        document.getElementById("result2").innerHTML="";
        var o = document.getElementById("result2");
        var res = document.createElement("textarea"); 
        res.setAttribute('name', 'res');
        res.setAttribute('class', 'res');
        res.setAttribute('rows', '10');
        res.setAttribute('cols', '40');
        res.setAttribute('readonly', 'readonly');
        o.appendChild(res); 
        for (i = 0; i <a.length; i++) {
            j=i+1;
            res.value+="第"+j+"个人的总分数是:"+a[i]+"
    ";
        }
    }
    function Get_num() {
        var A_num= new Array();
        var P=document.getElementsByName("B_num");
        for (i = 0; i <P.length; i++) {
            A_num[i]=P[i].value;
        }
        var sum=0;
        for (i = 0; i <A_num.length; i++) {
            sum=sum+parseFloat(A_num[i]);
        }
        S=sum/A_num.length;
        A=S*0.618;
        return A;
    }

    4.总分相加的函数

    function Count(S_num) {
        var P_sum=new Array();   
        var Pe_num=new Array();
        var S=Get_num();
        for (i = 0; i < S_num.length; i++) {
            Pe_num[i]=Math.abs(S-S_num[i]);
        }
        var max=Pe_num[0];
        for (i = 0; i <Pe_num.length; i++) {
            if (max<Pe_num[i]) {
                max=Pe_num[i];
            }
        }
        var min=Pe_num[0];
        for (i = 0; i < Pe_num.length; i++) {
            if (min>Pe_num[i]) {
                min=Pe_num[i];
            }
        }
        for (i = 0; i <Pe_num.length; i++) {
            if (max==Pe_num[i]) {
                P_sum[i]=10;
            }
            else if (min==Pe_num[i]) {
                P_sum[i]=-2;
            }
            else {
                P_sum[i]=0;
            }
        }
        var S1 = new Array();  
                S1[0]=P_sum[0]
        return P_sum;
    }
    var q=0;
    var data=new Array();
    function next() {
        var Snum=new Array();
        var num=document.getElementsByName("B_num");
        for (i = 0; i <num.length; i++) {
            Snum[i]=num[i].value;
        }
        q++;
        var A=Count(Snum);
        Creatarea(A);
        var B=new Array();
        if (q==1) {
            for (i = 0; i < A.length; i++) {
                data[i]=parseInt(A[i]);
            }
        }else {
            for (i = 0; i <A.length; i++) {
            var a=parseInt(A[i]);
            data[i]=data[i]+a;
        }
        }
        Creatarea2(data);
    }

    三.实现界面

    刚打开的界面是这样的

    在游戏框里输入游戏人数n(只要是整数就行,没有人数限制),点击游戏人数会出现n个方框。

    在方框中输入每个人的游戏数,点击开始游戏会出现两个对话框,第一个是对每次结果的评分,第二个是游戏进行几次的总评分。

    对游戏一次进行几局没有限定 。

    四.结对编程

    听到老师让我们完成结对编程并给我们随机分组,我是很开心的,因为之前参加ACM竞赛的时候就是三个人一队,团队合作,提前体验过团队合作带给我的好处,况且这次是不以前熟悉的队友,是第一次合作,很期待的。

    我的队友是我班欧阳,知道是他后当然很开心,是个大手哦,平时我们很熟的一起完成这个作业当然很轻松,我习惯用C语言和C++编程,欧阳喜欢用JS网页语言编程,考虑到界面美观问题,我们决定用JS写,这个程序挺简单的就直接上手编程了,欧阳是主编我在旁边检查代码,工作很高效顺利一个下午就ok了。

     五.源代码

    <link rel="stylesheet" type="text/css" href="css/main.css" />
     </head>
    
     <body>
      <div class="header">
        <h1>Gold Point</h1>
      </div>
      <div class="content">
        <div class="col-lg-6 play">
                <div class="input-group">
                   <input type="text" class="form-control" id="P_num">
                   <span class="input-group-btn">
                      <button class="btn btn-default" type="button" onclick="CreatBox()">
                         游戏人数
                      </button>
                   </span>
                </div>
        </div>
        <button type="button" class="btn btn-default" onclick="next()">开始游戏</button>
        <div class="con">
            <div id="Box_num">
            </div>
            <div id="result">
            </div>
            <div id="result2">
            </div>
        </div>
      </div>
     </body>
    <script>
    function CreatBox() {
        document.getElementById("result").innerHTML="";
        document.getElementById("Box_num").innerHTML="";
        var Pnum1=document.getElementById("P_num").value;
        var o = document.getElementById("Box_num");
        for (i = 0; i < Pnum1; i++) {
            var Box_num = document.createElement("input"); 
            Box_num.setAttribute('type', 'text');
            Box_num.setAttribute('name', 'B_num');
            Box_num.setAttribute('class', 'form-control');
            Box_num.setAttribute('class', 'input-sm');
            o.appendChild(Box_num); 
        }
    }
    function Creatarea(a) {
        document.getElementById("result").innerHTML="";
        var o = document.getElementById("result");
        var res = document.createElement("textarea"); 
        res.setAttribute('name', 'res');
        res.setAttribute('class', 'res');
        res.setAttribute('rows', '10');
        res.setAttribute('cols', '40');
        res.setAttribute('readonly', 'readonly');
        o.appendChild(res); 
        for (i = 0; i <a.length; i++) {
            j=i+1;
            res.innerHTML+=""+j+"个人的分数是:"+a[i]+"
    ";
        }
    }
    function Creatarea2(a) {
        document.getElementById("result2").innerHTML="";
        var o = document.getElementById("result2");
        var res = document.createElement("textarea"); 
        res.setAttribute('name', 'res');
        res.setAttribute('class', 'res');
        res.setAttribute('rows', '10');
        res.setAttribute('cols', '40');
        res.setAttribute('readonly', 'readonly');
        o.appendChild(res); 
        for (i = 0; i <a.length; i++) {
            j=i+1;
            res.value+=""+j+"个人的总分数是:"+a[i]+"
    ";
        }
    }
    function Get_num() {
        var A_num= new Array();
        var P=document.getElementsByName("B_num");
        for (i = 0; i <P.length; i++) {
            A_num[i]=P[i].value;
        }
        var sum=0;
        for (i = 0; i <A_num.length; i++) {
            sum=sum+parseFloat(A_num[i]);
        }
        S=sum/A_num.length;
        A=S*0.618;
        return A;
    }
    function Count(S_num) {
        var P_sum=new Array();   
        var Pe_num=new Array();
        var S=Get_num();
        for (i = 0; i < S_num.length; i++) {
            Pe_num[i]=Math.abs(S-S_num[i]);
        }
        var max=Pe_num[0];
        for (i = 0; i <Pe_num.length; i++) {
            if (max<Pe_num[i]) {
                max=Pe_num[i];
            }
        }
        var min=Pe_num[0];
        for (i = 0; i < Pe_num.length; i++) {
            if (min>Pe_num[i]) {
                min=Pe_num[i];
            }
        }
        for (i = 0; i <Pe_num.length; i++) {
            if (max==Pe_num[i]) {
                P_sum[i]=10;
            }
            else if (min==Pe_num[i]) {
                P_sum[i]=-2;
            }
            else {
                P_sum[i]=0;
            }
        }
        var S1 = new Array();  
                S1[0]=P_sum[0]
        return P_sum;
    }
    var q=0;
    var data=new Array();
    function next() {
        var Snum=new Array();
        var num=document.getElementsByName("B_num");
        for (i = 0; i <num.length; i++) {
            Snum[i]=num[i].value;
        }
        q++;
        var A=Count(Snum);
        Creatarea(A);
        var B=new Array();
        if (q==1) {
            for (i = 0; i < A.length; i++) {
                data[i]=parseInt(A[i]);
            }
        }else {
            for (i = 0; i <A.length; i++) {
            var a=parseInt(A[i]);
            data[i]=data[i]+a;
        }
        }
        Creatarea2(data);
    }
    </script>
    </html>
  • 相关阅读:
    bzoj3675 [Apio2014]序列分割
    bzoj4010 [HNOI2015]菜肴制作
    bzoj4011 [HNOI2015]落忆枫音
    bzoj100题
    JSP—内置对象
    集合框架—常用的map集合
    集合框架—HashMap
    集合框架—代码—用各种集合进行排序
    集合框架—2种排序比较器
    array
  • 原文地址:https://www.cnblogs.com/lisiyu/p/5369597.html
Copyright © 2020-2023  润新知