前言:

软工的一个小作业:实现“黄金分割小游戏”, 需要结对编程,队友:陈乐云    共用时两天。

早期思路设计:

采用键值对的形式,以Map作为存储结构。优点:能够将数据与用户对应,缺点:采用java实现过于复杂,工程量过大,需要消耗大量资源,类型转换容易出错。

后期思路设计:

采用二维数组:第一行用于存储用户输入原始数据,第二行用于存储中间数据(第一行的与G值做差的绝对值),第三行用于保存用户得分。

优点:实现简单,易于运算

分工:

前期:陈乐云负界面设计 和 代码的检查        中期: 陈乐云负责代码的检查,bug检查       后期:陈乐云负责App测试

我负责算法的实现,界面优化                      我负责编码和bug订正                              我负界面的优化,代码调试

App界面设计过程:

第一版代码:

第一版代码只是简单的实现后台的部分逻辑,主要用于测试逻辑的准确性,并没有做具体的测试。

package cn.sau.Test;

import java.util.Arrays;
import java.util.Collection; public class testGolden {
static int number = 10;
public static void main(String[] args) {
double[][] array = new double[10][3];
for(int i = 0 ;i<number;i++)
{
for(int j = 0 ;j<2;j++)
if(j==0)
array[i][j]=i+10;
else
{
array[i][2]=0;
array[i][j] = 0; }
}
//平均值
double average = 0;
for(int i = 0; i<number;i++){
average = average +array[i][0];
}
int x = number;
average = average /x; //G值
double G =average *0.618; //相近度
for(int i = 0; i<number;i++){
array[i][1] = Math.abs(array[i][0] -average);
} //min:最近; max:最远
double min = array[0][1];
double max = array[0][1];
for(int i = 1; i<number; i++){
if(min >array[i][1]){
min =array[i][1];
}
if(max<array[i][1]){
max =array[i][1];
}
}
System.out.println("max:"+max +"\n min:" +min);
//统计得分
for(int i = 0; i<number;i++){
if(array[i][1]==min){
array[i][2] =number;
}
else if(array[i][1] == max){
array[i][2]=-2;
}
} for(int i = 0 ;i<10;i++)
{ System.out.print(array[i][2] +"\n"); }
} }

第二版代码:

第二版代码主要是在第一个版的基础上,实现对android平台的移植,比进行了大量的测试。

