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,一经查实,立即删除!

相关文章

STL泛型算法总结

泛型算法只是依赖于迭代器的操作&#xff0c;而不是依赖于容器 泛型算法可以分为3大类&#xff1a; 下面的vec和vec2代表相同类型的容器 1.只读算法&#xff1a;只允许读取其输入范围内的元素&#xff0c;而不改变元素 find(vec.cbegin(),vec.cend(),k) 查找算法&#xff1a;前…

java x锁_基于Java名称的锁?

MySQL具有方便的功能&#xff1a;SELECT GET_LOCK("SomeName")这可用于为应用程序创建简单但非常具体的基于名称的锁。但是&#xff0c;它需要数据库连接。我有很多情况&#xff0c;例如&#xff1a;someMethod() {// do stuff to user A for their data for feature…

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;于是就苦了不少不去图书馆的…

如何查看现有项目的struts和hibernate和spring版本

1. struts的版本信息 查看 struts.jar\META-INF\MANIFEST.MF再查看 Implementation-Version看后面的数字.. Manifest-Version: 1.0Specification-Title: Struts FrameworkClass-Path: commons-beanutils.jar commons-collections.jar commons-dig ester.jar commons-fileuploa…

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和web_2020年全国计算机二级WEB程序复习知识点:JavaBean

【摘要】即将参加全国计算机等级考试的考生们&#xff0c;考试即将到来&#xff0c;大家的备考工作进行得如何了&#xff1f;考必过为大家精心整理了2020年全国计算机二级WEB程序复习知识点&#xff1a;JavaBean&#xff0c;希望能够助力全国计算机等级考试&#xff0c;相信坚持…

java表达式语句_Java基础知识笔记第三章:运算符表达式语句

算术运算符与表达式操作符描述例子加法 - 相加运算符两侧的值A B 等于 30-减法 - 左操作数减去右操作数A – B 等于 -10*乘法 - 相乘操作符两侧的值A * B等于200/除法 - 左操作数除以右操作数B / A等于2&#xff05;取余 - 左操作数除以右操作数的余数B%A等于0自增: 操作数的值…

JavaScript_Util_01

//记住细节往往能让自己更有效率。定义变量&#xff0c;打冒号//XML文档空格bug补救方案function cleanWhiteSpace(element){elementelement||document;var cur element.firstChild;while(cur ! null){ //如果是文本节点&#xff0c;并且只包含空格if(cur.nodeType 3 &&a…

java简单创建图片面板_图像界面编程简单窗体创建

/** 图像界面编程* JFrame 窗体* JPanel 面板* JLabel 标签* JButton 按钮* JLabel 标签* ImageIcon 图标*** */package fish;import java.util.*;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax…

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

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

【原创】请不要对Boost Format使用Byte作为参数

曾几何时我们可以肆无忌惮的对sprintf传入BYTE等类型作为参数&#xff0c;只要你指定的为%D即可打印出对应的数字但是boost format不可以&#xff0c;当你发生类型截断&#xff0c;错误&#xff0c;异常&#xff0c;请尽快查看你传入的类型是否为Byte因为format会将GoByte当做c…

java中catch ()_有关java中的try{}catch(){}的讲解

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。本文链接&#xff1a;https://blog.csdn.net/qq_38225558/article/details/82054100try {可能出现异常的代码(包括不会出现异常的代码)} catch (Ex…

PAT (Advanced Level) Practise:1001. A+B Format

【题目链接】 Calculate a b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits). Input Each input file contains one test case. Each case contains a pair of i…

stderr java_如何使用Log4j将stdout和stderr写入/捕获到文件并使用Windows和Tomcat 5.5(Java)?...

我正在使用Windows 2008 R2和Apache Tomcat 5.5,以获取您的信息.STDOUT和STDERR可以通过Apache Tomcat属性自动记录,通过Logging选项卡 – >重定向Stdout和重定向Stderror文本框.但我想通过log4j来控制它.我正在尝试利用ConsoleAppender和TimeAndSizeRollingAppender class来…

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

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

java 命令行读取_Java:从控制台(console,命令行)读取字符 | 学步园

/*** 从控制台(console,命令行)读取字符&#xff1a;InputStreamReader(System.in)*/import java.io.IOException;import java.io.InputStreamReader;public class Test{public static void main(String[] args) throws IOException{StringBuffer sql null;sql sqlReaderFrom…

vector初始化

对vector对象来说&#xff0c;直接初始化的方式适用于3种情况&#xff1a;1.初始值已知且数量少&#xff1b;2.初始值是另一个vector对象的副本&#xff1b;3.所有元素的初始值都一样。此外还有一种更常见的情况是4.创建一个vector对象时并不清楚实际所需元素的个数&#xff0c…

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

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

javascript Date类型 学习笔记

1 创建一个新的日期对象&#xff0c;如果不带参数&#xff0c;则对象自动获得当前的日期和时间 var d new Date() 2 如果需要指定特定的日期&#xff0c;则可以通过Date.parse() 或者 Date().UTC(),返回时间戳作为 new Date()的参数 Date.parse() 用法&#xff1a; var time…