java黄金分割点游戏_结对编程1——黄金点小游戏项目简介及需求分析

一、项目成员

2018141461085

龚泽楠

2018141461012

蔡铧荣

二、项目名称

黄金点小游戏

三、项目简介

游戏规则: N个同学( N通常大于 10 ),每人写一个 0~100 之间的有理数 (不包括 0或100) ,交给裁判算出所有数字的平均值然后乘以 0.618 (所谓黄金分割常数),得到 G值。提交的数字最靠近 G(取绝对值)的同 学得到 N分,离 G最远的同学得到- 2分,其他同学得 0分。

黄金点游戏其实是一个博弈论G值(博弈值,在黄金点游戏中为黄金点;在市场竞标中为标线;在拍卖中为成交额)的数据收集实验,因此该项目为社会公益项目,普遍情况黄金点游戏项目都会将最后数据或实时数据上传至网络公开使用。

这个游戏规定第一名得到全部的分数, 第二名(不管多接近)到倒数第二名都是 0 分,最后一名还要倒扣分。

四、项目需求

(1)项目结构需求

(2)算法需求

计算G值和每位玩家得分

每位玩家得分分轮次存储

查询每轮得分情况

(3)数据库需求

输入数据合法性检查

输入数据分轮次存储

(4)UI及可视化功能需求

游玩人数输入

显示每轮得分情况

五、项目的主要功能

a.基础功能:

1.用户注册登陆

2.输入数据进行游戏

b.拓展功能:

1.良好UI及可视化

2.查看当局游戏数据

3.查看排行榜

六、 开发工具

开发工具:IDEA,ECLIPSE

七、 概要设计

26b08f6e5b2a187633492e3d6ca01a62.png

模块名称新房间创建

输入

设置游戏玩家个数、游戏回合时长、总回合数、限制玩家总数

输出

开始基于新的游戏设置回合

功能

开始新的游戏

模块名称功能

输入

黄金点游戏用户想要输的点数

输出

黄金点游戏G值

功能

进行黄金点游戏

模块名称得分纪录

输出

每回合每个玩家的得分

功能

记录玩家得分情况

八、 代码实现(JAVA)

主体功能实现(计算黄金值、比较排名,计算分数)

public static int Count(int n,int round) throws IOException {//负责统计数据和数据的写入

int state = 0; //表明数据状态

Scanner input = newScanner(System.in);

System.out.println("请输入每位同学的点数: ");

String str=input.nextLine();

String [] list= str.split(" ");

Double [] list2= new Double[list.length]; //用于计算距离

Double [] list3 = new Double[list.length]; //用于排名

for(int i = 0;i < list.length;i++)

{//检测数据是否异常,并复制到另一个double数组

list2[i] =Double.parseDouble(list[i]);if(list2[i] <= 0 || list2[i] >= 100)

{

state= 1;return state; //返回异常

}

}//计算黄金点

double sum = 0; //加总

double Msum = 0; //乘上黄金分割比的Msum

for(int i = 0;i < list2.length;i++)

{

sum+=list2[i];

}

Msum= (sum / n) * 0.618;//每位选手离黄金点的距离

Double [] Distance = newDouble[n];for(int i = 0;i < list2.length;i++)

{

Distance[i]= abs(list2[i] -Msum);

list3[i]=Distance[i];

}//排名

Arrays.sort(list3); //距离的升序排序

int [] ExRank = new int[list.length];int number = 1; //用于排名,同时也代表着最低排名

ExRank[0] = 1; //最高位默认为排名1,

for(int i = 1;i < list3.length;i++)

{

NumberFormat nf=NumberFormat.getInstance();

nf.setGroupingUsed(false);

String DATA1=nf.format(list3[i]);

String DATA2= nf.format(list3[i-1]);if(DATA1.equals(DATA2))

{

ExRank[i]=number;

}else{

ExRank[i]= ++number;

}

}//索引回原先数字

int [] Rank = new int[list.length];for(int i = 0;i < list3.length;i++)

{for(int j = 0;j < list3.length;j++)

{if(Distance[i] ==list3[j])

{

Rank[i]=ExRank[j];//System.out.print(Rank[i] + " ")//test

break;

}

}

}//得分结算

for(int i = 0;i < list.length;i++)

{if(Rank[i] == 1)

{

score[i]+=n;

}else if(Rank[i] ==number)

{

score[i]-= 2;

}else{

score[i]= 0;

}

}//列出此局情况

String [] data = new String[n + 2];

data[0] = "此为第" + round + "局";

data[1] = "此局的黄金点为 : " +Msum;

System.out.println(data[0]);

System.out.println(data[1]);for(int i = 0;i < list.length;i++)

{//此局战况

data[i+2] = "第" + (i+1) +"位选手所选择的数 " + list[i] + "; 其于黄金点的距离为 : " + Distance[i] + "; 排名为 : " + Rank[i] + "; 所得分 : " +score[i];

System.out.println(data[i+2]);

}//数据保存在文件中

inputdata(data);returnstate;

}

