基于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# ...
随机推荐
- getuid和geteuid的区别
getuid() : 函数返回一个调用程序的真实用户ID.表明当前运行位置程序的执行者. geteuid(): 函数返回返回一个有效用户的ID.(EUID)是你最初执行程序时所用的ID,该ID是程序 ...
- SharePoint 2010 Modal Dialog
SharePoint 2010 Modal Dialog Tweet Modal dialog play very important role to improve the user exper ...
- servlet第1讲初识
- centos6.5中gitlab的搭建
使用gitlab官网给的源码进行安装,步骤如下: Install a GitLab CE Omnibus package on CentOS 6 (and RedHat/Oracle/Scientif ...
- PHP安装后php-config命令干嘛的
php-config 是一个简单的命令行脚本用于查看所安装的 PHP 配置的信息. 我们在命令行执行 php-config 会输出所有的配置信息 Usage: /usr/local/php/bin/p ...
- jmx additional port
http://stackoverflow.com/questions/20884353/why-java-opens-3-ports-when-jmx-is-configured http://blo ...
- MySQL出现Errcode:28错误提示解决办法
mysql出现Error writing file \'xxx\'( Errcode:28)的原因有很多种,下面我来总结一些常用的关于引起Errcode:28错误原因与解决方法. 问题一,是log ...
- Servlet学习三:不允许直接访问jsp处理方式一过滤器
转自:http://zy19982004.iteye.com/blog/1755189
- RING0,RING1,RING2,RING3
Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3.Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用.如果普 ...
- HDOJ3743<分治>
题意:求一个排列的逆序数. #include<cstdio> #include<iostream> #include<algorithm> const int ma ...