package com.example.m.goldengame10;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView; /*
黄金分割小游戏1.0版本
实现以下功能:
单机操作
固定用户为10
2016/10/16
作者:Finch & xiaoPang
*/ public class MainActivity extends AppCompatActivity { int number =10; //总人数
int count = 1; //局数判断
double[][] array = new double[10][3]; TextView news ;
EditText user1 ;
EditText user2;
EditText user3 ;
EditText user4;
EditText user5;
EditText user6 ;
EditText user7 ;
EditText user8 ;
EditText user9 ;
EditText user10;
Button submit ;
Button clean; protected void onCreate(Bundle savedInstanceState) {
Log.v("Button","on");
for(int i = 0; i<number;i++){
array[i][0]=0;
array[i][1]=0;
array[i][2]=0;
} super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
news =(TextView)findViewById(R.id.news);
user1 = (EditText)findViewById(R.id.user1);
user2 = (EditText)findViewById(R.id.user2);
user3 = (EditText)findViewById(R.id.user3);
user4 = (EditText)findViewById(R.id.user4);
user5 = (EditText)findViewById(R.id.user5);
user6 = (EditText)findViewById(R.id.user6);
user7 = (EditText)findViewById(R.id.user7);
user8 = (EditText)findViewById(R.id.user8);
user9 = (EditText)findViewById(R.id.user9);
user10 = (EditText)findViewById(R.id.user10);
submit =(Button)findViewById(R.id.submit);
clean =(Button)findViewById(R.id.clean);
submit.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){ news.setText("第"+count+"局得分");
array[0][0] =Double.parseDouble( user1.getText().toString());
array[1][0] =Double.parseDouble( user2.getText().toString());
array[2][0] =Double.parseDouble( user3.getText().toString());
array[3][0] =Double.parseDouble( user4.getText().toString());
array[4][0] =Double.parseDouble( user5.getText().toString());
array[5][0] =Double.parseDouble( user6.getText().toString());
array[6][0] =Double.parseDouble( user7.getText().toString());
array[7][0] =Double.parseDouble( user8.getText().toString());
array[8][0] =Double.parseDouble( user9.getText().toString());
array[9][0] =Double.parseDouble( user10.getText().toString()); //平均值
double average = 0;
for(int i = 0; i<number;i++){
average = average +array[i][0];
}
int x = number;
average = average /x; //G值
double G =average *0.698; //相近度
for(int i = 0; i<number;i++){
array[i][1] = Math.abs(array[i][0] -G);
} //min:最近; max:最远
double min = array[0][1];
double max = array[0][1];
for(int i = 1; i<number; i++){
if(min >array[i][1]){
min =array[i][1];
}
if(max<array[i][1]){
max =array[i][1];
}
} //统计得分
for(int i = 0; i<number;i++){
if(array[i][1]==min){
array[i][2] =array[i][2] + number;
}
else if(array[i][1] == max){
array[i][2]=array[i][2]-2;
}
} user1.setText(String.valueOf(array[0][2]));
user2.setText(String.valueOf(array[1][2]));
user3.setText(String.valueOf(array[2][2]));
user4.setText(String.valueOf(array[3][2]));
user5.setText(String.valueOf(array[4][2]));
user6.setText(String.valueOf(array[5][2]));
user7.setText(String.valueOf(array[6][2]));
user8.setText(String.valueOf(array[7][2]));
user9.setText(String.valueOf(array[8][2]));
user10.setText(String.valueOf(array[9][2]));
count++; //每提交一次,局数加一
}
}); clean.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){ //初始化
for(int i= 0;i<number;i++){
array[i][0]=0;
array[i][1]=0;
news.setText("开始第"+count+"局,请输入数值");
news.setTextSize(30);
}
//自动清空数据
user1.getText().clear();
user2.getText().clear();
user2.getText().clear();
user3.getText().clear();
user4.getText().clear();
user5.getText().clear();
user6.getText().clear();
user7.getText().clear();
user8.getText().clear();
user9.getText().clear();
user10.getText().clear();
}
});
}
}

App界面设计:

App测试:

                                  

代码测试图集:

  

App测试其他图集:

总结:针对本次作业,我们还有很多需要完善的地方:1,未能实现联机模式,导致用户体验不好

2,界面设计过于简陋,体验稍差

3,算法实现未能考虑人数不确定性

当然,我们会在后期系统的学习java和android后,会及时的做出更正。

附:

android studio 项目 代码:https://git.coding.net/fench/GodlenGame-on-android.git

App下载地址A(欢迎试玩):GoldernGameAPK

队友陈乐云的博客链接:http://www.cnblogs.com/clyln/  coding账号:https://coding.net/u/Clyln),                                                                                                                                                                 finch

2016-10-17

