基于js脚本的单机黄金点游戏
题目描述
N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。
需求分析
一、根据题目描述,该程序主要功能如下:
1.实现N个同学个数,及游戏轮数的输入。
2.实现这些同学所报有理数的输入。
3.能够根据输入进行黄金点(G点)的计算并将结果输出。
4.能够计算出每轮游戏之后的同学得分情况并将结果输出。
二、模块抽象
根据以上分析,可将该程序抽象为以下几个模块:
玩家个数即轮数录入模块:负责录入玩家个数即轮数同时并保存,同时得具备输入有效性判断,如没有输入或输入不符合要求时能够给出提示信息。
有理数录入模块:负责录入玩家出入的有理数并保存,具备输入有效性判断。
数据处理模块:负责处理录入的数据,应具备求平均数,求输入数据与平均数差值,求各个玩家得分的功能,同时应具备数据存储功能,以便将结果输出。
显示模块:负责将以上模块处理得到的数据进行输出,同时应注意显示形式,要有良好的用户体验度。
各个功能模块图之间的关系如图1所示
图1
总体设计
b/s模式工程浩大,时间有限,即使是结对编程,对于我们来说也具有不小挑战,综合考虑各种情况,故本次编程整体使用html + css +javascript 来实现全部功能,采用浏览器模式呈现单机运行效果。
一、页面设计
玩家个数即轮数录入界面如图2所示。
图2
有理数录入界面如图3所示。
图3
结果处理如图4所示。
图4
二、功能设计
- 玩家个数即轮数录入功能
将玩家个数和轮数录入到相应位置,当点击如图2所示确定按钮,为按钮绑定一个点击响应事件,获取用户输入的轮数和次数,将其保存为全局变量,并用正则表达式检测输入合法性,若不合法给出提示信息(弹出警告框或其他),若合法将有理数录入界面显示。
- 有理数录入功能
有理数的保存采用数组的形式,录入完毕,点击确定同样绑定点击响应事件用正则表达式检测无误后,将数保存在数组中,同时将上方的提示语句更新,当所有信息录入完毕,录入框消失,结果呈现。
- 数据处理功能
玩家的得分因涉及到多轮,同时要在多个地方使用,采用全局数组的形式保存。将录入功能得到的数据求取平均值计算出黄金点后,再求出各玩家输入的有理数与黄金点差值的最大值与最小值,根据最大值与最小值计算玩家得分,记录到全局数组中。
编码实现
结对过程中我的身份是实施者,刘珊是领航员,结对照片如图5所示。
图5
编码规范
编码规范这块我一直都在注意,不过即使很小心,也会出现由于习惯问题造成的不规范。例如注释书写不规范,对于程序中不太容易理解的地方总是忘加,函数大括号组合不规范经常挤到一起等等,这些问题在结对编程过程中领航员即使为我纠正。
思想沟通
在编码过程中,我对问题的理解不是太具体。例如在求每位玩家最后得分的时候,我考虑问题不是太细致,没有考虑到当玩家录入的数据相同且为得分对象时他们应该一起得N分或扣2分,领航员发现后即时叫停,与我沟通为我矫正。
共同学习
由于采用html + css +javascript来实现全部功能,这方面接触不是很多,编码期间我与领航者查阅了很多资料,同时我也从领航员那里学习了以前没有接触到的知识,我们共同学习,比一个人编程效率更高。
对领航员的评价
考虑问题比较细致(这也许是女孩的天性吧),具有很好的资料查询与汇总能力,用户界面设计方面比较人性化。
实际效果图
玩家个数即轮数录入界面如图2所示。
图6
有理数录入界面如图7所示。
图7
结果处理即显示如图8所示。
图8
总结
- 本次编程时间短任务急,采用结对编程优势互补,领航员让我明白软件开发需要更多的耐心与毅力。
- 实施者要想实现高效编程除了完成好自己的代码之外要与领航员即使沟通,这样才能提高代码的质量。
- 团队力量大于个人。
附录本次结对编程代码:
玩家即轮数录入
$("#pnum").click(function(){
player_num = $(".player_num").attr("value");
var reg = new RegExp("^[0-9]*$");//验证数字的正则表达式 if(player_num==''||!reg.test(player_num)){
$(".player_num:text").grumble({
text: '人数不能为空,且只能为数字!',
angle: 90,
distance: 5,
showAfter: 100,
hideAfter: 2000
});
return false;
} times = $(".times").attr("value");
if(times==''||!reg.test(times)){
$(".times:text").grumble({
text: '次数不能为空,且只能为数字!',
angle: 90,
distance: 5,
showAfter: 100,
hideAfter: 2000
});
return false;
}
for(var i=0;i<player_num;i++){
total_grade [i] = 0;
} $(".member").show(500)/*css('display', 'block')*/; });
玩家有理数录入
var m = 0;
var t = 0;
var num = [];
$("#grade_button").click(function(){
var val = 0;
val=$("#number").attr("value");
var reg = new RegExp("^[0-9]*$");//验证数字的正则表达
if(val==''||!reg.test(val)){
$("#number").grumble({
text: '输入有误!',
angle: 90,
distance: 15,
showAfter: 100,
hideAfter: 2000
});
return false;
}
else{
num[m]=val;
m++; if(m<player_num&&t<times)
$(".message").html( '<p>第'+(t+1)+'轮'+'玩家'+(m+1)+'输入<p>')
clear(); if(m==player_num){
t++;
grade(num);
m=0;
if(t<times)
$(".message").html( '<p>第'+(t+1)+'轮'+'玩家'+(m+1)+'输入<p>')
if(t==times){
$(".member")./*css('display', 'none').*/hide(500);
$("#pnum").hide(500);
$("#pnum").grumble({
text: '请刷新页面重新开始',
type: 'alt-',
angle: 90,
distance: 15,
showAfter: 100,
hideAfter:2000
});
t=0;
}
}
}
});
数据处理即显示
function grade(num){ var s=0;
for (var i = 0; i < player_num; i++) {
s=parseFloat(num[i])+s;
} //alert(s);
s=s/ parseFloat(player_num);
//alert(s);
s=s*0.618; var maxnum = 0;
var minnum = 100; for(i=0;i<player_num;i++){
if((Math.abs(num[i]-s))>maxnum){
maxnum = Math.abs(num[i]-s);
}
if((Math.abs(num[i]-s))<minnum){
minnum = Math.abs(num[i]-s);
}
} $("#box2>ul").append('<li>第'+t+'轮比赛结果:</li>');
for(i=0;i<player_num;i++){
if(Math.abs(num[i]-s)===maxnum){
total_grade[i]+=-2;
//alert(typeof(total_grade[i]));
}
else if(Math.abs(num[i]-s)===minnum){
total_grade[i]+=parseFloat(player_num);
//alert(typeof(total_grade[i]));
}
else{
total_grade[i]+=0;
//alert(typeof(total_grade[i]));
} $("#box2>ul").append(' <li>'+'玩家'+(i+1)+'得分'+total_grade[i]+'</li> ');
}
$("#box2>ul").append('<li>黄金点:'+s.toFixed(3)+'</li>');
$("li:last").after( '<br />');
};
(时间有限,我们的测试不够全面,欢迎大家到Coding中下载原码文件进行测试,并将测试体验反馈给我)
Coding地址:https://git.coding.net/kanjian2016/Gold-point-Game.git
刘珊的博客地址:http://www.cnblogs.com/fengzi-liu/p/5966040.html
基于js脚本的单机黄金点游戏的更多相关文章
- Python Web实战 - 基于Flask实现的黄金点游戏
一.简介 团队成员: 领航者:张旭 驾驶员:张国庆 项目简介: 项目名称:基于B/S模式的黄金点游戏 采用技术: 后端:Python + Sqlite3 前端:HTML + CSS + JS + Bo ...
- 6.游戏特别离不开脚本(3)-JS脚本操作java(3)(直接操作JS文件或者调用函数)
java直接运行JS脚本文件的语句,游戏开发时,策划的配置文件什么的就可以分开管理了,游戏逻辑也是一样,比如:一个功能一个脚本或者一个系统一个脚本. import java.io.FileNotFou ...
- 黄金点游戏(js+css)
一.项目描述:黄金点游戏 黄金点游戏是一个数字小游戏,其游戏规则是: N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0 ...
- 基于JS的高级脚本语言 Sara
Sara-基于JS的高级脚本语言 欢迎使用Sara,Sara是一款基于JavaScript的全新的高级脚本语言! Sara不像我们工作室上一款编程语言作品-Ginit一样,他属于更高级的语言 Sara ...
- Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理)
也许这一篇文章的内容有点枯燥,但我要说的是如果你想深入的了解游戏引擎是如何处理动画片断或者素材并 让玩家操控的角色动起来栩栩如生,那么这真是一篇好文章(当然我仅仅是翻译了一下) 动画脚本 Anim ...
- 高端黑链SEO—恶意JS脚本注入访问伪随机域名
摘要:我们的服务器又出入侵事故了.有客户的 html 网页底部被插入了一段 js 脚本,导致访客打开网页时被杀毒软件警告网站上有恶意代码.在黑链 SEO 中这是常见的手法,但奇特的地方就在于我们这次捕 ...
- 使用Js脚本 修改控制IE的注册表相关设置(activex等)
使用Js脚本 修改控制IE的注册表相关设置(activex等) 分类: PHP2012-12-05 18:51 2035人阅读 评论(2) 收藏 举报 脚本写法: <SCRIPT LANGUAG ...
- (转)优化js脚本设计,防止浏览器假死
在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了,必须进行优化. 为什么会出现这种情况呢,我们先来看一下浏览器的内 ...
- 黄金点游戏之客户端(homework-05)
0. 摘要 之前我们玩了2次黄金数游戏,我也幸运的得到了一本<代码大全>,嘿嘿.这次的作业是一个Client/Server程序,自动化完成多轮重复游戏. 我完成了Client部分,使用C# ...
随机推荐
- tomcat 高并发配置 与优化
公司的一个服务器使用Tomcat6默认配置,在后台一阵全点击服务器就报废了,查了一下就要是PERMSIZE默认值过小造成(16-64) TOMCAT_HOME/bin/catalina.sh 添加一行 ...
- 矩阵快速幂——将运算推广到矩阵上HDU 1575
/* 本题的思路比较简单,就是将递推公式写出来,然后表达成为一个矩阵的形式 最后通过计算就可以得到一个符合题目要求的矩阵, 然后就是将矩阵上面所有的对角线元素相加 得到的结果即为所求的目标 */ #i ...
- StartSSL证书申请
StartSSL官方地址: http://www.startssl.com/ 申请过程: 1)填写资料 2) 获取得验证码 3)提交验证码,等待6小时审核. 4)再次获得验证码,提交等待审核 5)审核 ...
- how to add a shared lib in C?
http://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html Basically, 2 steps: 1) make the ...
- RGB888转RGB666
内存中的数据排列高位在左,低位在右 RGB888->RGB666 高 -------低 B[3] B[2] B[1] B[0] ...
- DataGridView直接导出EXCEL
1public void DataToExcel(DataGridView m_DataView) { SaveFileDialog kk = new SaveFileDialog(); kk.Tit ...
- ios 贝塞尔画图
CGContextRef context = UIGraphicsGetCurrentContext(); //写文字 CGContextSetRGBFillColor(context, 1, 0, ...
- git 查看当前与上一次version的差异
http://stackoverflow.com/questions/9903541/finding-diff-between-current-and-last-versions up vote47d ...
- auto_ash
#!/usr/bin/ksh ##############paramter######################startdate=$1' 00:00:01'enddate=$2' 23:59: ...
- php多进程实现
php多进程实现 PHP有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能在nginx系统中实现跟c一样的创建子进程.使用exec函数执行程序.处理信号等功能. ...