在昨天上传完博客之后发现一个重大的bug...故在此推出2.0版本。

博文详情见:http://www.cnblogs.com/RayShea/p/5372398.html

coding地址:https://coding.net/u/rayshea/p/android-based-golden-point/git/tree/master/Goldenpoint2rd

APK地址:http://pan.baidu.com/s/1eSsGLwQ

较先前版本的改进:

  1. 交互更加合理
  2. 存储方式更科学
  3. 代码可读性更强
  4. 修复了之前读取历史战绩时会出现读取重复的现象
  5. 增加了显示某部分数据的所属轮数

感想:deadline果然是第一生产力...在下午跟助教协商后,助教很爽快的答应给时间进行迭代,在这里表示感谢!然后回头看之前的代码,发现因为在编码的过程中临时更改数据存储方式,导致整个代码出现了各种各样的变量,各种冗余的函数...看到这里,果断弃掉,大概下午六点钟开始重新编码,重新规划了整个项目的模块,把数据的存储方式也彻底改成了以sharedpreference为主体,将各个Activity中的变量也全部重新命名,activity之间的通信也都用Intent....总之就是代码重用率不到5%...大概到九点钟,编码结束,大概400行代码,较之前版本少了100行左右,测试了一个小时,找到3个bug,并修复之。

总结:因为自己一边对android各种工具并不熟悉,导致在刚动手时就像小马过河,不知河水深浅,毕竟只到长者裤腰的河水也会淹死郭小四...蛤蛤蛤。就这样新旧技术的叠加就会使得代码无比混乱,之前设计好的框架等根本无法适用,这也导致了今天的整个代码的重写...自己还是太naive,以后还是要多学习一个的,只有技术面广阔,才能在拿到问题的第一时间内找到合适的解决策略,就先总结到这了。下面放出软件运行的截图。

首先是改动最大的地方,比赛历史记录,第一张图是第一次输入的数据的截图,本来应该是要比赛完跳转到的那个界面的图,好像误删了(吐槽一下安卓没有最近删除的照片),所以放的是没有第二次比赛时历史记录所查到的信息。图二是第二次测试的数据(比赛完显示结果的界面),图三是完成第二次测试之后的历史记录,图三是可以滚动的页面,为了不挡住信息,按钮的透明度也有调整。小生不才,必定还有很多不足之处,还请多多指教。

接下来就是改动较小的部分,1p,人数不够无法结束游戏,可以选择推出或者继续,2p,游戏主界面,在这部分处理很多异常操作,不细讲了,详情见上篇博客。

附录:代码

MainActivity

