• 题目描述

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脚本的单机黄金点游戏的更多相关文章

  1. Python Web实战 - 基于Flask实现的黄金点游戏

    一.简介 团队成员: 领航者:张旭 驾驶员:张国庆 项目简介: 项目名称:基于B/S模式的黄金点游戏 采用技术: 后端:Python + Sqlite3 前端:HTML + CSS + JS + Bo ...

  2. 6.游戏特别离不开脚本(3)-JS脚本操作java(3)(直接操作JS文件或者调用函数)

    java直接运行JS脚本文件的语句,游戏开发时,策划的配置文件什么的就可以分开管理了,游戏逻辑也是一样,比如:一个功能一个脚本或者一个系统一个脚本. import java.io.FileNotFou ...

  3. 黄金点游戏(js+css)

    一.项目描述:黄金点游戏 黄金点游戏是一个数字小游戏,其游戏规则是: N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0 ...

  4. 基于JS的高级脚本语言 Sara

    Sara-基于JS的高级脚本语言 欢迎使用Sara,Sara是一款基于JavaScript的全新的高级脚本语言! Sara不像我们工作室上一款编程语言作品-Ginit一样,他属于更高级的语言 Sara ...

  5. Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理)

    也许这一篇文章的内容有点枯燥,但我要说的是如果你想深入的了解游戏引擎是如何处理动画片断或者素材并 让玩家操控的角色动起来栩栩如生,那么这真是一篇好文章(当然我仅仅是翻译了一下)   动画脚本 Anim ...

  6. 高端黑链SEO—恶意JS脚本注入访问伪随机域名

    摘要:我们的服务器又出入侵事故了.有客户的 html 网页底部被插入了一段 js 脚本,导致访客打开网页时被杀毒软件警告网站上有恶意代码.在黑链 SEO 中这是常见的手法,但奇特的地方就在于我们这次捕 ...

  7. 使用Js脚本 修改控制IE的注册表相关设置(activex等)

    使用Js脚本 修改控制IE的注册表相关设置(activex等) 分类: PHP2012-12-05 18:51 2035人阅读 评论(2) 收藏 举报 脚本写法: <SCRIPT LANGUAG ...

  8. (转)优化js脚本设计,防止浏览器假死

    在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了,必须进行优化. 为什么会出现这种情况呢,我们先来看一下浏览器的内 ...

  9. 黄金点游戏之客户端(homework-05)

    0. 摘要 之前我们玩了2次黄金数游戏,我也幸运的得到了一本<代码大全>,嘿嘿.这次的作业是一个Client/Server程序,自动化完成多轮重复游戏. 我完成了Client部分,使用C# ...

随机推荐

  1. git(创建,提交,回退)

    创建版本库 2334次阅读 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以 ...

  2. hdu_1403_Longest Common Substring(后缀数组的应用)

    题目链接:hdu_1403_Longest Common Substring 题意: 给你两个字符串,然你找最长的公共子串 题解: 后缀数组的经典应用,要找两个字符串的公共子串,那么就相当于找两个串的 ...

  3. hdu_5707_Combine String("巴卡斯杯" 中国大学生程序设计竞赛 - 女生专场)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5707 题意:给你三个字符串 a,b,c,问你 c能否拆成a,b,a,b串的每一个字符在c中不能变 题解 ...

  4. centos 命令行 连接无线网卡

    ifconfig wlan0 up 1 ifconfig wlan0 iwlist wlan0 scan wpa_passphrase naizhongnai naizhong >> /e ...

  5. MySQL源码安装(centos)

    1.去MySQL官网下载源码包 地址:http://dev.mysql.com/downloads/mysql/ 下载完后需要检查文件的MD5,以确认是否从官网下载的原版本(以防被人篡改过该软件) 使 ...

  6. tableView滚动的时候会 最后一行显示不完全的问题

    问题可能原因 1:tableView高度的设置不正确,应该是屏幕的高度减去上面的高度(包括状态栏以及navigationBar的高度).正确设置了tableView的高度之后,才可以正常滚动到最后一行 ...

  7. launchMode传递参数注意startActivityForResult

    Activity1 到Activity2 用startActivityForResult 如果Activity2的launchMode为 singleInstance 和 singleTask 都会启 ...

  8. junit 单元测试 - 参数化测试

    junit4.x版本需要引入如下jar包: hamcrest-core-1.3.jar junit-4.12-beta-3.jar 新建一个计算器类,如下: package com.pt; publi ...

  9. dos cmd重启2003命令shutdown -r -t 0

    用cmd命令来关闭或重启电脑. at 2:00 /every:Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday shutdown /r ...

  10. java设计模式案例详解:工厂模式

    1.简单工厂模式 在不考虑扩展的情况下还是很好用的,其实我们写代码也很经常用到,其主要理解在于传入不同参数则构建不同对象,只有一个工厂,如需添加产品涉及到扩展需要修改比较多的东西,不符合开闭原则,如下 ...