结对编程--基于android平台的黄金点游戏(2.0版本)

在昨天上传完博客之后发现一个重大的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,以后还是要多学习一个的,只有技术面广阔,才能在拿到问题的第一时间内找到合适的解决策略,就先总结到这了。下面放出软件运行的截图。

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

结对编程--基于android平台的黄金点游戏(2.0版本)

结对编程--基于android平台的黄金点游戏(2.0版本)

结对编程--基于android平台的黄金点游戏(2.0版本)

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

结对编程--基于android平台的黄金点游戏(2.0版本)

结对编程--基于android平台的黄金点游戏(2.0版本)

附录:代码

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;} }

  

上一篇:手机上的ROM与RAM


下一篇:mysql update语句的执行流程是怎样的