黄金点游戏
一.问题描述.
黄金点游戏是一个数字小游戏,其游戏规则是:
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]+"\n"; } }
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]+"\n"; } } 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]+"\n"; } } 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]+"\n"; } } 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>