黄金点游戏

一.问题描述.

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

      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>
原文地址:https://www.cnblogs.com/lisiyu/p/5369597.html