用android去写一个小程序的更多相关文章

  1. 写一个小程序实现win系统定时锁屏

    貌似很久没写程序了,随便用C语言实现吧 #include<stdio.h> #include<stdlib.h> int main(){ system("rundll ...

  2. 下载eclipse 配置eclipse 新建Java项目 写一个小程序 运行

    为了更好的学习java,我打算下载个eclipse 地址:https://www.eclipse.org/downloads/packages/ 我们需要下载的版本是Eclipse IDE for J ...

  3. 【Java】一个小程序,计算它包含的代码所需的耗时

    写一个小程序,用来计算它包含的代码所需的耗时.虽然简单,测试代码是否耗时还是有点用的,不用重新写嘛~ import java.util.Date; import java.util.concurren ...

  4. 自学Android的第一个小程序(小布局、button点击事件、toast弹出)

    因为上班,学习时间有限,昨晚才根据教程写了一个小程序,今天忙里偷闲写一下如何实现的,来加深一下印象. 首先创建一个Android项目, 通过activity_xxx.xml布局文件来添加组件来达到自己 ...

  5. 像VUE一样写微信小程序-深入研究wepy框架

    像VUE一样写微信小程序-深入研究wepy框架 微信小程序自发布到如今已经有半年多的时间了,凭借微信平台的强大影响力,越来越多企业加入小程序开发. 小程序于M页比相比,有以下优势: 1.小程序拥有更多 ...

  6. 微信小程序开发(一)创建一个小程序Hello World!

    开发微信小程序并不是很难,网上有很多小程序开发资料,尤其是微信官方的<小程序开发指南>最详细. 下面是我开发小程序的历程: 第一步,请前往https://mp.weixin.qq.com/ ...

  7. 写个小程序01 | 注册微信小程序

    出于兴趣和学习目的,我想自己做一个基于"子弹笔记(Bullet Journal)"的小程序.由于个人开发经验很有限,只在课程作业中写过 web 前端,所以也不知道多久能写出来(逃) ...

  8. 写一个ajax程序就是如此简单

    写一个ajax程序就是如此简单 ajax介绍: 1:AJAX全称为Asynchronous JavaScript and XML(异步JavaScript和XML),指一种创建交互式网页应用的网页开发 ...

  9. 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装

    在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...

随机推荐

  1. 将android模拟器上的db文件拷贝到电脑上

    1. db文件在android手机中的存储地址一般都是/data/data/packname/databases/db_file. 2.打开cmd,运行 adb shell ,使用root权限 3.通 ...

  2. IIS8的证书设置

    首先,打开IIS的网站,找到“服务器证书” 然后根据需要创建证书 创建好后,如果某一个网站(注意是网站,不是应用程序集)需要使用https则, 在右侧“绑定”一项中添加新的https连接,并选择对应的 ...

  3. Compare Version Numbers

    Compare two version numbers version1 and version1. If version1 > version2 return 1, if version1 & ...

  4. MFC的本质

    一.引言 上一专题中,纯手动地完成了一个Windows应用程序,然而,在实际开发中,我们大多数都是使用已有的类库来开发Windows应用程序.MFC(Microsoft Foundation Clas ...

  5. ZK 最少限度加载页面js文件

    官方文档说明: ZK Developer's Reference文档,章节为Minimize Number of JavaScript Files to Load,按照文档步骤执行,最后需在 web. ...

  6. Linux下配置一个VNC服务器

    在Linux下配置一个VNC服务器,并设置2个用户,要求其中一个用户登录时不需要输入密码. 然后在客户端使用ssh+vncview的方式访问. 1确认vnc安装 2配置vncserver 3测试vnc ...

  7. HDU 5833 Zhu and 772002(高斯消元)

    题意:给n个数,从n个数中抽取x(x>=1)个数,这x个数相乘为完全平方数,求一共有多少种取法,结果模1000000007. 思路:每个数可以拆成素数相乘的形式,例如: x1 2=2^1 * 3 ...

  8. 反射-----学习Spring必学的Java基础知识之一

    Java允许通过程序化的方式间接对Class进行操作,Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数.属性 ...

  9. 为Office365增加密码过期自动提醒功能

    最近有人和我反应,无法查看所有员工的Office365的密码过期时间.最好可以批量查看,如果能在过期前几天发个提醒邮件就更好了. $pw = ConvertTo-SecureString 'your_ ...

  10. vb6保存项目到c盘的安装目录

    工程保存在安装目录("C:\Program Files (x86)\Microsoft Visual Studio\VB98\errhandler1.vbp")里. 文件管理器找不 ...