package com.example.shea.goldenpoint2rd;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; public class MainActivity extends AppCompatActivity {
private int round; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button start = (Button) findViewById(R.id.start);
Button delete = (Button) findViewById(R.id.delete);
Button history = (Button) findViewById(R.id.history);
Button rules = (Button) findViewById(R.id.rules);
SharedPreferences tempdata = getSharedPreferences("tempdata", MODE_APPEND);
final SharedPreferences.Editor dataedit = tempdata.edit();
round=tempdata.getInt("round",1); assert start != null;
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,gameinterface.class);
startActivity(intent); }
}); assert delete != null;
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dataedit.clear();
if (round!=0){
for (int i = 1; i <=round ; i++) {
dataedit.remove(Integer.toString(i));
dataedit.commit();
}
}
dataedit.putInt("round",1);
Toast.makeText(MainActivity.this,"删除成功!",Toast.LENGTH_SHORT).show(); }
}); assert rules != null;
rules.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(MainActivity.this).
setMessage("请输入一个0-100的有理数,然后点击提交,如果需要更改,点击再次提交,如果完成请点击下一位玩家,并将手机传递给下一位玩家,最后一名玩家请点击结束游戏").
setTitle("游戏规则").setPositiveButton("懂了!开始游戏!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent=new Intent(MainActivity.this,gameinterface.class);
startActivity(intent); }
}).setNegativeButton("先不游戏 ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) { }
}).create().show(); }
}); assert history != null;
history.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (round==0){
Toast.makeText(MainActivity.this,"没有历史数据,快来完一轮吧!~",Toast.LENGTH_LONG).show();
}
else
{
Intent intent=new Intent(MainActivity.this,showresult.class);
startActivity(intent);
} }
}); }
}

  gameinterface--游戏界面

 package com.example.shea.goldenpoint2rd;

 import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; public class gameinterface extends AppCompatActivity {
private String username="";
private double number=0;
private int score=0;
private int ID=1;
private double G=0;
private double sum;
private double distance=0;
private boolean FLAG=false;
private String result="";
private int round=1;
private information[] userinfo=new information[100]; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gameinterface);
Button next= (Button) findViewById(R.id.next);
Button end= (Button) findViewById(R.id.endgame);
/*final Button name= (Button) findViewById(R.id.namebtn);*/
final Button submit= (Button) findViewById(R.id.inputbtn);
final EditText nametext= (EditText) findViewById(R.id.name);
final TextView userid= (TextView) findViewById(R.id.userid);
final TextView showinfo= (TextView) findViewById(R.id.showinfo);
final EditText inputnumtext= (EditText) findViewById(R.id.inputnum);
SharedPreferences tempdata=getSharedPreferences("tempdata",MODE_APPEND);
final SharedPreferences.Editor editdata=tempdata.edit();
round=tempdata.getInt("round",1);
userid.setText("您是当前第1名玩家"); assert next != null;//下一个玩家
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(inputnumtext.getText().toString())) {
Toast.makeText(gameinterface.this, "请输入您的数值!", Toast.LENGTH_SHORT).show();
} else if (FLAG) {
Toast.makeText(gameinterface.this, "请提交数据", Toast.LENGTH_SHORT).show();
} else {
ID++;
showinfo.setText("");
nametext.setText("");
inputnumtext.setText("");
userid.setText("您是当前第" + ID + "名玩家");
} }
}); assert submit != null;
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(inputnumtext.getText().toString()))
Toast.makeText(gameinterface.this, "请输入数据!", Toast.LENGTH_SHORT).show();
else if (TextUtils.isEmpty(nametext.getText().toString()))
Toast.makeText(gameinterface.this, "请输入昵称!", Toast.LENGTH_SHORT).show();
else
// double inputnum=Double.valueOf(inputnumtext.getText().toString())
if (Float.valueOf(inputnumtext.getText().toString()) < 100 && Float.valueOf(inputnumtext.getText().toString()) > 0) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive() && getCurrentFocus() != null) {
if (getCurrentFocus().getWindowToken() != null) {
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
number = Double.valueOf(inputnumtext.getText().toString());
username = nametext.getText().toString();
userinfo[ID] = new information(username, number, ID);
String test = userinfo[ID].getinfo();
System.out.println(test);
FLAG = false;
showinfo.setText(username + ",您输入的数据是:" + number + '\n' + "您可以输入框内更改输入数据,再点击提交数据");
Toast.makeText(gameinterface.this, "提交成功!", Toast.LENGTH_SHORT).show();
} else {
{Toast.makeText(gameinterface.this, "请输入一个介于0-100之间的有理数", Toast.LENGTH_SHORT).show();
inputnumtext.setText("");
}
} }
}); assert end != null;//结束游戏
end.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(inputnumtext.getText().toString()))
Toast.makeText(gameinterface.this,"请输入数据!",Toast.LENGTH_SHORT).show();
else if (TextUtils.isEmpty(nametext.getText().toString()))
Toast.makeText(gameinterface.this,"请输入昵称!",Toast.LENGTH_SHORT).show();
else if (FLAG){
Toast.makeText(gameinterface.this,"请提交数据!",Toast.LENGTH_SHORT).show();
}else
if (ID<3)
{
new AlertDialog.Builder(gameinterface.this).setTitle("不符合游戏规则!").setMessage("游戏结束至少需要2人,推荐人数10人").setPositiveButton("退出游戏", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent=new Intent(gameinterface.this,MainActivity.class);
startActivity(intent);
}
}).setNegativeButton("继续游戏", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) { }
}).create().show();
}
else{
for (int i=1;i<=ID;i++)
{
sum+=userinfo[i].inputnum;
}
G=(sum/ID)*0.618;
for (int i = 1; i <=ID; i++) {
distance=userinfo[i].inputnum-G;
userinfo[i].setDistance(distance);
}
double max=userinfo[1].distance;
double min=userinfo[1].distance;
for (int i=2;i<=ID;i++)
{
if (max<userinfo[i].distance)
max=userinfo[i].distance;
if (min>userinfo[i].distance)
min=userinfo[i].distance;
}
for (int i=1;i<=ID;i++)
{
if (userinfo[i].distance==max)
userinfo[i].setScore(-2);
else if (userinfo[i].distance==min)
userinfo[i].setScore(ID);
else
userinfo[i].setScore(0);
result=result+'\n'+userinfo[i].getinfo(); }
System.out.println(result);
String KEY=Integer.toString(round);
editdata.putString(KEY, result);
round++;
editdata.putInt("round", round);
editdata.commit();
Intent intent=new Intent(gameinterface.this,gameover.class);
intent.putExtra("data",result);
startActivity(intent);
} }
}); }
}

information--用户信息类

package com.example.shea.goldenpoint2rd;

/**
* Created by shea on 2016/4/11.
*/
public class information { public String name="";
public double inputnum=0;
public int ID=0;
public int score=0;
public double distance=0;
public void setName(String sname){name=sname;}
public void setInputnum(double num){inputnum=num;}
public void setID(int id){ID=id;}
public void setScore(int SCORE){score=SCORE;}
public void setDistance(double sdistance){distance=sdistance;} public information(String sname,double num,int id)
{
name=sname;
inputnum=num;
ID=id;} public String getinfo()
{
String info="游戏ID:"+ID+" 玩家昵称:"+name+" 分数:"+score+" 输入数据:"+inputnum+'\n';
return info;} }

  