文件数据管理:

public static void Readdata() throws IOException {//将文件中的数据读取

BufferedReader in = new BufferedReader(newFileReader(path));

String str=null;//定义一个字符串类型变量str

int i = 0;//定义一个整型变量

while ((str = in.readLine())!= null) {//readLine()方法, 用于读取一行,只要读取内容不为空就一直执行

i++;byte[] bytes=str.getBytes();

System.out.println(str);

}

in.close();

}public static void inputdata(String [] input) throwsIOException {

FileWriter fw= new FileWriter(path,true);//将这个普通的FileWriter对象传递给BufferedWriter构造方法即可

BufferedWriter bw = newBufferedWriter(fw);//后面bw的时候和fw没有区别

for(int i = 0;i < input.length;i++)

{

bw.write(input[i]);

bw.newLine();

}//关闭流

bw.close();

}public static void Delete() throwsIOException {

FileWriter fileWriter=newFileWriter(path);

fileWriter.write("");

fileWriter.flush();

fileWriter.close();

}public static void WriteDate() throwsIOException{

FileWriter fw= new FileWriter(path,true);//将这个普通的FileWriter对象传递给BufferedWriter构造方法即可

BufferedWriter bw = newBufferedWriter(fw);

SimpleDateFormat df= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式

String DATE = df.format(new Date());//new Date()为获取当前系统时间,也可使用当前时间戳

bw.write(DATE);

bw.newLine();

bw.close();

}public static double abs(doublea)

{//绝对值函数

return (a < 0) ? -a : a;

}

}

新建游戏以及游戏菜单:

public classGoldCount

