结对编程--黄金分割点游戏
一、题目
黄金点游戏是一个数字小游戏,其游戏规则是:
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轮以上,并能够保留各轮比赛结果。
百度百科中是这样解释的,黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。其比值是一个无理数,用分数表示为(√5-1)/2,取其前
三位数字的近似值是0.618。由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。这个分割点就叫做黄金分割点(golden section ratio通常用Φ表示)这是一个
十分有趣的数字,我们以0.618来近似表示,通过简单的计算就可以发现:(1-0.618)/0.618≈0.618一条线段上有两个黄金分割点。
二、代码实现
我的队友告诉我用javascript编写,做一个单机的网页格式,我只了解一点点网页编程,还好有队友,还有一个可以自学的网站w3c,上面有很多教程,队友告诉我这个比java简单一点,我的队友是蒲建国,他是一个编程能力很强的人,而且他很有耐心,他教会了我很多,(ps:而且我们学院的网站还有他的功劳呢),我以前一直以为编程必须要有一个编程软件,他告诉我编写网页的不需要,建造一个日记本文档,然后用浏览器打开,附图一张:
下面是代码实现:
1、
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title></title>
<!-- <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> -->
<script src="jquery-1.9.1.min.js"></script>
<script type="text/javascript" >
调用javascript语言,学习这个的时候感觉好神奇,接下来就可以写javascript语言了!
2、
var i=1; //第几轮
var j=1; //第几个人
var data= [];
输入进行几轮和几个人进行此游戏,并记录每个人输入的数据,javascript中定义变量比c语言简单,var是定义,当需要定义变量时,写var即可,不需要定义变量的类型,是不是很方便呢,反正我觉得是。
3、
({
var array = [];
for(var a=1;a<=lun;a++){
array[a] = [];
for(var b=1;b<=num;b++){
array[a][b] = Math.floor(Math.random()*100);
}
}
result(array,num,lun);
})
该游戏有一模拟功能,输入人数和几轮,可以点击模拟游戏,将随机产生数据,这个和c语言中差不多,调用rand函数,产生随机数。
4、
$('#submit').click(function()
{
var val = $('input[name=val]').val();
if(val<1 || val>99){
alert('请输入0~100之间的有理数,不包括0或100');
return false;
}
//alert(i);alert(j);
//alert(val);
//alert(data[i][j])
data[i][j] = val;
//alert(data[i][j]);
//alert('提交成功');
//进入下一轮游戏
$('input[name=val]').val('');
j++;
if(j>num){
alert('本轮游戏结束,进入下一轮游戏!');
j=1;
i++;
if(i>lun){
alert('本次游戏结束!');
//游戏结束
$('#createDiv').css('display','block');
$('#input').css('display','none');
i = 1;
j = 1;
result(data,num,lun);
}
$('#now').find('.lun').html(i);
}
当确定人数和轮次后,输入每一个玩家的数字,轮次结束后,数据记录完毕。
5、
var max = Math.abs(data[a][1] - G);
var min = Math.abs(data[a][1] - G);
var max_index = 1;
var min_index = 1;
黄金分割点的游戏需要将每一轮的数据求取平均数,求取平均值后,找出每一相差最大和最小的,分别记作2分和-2分,其他为0
6、
for(var b=1;b<=num;b++){
var sum = 0;
for(var a=1;a<=lun;a++){
sum += parseInt(score_arr[a][b]);
}
res[b] = sum;
}
记分循环结束后,统计每个玩家的最终得分,将玩家的得分统计到数组中,通过比较,得出赢家。
7、游戏网页:http://2.raul272.applinzi.com/software/game.html
8、游戏界面
输入玩家人数和轮次,点击虚拟游戏,将随机产生数据,并且判断赢家
神奇吧,得到了玩家2是赢家。
下面是真正游戏的时候,想图片一样,当输入一个玩家的数据后,将自动跳到下一个玩家,记者输入即可。
8、这次结对编程真的学到了很多,队友很有耐心而且编程能力很好。
html是超文本标记语言,标准通用标记语言下的一个应用。
超文本标记语言的结构包括“头”部分(英语:Head)、和“主体”部分(英语:Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容,
下面是我们结对编程照片
结队成员:蒲建国、孙乐
蒲建国的博客:http://www.cnblogs.com/pujianguo
蒲建国的conding:https://coding.net/u/pujiangu