结对编程--基于android平台的黄金点游戏(2.0版本)的更多相关文章

  1. 结对编程--基于android平台的黄金点游戏

    游戏内容: 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或1 ...

  2. 基于android平台的斗地主AI

    本软件是基于android平台的斗地主AI,我们在源代码的基础之上,旨在改进AI的算法,使玩家具有更丰富的体验感,让NPC可以更为智能. (一)玩法解析: (1)发牌和叫牌:一副扑克54张,先为每个人 ...

  3. 基于Android 平台简易即时通讯的研究与设计[转]

    摘要:论文简单介绍Android 平台的特性,主要阐述了基于Android 平台简易即时通讯(IM)的作用和功能以及实现方法.(复杂的通讯如引入视频音频等可以考虑AnyChat SDK~)关键词:An ...

  4. 基于Android平台的会议室管理系统具体设计说明书

    会议室管理系统具体设计说明书 第一部分  引言 1.编写目的 本说明对会议室管理系统项目的各模块.页面.脚本分别进行了实现层面上的要求和说明. 软件开发小组的产品实现成员应该阅读和參考本说明进行代码的 ...

  5. 基于Android平台的简易人脸检测库

    代码地址如下:http://www.demodashi.com/demo/12135.html ViseFace 简易人脸检测库,不依赖三方库,可快速接入人脸检测功能. 项目依赖:compile 'c ...

  6. 运维监控-基于yum的方式部署 Zabbix Agent 4.0 版本

    运维监控-基于yum的方式部署 Zabbix Agent 4.0 版本 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 上一篇博客我们分享了如何基于yum的方式部署zabbix 4. ...

  7. 运维监控-基于yum的方式部署Zabbix Server 4.0 版本

    运维监控-基于yum的方式部署Zabbix Server 4.0 版本 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.如何选择zabbix版本 1>.打开zabbix官方 ...

  8. 基于ANDROID平台,U3D对蓝牙手柄键值的获取

    对于ANDROID平台,物理蓝牙手柄已被封装,上层应用不可见,也就是说对于上层应用,不区分蓝牙手柄还是其它手柄: 完成蓝牙手柄和ANDROID手机的蓝牙连接后,即可以UNITY3D中获取其键值: 在U ...

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

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

随机推荐

  1. Mysql EF Code First

    1.更新程序包EntityFramework->6.1.3 2.下载程序包MySql.Data.Entities(Ver:6.8.3) 3.修改config.cs或者web.config,包含以 ...

  2. ios开发之网络php

    接着前面的学习,几天上午学习了数据库网络值php用户的注册与登录,感觉代码与ios上的oc太相似了,因此学习下来没什么障碍了,下面是代码: 首先是javascript.html文件中: <!DO ...

  3. matlab初学之plot颜色和线型

    文章出处: http://jiangshuxia.9.blog.163.com/blog/static/3487586020116711375339/ 字母        颜色          标点 ...

  4. Git进行代码管理的心得

    git从网上下载安装后 直接可在开始菜单中找到 打开可以看到一个类似命令窗口的东西 用代码进行用户名和邮箱的设置 虽然不知道为什么但是教程叫我这么做 (ˇˍˇ) 然后似乎就可以用了 进入文件夹 输入对 ...

  5. 遗传算法的C语言实现(一):以非线性函数求极值为例

    以前搞数学建模的时候,研究过(其实也不算是研究,只是大概了解)一些人工智能算法,比如前面已经说过的粒子群算法(PSO),还有著名的遗传算法(GA),模拟退火算法(SA),蚁群算法(ACA)等.当时懂得 ...

  6. Linux下使用NMON监控、分析系统性能

    一.下载nmon. 根据CPU的类型选择下载相应的版本:http://nmon.sourceforge.net/pmwiki.php?n=Site.Downloadwget http://source ...

  7. JS中offsetwidth等图文解释

    网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offs ...

  8. 关于容器为NavigationControlle时,view的起始位置的问题

    在iOS 7中,苹果引入了一个新的属性“EdgesForExtendedLayout”,默认值为UIRectEdgeAll,默认的布局将从navigationbar的顶部开始,这就是为什么所有元素都往 ...

  9. PHP时区配置

    在PHP安装目录中找到 php.ini-development 复制创建新的副本 找到 :date.timezone = 修改为 date.timezone = PRC 并保存为php.ini PRC ...

  10. SqlServer性能优化 自定义动化性能收集(四)

    配置数据收集器: 1.创建登录名并映射角色 2.配置管理数据仓库 3.创建收集组.收集项----MSDB数据存储   sp_syscollector_create... 4.自动配置相关job 具体步 ...