{static String path = "D:\\Project\\code\\java\\GoldCount\\src\\data.txt"; //导出的数据

static int [] score = new int[100]; //得分,人数尽量不大于100

public static void main(String[] args) throwsIOException {

WriteDate();

Scanner input= newScanner(System.in);

System.out.print("请输入需要进行的游戏轮数(尽量大于10):");int round =input.nextInt();

System.out.print("请输入参与该游戏的人数:");int n =input.nextInt();for(int sur = 0;sur < round;sur++) {int Qstate = 1;int Dstate = 1;while(1 == 1)

{//不用switch语法是因为不好控制选项

menu();int choice =input.nextInt();if(Dstate == 0)

{

WriteDate();

Dstate= 1;

}if (choice == 1)

{while(1 == 1)

{//用于处理数据异常

int Mstate = Count(n,sur+1);if (Mstate == 1)

{

System.out.println("输入的数据有误,请重新输入!");

}else{break;

}

}break;

}else if (choice == 2) {//System.out.println("现在是第" + sur + "轮");

Readdata(); //返回至循环开始

} else if (choice == 3) {

Delete();

Dstate= 0;

}else if (choice == 4) {

Qstate= 0;break;

}else{

System.out.println("输入有误,请重新输入!"); //返回至循环开始

}

}if(Qstate == 0)

{break;

}

}

}

九、 运行结果

9596078b9fa54276c6a4608a0e7ca8eb.png

十、 后期计划

进行产品迭代,增加额外功能,以及设计UI和可视化界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDU 2242 考研路茫茫——空调教室

考研路茫茫——空调教室 Time Limit: 2000msMemory Limit: 32768KBThis problem will be judged on HDU. Original ID: 224264-bit integer IO format: %I64d Java class name: Main众所周知&#xff0c;HDU的考研教室是没有空调的&#xff0c;于是就苦了不少不去图书馆的…

java 正则表达式 组合_java基础:5.1 面向对象、类的关联 聚合 组合、正则表达式...

上一个礼拜太忙了&#xff0c;今天开始恢复java的学习~目录1、面向过程——面向对象的区别传统的面向过程式编程是动作驱动的&#xff0c;数据和动作是分离的。面向对象编程的范式重点在于对象&#xff0c;动作和数据一起定义在对象中。面向过程的范式重点在于设计方法。面向对…

html5学习之路_003

html布局 使用<div>元素布局使用<table>元素布局<div>元素布局 <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>div布局</title><link rel"stylesheet" type&qu…

变量不合法的表达式JAVA_Java8中lambda表达式的语法,别人都会的,你还不会吗?「一」...

函数式编程函数式编程是一种编程方式&#xff0c;它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus)&#xff0c;λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。 函数式编程是"结构化编程"的一种&#xff0c;主要思想是把运…

动手制作属于你自己的WIN PE3.0

最近想要更新公司的网Ghost系统&#xff0c;所以小研究一下win pe &#xff0c;在网上看见一个很不错的教程&#xff0c;在这里分享给大家&#xff01;并非原创&#xff0c;纯属转载&#xff01;&#xff01;O(∩_∩)O~天缘的作品&#xff0c;很是佩服这个哥们啊.....一、WINPE…

python图像处理模糊_Python+OpenCV图像处理之模糊操作

模糊操作是图像处理中最简单和常用的操作之一&#xff0c;该使用的操作之一原因就为了给图像预处理时减低噪声&#xff0c;基于数学的卷积操作均值模糊&#xff0c;函数 cv2.blur(image,(5,5))&#xff0c;这是一个平滑图片的函数&#xff0c;它将一个区域内所有点的灰度值的平…

高斯消元学习

1. 证明XOR满足交换律&#xff0c;结合律&#xff0c;是自身的逆运算。比如说&#xff0c;1^0 1 1^1 0 0^1 1 0^0 01^1^0 0 1^0^1 0.a^b^ab 即一个数异或两次相当于无效 2. 从N个数中选出两个数&#xff0c;使XOR和最大。解法&#xff1a;我们知道两个数字之间的异或…

java经纬度格式_java经纬度格式转换

在数学中&#xff0c;表示角度的度、分、秒分别使用、′、″符号进行表示。160′&#xff0c;1′60″ &#xff0c;13600″。由上述可知度分秒转换度的计算公式为&#xff1a;(ddmm′ss″) ddmm/60ss/3600如&#xff1a;11330′10.25″ 11330/6010.25/3600 ≈113.502847度分秒…

e3是合法浮点数吗_下面4个选项中,均是合法浮点数的选项是?

选B。b中的123是整数&#xff0c;不是浮点数&#xff0c;2e4.2的指数是4.2不满足浮点数的规则必须是整数&#xff0c;e5中的e不满足浮点数的规则&#xff0c;所以b中3个数均不是浮点数。a中的160、0.12是正确的&#xff0c;c中的123e4、0.0是正确的&#xff0c;d中的234、1e3是…

winform 菜单激发窗体切换做法

经常会用到类似于下图这样的winform窗体&#xff0c;其中点击各个菜单时于鏊做到内容窗体的切换&#xff0c;今天也记录一直切换的方法 在主窗体放置一个panal&#xff0c;所有的内容窗体均在改panal上呈现&#xff0c;实现以下方法 ///实例化主窗体 private void FrmSetup_Loa…

java 正则表达式 反向_正则表达式中的数量表示符、反向引用、零宽断言、以及java中的用法...

在表示数量时&#xff0c;如果一个正则表达式X&#xff0c;后面没有加表示数量的符号&#xff0c;那就默认出现一次。如果指定需要出现n次&#xff0c;那就用{n}&#xff0c;例如a{n},就是匹配a出现n次的。a{n,}表示a出现至少n次的&#xff0c;而这个时候就会默认是贪婪模式&am…

django配置在MySQL_怎么在Django中安装与配置mysql

怎么在Django中安装与配置mysql发布时间&#xff1a;2021-02-26 17:42:11来源&#xff1a;亿速云阅读&#xff1a;57作者&#xff1a;Leah本篇文章为大家展示了怎么在Django中安装与配置mysql&#xff0c;内容简明扼要并且容易理解&#xff0c;绝对能使你眼前一亮&#xff0c;通…

Java字符串找出4个字节长度的字符

不解释&#xff0c;直接上代码&#xff1a; 由于Iteye代码贴四个字节的&#xff35;&#xff34;&#xff26;&#xff0d;&#xff18;字符出错&#xff0c;特能图的方式发布几个特殊字符&#xff1a; Java代码 public class Byte4Check { public static void main…

div 左右并排,使用CSS如何让两个div并排显示

用CSS如何让两个DIV盒子并排体现呢&#xff1f;各人知道默认情况下DIV是独占一排的&#xff0c;DIV不设置任何CSS格局&#xff0c;这个DIV盒子都邑独有一行踊跃换行。运用CSS让两个DIV并排闪现&#xff0c;排成一排显示思空见贯方式有两种&#xff1a;1、运用display:inline2、…

JStorm-介绍

1.概述 JStorm 是一个类似于 Hadoop 的MapReduce的计算系统&#xff0c;它是由Alibaba开源的实时计算模型&#xff0c;它使用Java重写了原生的Storm模型&#xff08;Clojure和Java混合编写的&#xff09;&#xff0c;并且再原来的基础上做了许多改进。用户只需按照指定的接口实…

又一个绝对棒的对话框插件fancybox v1.3.4

http://www.jsfoot.com/jquery/demo/2011-07-30/fancybox/index.html jquery插件&#xff1a;fancybox Fancybox的特点如下&#xff1a; 可以支持图片、html文本、flash动画、iframe以及ajax的支持可以自定义播放器的CSS样式可以以组的形式进行播放如果将鼠标滚动插件&#xff…

php this validate,php扩展ZF——Validate扩展

php扩展ZF——Validate扩展更新时间&#xff1a;2008年01月10日 20:27:49 作者&#xff1a;php扩展ZF——Validate扩展之前写了一片文章关于如何在ZF0.6版本下扩展ZF的。这篇应该说是类似的文章&#xff0c;但环境换成ZF1.0RC1版本了。在开始ZF扩展之前&#xff0c;推荐先看看…

浅谈数据结构-选择排序(简单、堆排序)

选择排序&#xff1a;每趟从待排序的记录中选出关键字最小的记录&#xff0c;顺序放在已排序的记录序列末尾&#xff0c;直到全部排序结束为止。 选择排序正如定义所讲&#xff0c;在数组查询出最小值&#xff0c;然后放在此次循环开始位置&#xff08;前一次循环已经获取比它更…

安装php7的mysql扩展,php7安装mysql扩展的方法是什么

php7安装mysql扩展的方法&#xff1a;1、下载mysql扩展并解压&#xff1b;2、使用phpize工具初始化并进行configure&#xff1b;3、执行【make && make install】命令&#xff1b;4、编辑php.ini文件&#xff1b;5、重启服务。本文环境&#xff1a;windows10系统、php7…

iPhone屏幕尺寸、分辨率及适配

目录(?)[-] iPhone尺寸规格单位inch英吋iPhone手机宽高屏幕尺寸像素密度PPI缩放因子scale factor between logic point and device pixel1Scale起源 2UIScreenscale 3UIScreennativeScale 4机型判别Resolutions Rendering2x3x以及高倍图适配12x 23x 3高倍图文件…