java黄金分割点游戏_黄金点游戏(单机版)

这篇博客介绍了黄金点游戏的规则,并详细阐述了如何使用JavaScript实现多人在线参与的游戏程序。开发过程中,通过限制用户输入确保数字合法性,用二维数组存储玩家数据,计算平均值与黄金分割点G,找出最接近和最远离G的玩家给予相应分数。游戏可运行多轮并记录成绩,最终通过排序确定胜者。结对编程成员为蒲建国和孙乐。
摘要由CSDN通过智能技术生成

1.题目介绍

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

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轮以上,并能够保留各轮比赛结果。

2.需求分析及代码实现

1.用户输入键限制

因为要求输入的是数字且为整数所以需要添加键盘输入事件,规定只能输入数字,不能输入其他字符(除删除键),实现代码:

$('input').keydown(function(event){if(event.keyCode!=8 && (event.keyCode<48 || event.keyCode>57)){return false;

}

});

2.存放用户输入信息

用一个二维数组来存放信息,每个单元data[i][j]代表第i轮游戏,第j玩家,值为玩家所输入的数字。为了便于前期开发阶段的测试,节省玩家提交所消耗的时间,我们使用0~100的随机数来模拟用户输入的数据,以此达到更高的开发效率。

3.计算G值

计算每一轮的玩家数据总数,再除以玩家总数得到平均值,然后再乘以0.618即可得到G值,实现代码:

for(var a=1;a<=lun;a++){var sum = 0;for(var b=1;b<=num;b++){

sum+=parseInt(data[a][b]);

}var avg = sum/num;

var G = 0.618*avg;

}

4.获取最大,最小值

最大,最小指的是与G值的差距,所以要用到绝对值的计算,可以使用js中的Math.abs()来取得绝对值,最后保存下标即可,实现代码:

var max = Math.abs(data[a][1] -G);var min = Math.abs(data[a][1] -G);var max_index = 1; //取下标

var min_index = 1;for(var b=2;b<=num;b++){if(Math.abs(data[a][b] - G) >max){

max= Math.abs(data[a][b] -G);

max_index=b;

}if(Math.abs(data[a][b] - G)

min= Math.abs(data[a][b] -G);

min_index=b;

}

}

5.给出分数

各轮游戏都要记录分数,所以需要一个二维数组score_arr[][]来存放玩家的得分,代码如下:

for(var b=1;b<=num;b++){var score = 0;if(b ==max_index){  //离得最远

score= -2;

}if(b ==min_index){  //离得最近

score=num;

}

score_arr[a][b]=score;

}

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.通过排序来得到输赢结果

在结果数组中排序,分数最高的获胜,分数最低的输,代码如下:

var max_res = res[1];var min_res = res[1];for(var c=2;c<=num;c++){if(res[c] >max_res){

max_res=res[c];

}if(res[c]

min_res=res[c];

}

}

3.作品展示

4.结对简述

项目开发过程记录

2007304775e06f72c2636158701f7441.png

8b21c55ec04b4cbb6cab76af65260ac9.png

结队成员:蒲建国、孙乐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值