结对编程——黄金点游戏
原题目说的是:N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动。
要求如下:
1、本作业属于结对编程项目,必须由二人共同完成,并分别将本次作业过程发到博客,同时将本次作业源代码提交到codeing系统;
2、如果可能的话尽量以C/S或B/S方式实现,即利用服务器接收和处理所有玩家提交的数字,并将结果反馈给各玩家,玩家可以通过客户端提交的数字;
3、如果采用单机方式实现的话,需要为用户提供便利的输入界面;
4、该游戏每次至少可以运行10轮以上,并能够保留各轮比赛结果
我和雷翔宇同学我们两个在几天前商量了一下包括编程语言、界面、老师的要求等这些内容, 从题目的要求上来看,这次的结对编程主要是要实现黄金点游戏的编程。而具体的黄金点游戏在上面的题目以及要求里面已经说的很清楚:可以实现N个同 学进行黄金点游戏,每个同学随机给1-99之间的任意有理数,通过计算机计算实现求出平均值以后乘以0.618得到G值,即所谓的黄金分割常数。每次输入N个数字,计算出平均值和G点,输入数字最靠近G的同学得N分,离G最远的同学得到-2分,其他同学得0分。将每轮G点与每个同学对应的各自成绩打印出来。游戏结束后将每人成绩总和输出,可以看出第几名同学胜利。
具体文件如下:
package com.example.shea.goldenpoint; //************************************************************ //** ** //** RAY'S WORK ** //** 2013040101016 ** //** ** //************************************************************ import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class showresult extends AppCompatActivity { private String[] result=new String[100]; private Boolean draw; private String res=""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_showresult); TextView textView= (TextView) findViewById(R.id.textView); Intent intent=getIntent(); Bundle mybundle=intent.getBundleExtra("data"); result=mybundle.getStringArray("result"); draw=mybundle.getBoolean("draw"); for (int i=0;result[i]!=null;i++) {res=res+result[i]+'\n'; System.out.println(res);} if (draw) { textView.setText(res); } else { textView.setText("该场游戏平局"); } } }
package com.example.shea.goldenpoint; //************************************************************ //** ** //** RAY'S WORK ** //** 2013040101016 ** //** ** //************************************************************ import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; 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; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; public class Game extends AppCompatActivity { private int count = 1; private boolean FLAG=true; private int counter=0; private double average=0; private double sum=0; private double num=0; private double G=0; public String name=""; public boolean draw=true; private double[] data= new double[100]; private double[] distance=new double[100]; public playerINFO playerinfo[]=new playerINFO[100]; List<playerINFO> AL=new ArrayList<playerINFO>(); String[] result=new String[100]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.game); String path=""; final Button END= (Button) findViewById(R.id.END); final Button NEXT= (Button) findViewById(R.id.NEXT); final Button reSUBMITbtn= (Button) findViewById(R.id.SUBMITbtn); final Button SUBMIT= (Button) findViewById(R.id.SUBMIT); //final EditText getNAME=new EditText(this); final EditText ET = new EditText(getApplicationContext()); final EditText INPUT= (EditText) findViewById(R.id.INPUT); final TextView reSUBMIT= (TextView) findViewById(R.id.SUBMITtv); final TextView SHOWINFO = (TextView) findViewById(R.id.PLAYERINFO); reSUBMITbtn.setVisibility(View.INVISIBLE); SHOWINFO.setText("当前是第" + 1 + "名玩家"); reSUBMIT.setText(""); Intent intent= getIntent(); name=intent.getStringExtra("name"); SUBMIT.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FLAG = false; String str = INPUT.getText().toString(); if (TextUtils.isEmpty(INPUT.getText().toString())) Toast.makeText(Game.this, "请输入您的数值!", Toast.LENGTH_SHORT).show(); else { num = Float.valueOf(str); if (num < 100 && num > 0) { Toast.makeText(Game.this, "输入成功,请将手机传递给下一个玩家,如需修改,请输入数据后点击再次提交。如果停止游戏,请点击结束游戏", Toast.LENGTH_LONG).show(); reSUBMIT.setText(name+",您输入的数据是" + str); reSUBMITbtn.setVisibility(View.VISIBLE); data[counter] = Float.valueOf(str); String ObjectNAME = ""; System.out.println(name); playerinfo[counter] = new playerINFO(name, data[counter]); playerinfo[counter].setNO(counter+1); AL.add(playerinfo[counter]); for (int i = 0; i < 5; i++) { System.out.println("----------------------------"); System.out.println(data[i] + " " + i); } 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); } } } else { Toast.makeText(Game.this, "请输入一个介于0-100之间的有理数", Toast.LENGTH_SHORT).show(); } } } }); reSUBMITbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { reSUBMITbtn.setVisibility(View.INVISIBLE); reSUBMIT.setText(""); INPUT.setText(""); } }); NEXT.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (FLAG) { Toast.makeText(Game.this,"请提交你的结果",Toast.LENGTH_SHORT).show(); } else { reSUBMITbtn.setVisibility(View.INVISIBLE); reSUBMIT.setText(""); INPUT.setText(""); FLAG=true; count++; counter++; name=""; System.out.println(); SHOWINFO.setText("当前是第" + count + "名玩家"); final EditText ET = new EditText(getApplicationContext()); ET.setHint("请输入你的昵称"); ET.setTextColor(Color.BLACK); ET.setHintTextColor(Color.BLUE); new AlertDialog.Builder(Game.this).setView(ET). setMessage("请输入一个0-100的有理数,然后点击提交,如果需要更改,点击再次提交,如果完成请点击下一位玩家,并将手机传递给下一位玩家,最后一名玩家请点击结束游戏"). setTitle("游戏规则"). setPositiveButton("了解!开始游戏!", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (TextUtils.isEmpty(ET.getText().toString())) { try { Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); field.setAccessible(true); field.set(dialog, false); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } Toast.makeText(Game.this,"请输入玩家姓名",Toast.LENGTH_LONG).show(); System.out.println("======================================="+ET.getText().toString());} else { try { Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); field.setAccessible(true); field.set(dialog, true); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } name = ET.getText().toString(); System.out.println(name+"this aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); } } }).create().show(); } } }); END.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(count<2) new AlertDialog.Builder(Game.this).setTitle("不符合游戏规则!").setMessage("游戏结束至少需要2人,推荐人数10人").setPositiveButton("退出游戏", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent=new Intent(Game.this,MainActivity.class); startActivity(intent); } }).setNegativeButton("继续游戏", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).create().show(); else if (TextUtils.isEmpty(INPUT.getText().toString())){ Toast.makeText(Game.this, "请输入您的数值!", Toast.LENGTH_SHORT).show(); } else { for (int m=0;m<count;m++) { sum+=data[m]; } average = sum/count; G=average*0.618; System.out.println("=================G=" + G + "================="); for (int i=0;i<count;i++) { distance[i]=data[i]-G; double a=Math.abs(distance[i]); playerinfo[i].setDistance(a); System.out.println("-------------------DISTANCE " + playerinfo[i].distance + "---------------------"); System.out.println("-------------------name "+playerinfo[i].name+"---------------------"); } double max=playerinfo[0].distance; double min=playerinfo[0].distance; for (int i=1;i<count;i++) { if (playerinfo[i].distance>max) max=playerinfo[i].distance; if (playerinfo[i].distance<min) min=playerinfo[i].distance; } System.out.println(max+" ----------- "+min); for (int i=0;i<count;i++) { if (playerinfo[i].distance==max) playerinfo[i].setScore(-2); else if (playerinfo[i].distance==min) playerinfo[i].setScore(10); else playerinfo[i].setScore(0); playerinfo[i].showinfo(); } for (int i=0;i<count;i++) { result[i]=playerinfo[i].showinfo(); } if (max==min) draw=false; Bundle mybundle=new Bundle(); mybundle.putStringArray("result",result); mybundle.putBoolean("draw",draw); Intent intent=new Intent(Game.this,showresult.class); intent.putExtra("data",mybundle); startActivity(intent); } } }); } }
package com.example.shea.goldenpoint; //************************************************************ //** ** //** RAY'S WORK ** //** 2013040101016 ** //** ** //************************************************************ import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.lang.reflect.Field; public class MainActivity extends AppCompatActivity { String name=""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button STARTbtn=(Button)findViewById(R.id.START); STARTbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final EditText ET = new EditText(getApplicationContext()); ET.setHint("请输入你的昵称"); ET.setTextColor(Color.BLACK); ET.setHintTextColor(Color.BLUE); new AlertDialog.Builder(MainActivity.this).setView(ET). setMessage("请输入一个0-100的有理数,然后点击提交,如果需要更改,点击再次提交,如果完成请点击下一位玩家,并将手机传递给下一位玩家,最后一名玩家请点击结束游戏"). setTitle("游戏规则"). setPositiveButton("了解!开始游戏!", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (TextUtils.isEmpty(ET.getText().toString())) { try { Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); field.setAccessible(true); field.set(dialog, false); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } Toast.makeText(MainActivity.this, "请输入玩家姓名", Toast.LENGTH_LONG).show(); System.out.println("======================================="+ET.getText().toString());} else { try { Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); field.setAccessible(true); field.set(dialog, true); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } name = ET.getText().toString(); System.out.println(name); Intent intent=new Intent(MainActivity.this,Game.class); intent.putExtra("name",name); startActivity(intent); System.out.println(name+"this aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); } } }).create().show(); } }); } }
package com.example.shea.goldenpoint; import java.util.ArrayList; //************************************************************ //** ** //** RAY'S WORK ** //** 2013040101016 ** //** ** //************************************************************ public class playerINFO { public String name=""; public double score=0; public int result=0; public double distance=0; public int NO=0; public String showresults=""; public void setName(String sname){ name=sname; } public void setNO(int sno) { NO=sno; } public void setScore(int sscore){ result=sscore; //score.add(sscore); // score } public void setDistance(double sdistance){ distance=sdistance; } public playerINFO(String sname,double sscore){ name=sname; score=sscore; } public String showinfo() { System.out.println(); System.out.println("----------------------NO "+NO+"-------------------------------"); System.out.println("----------------------score "+result+"-------------------------------"); System.out.println("----------------------name "+name+"-------------------------------"); System.out.println("----------------------distance "+distance+"-------------------------------"); System.out.println(); if (name.isEmpty()) showresults="玩家序号:"+NO+" 昵称:不知名大侠"+" 数值"+score+" 得分:"+result; else showresults="玩家序号:"+NO+" 昵称:"+name+" 数值"+score+" 得分:"+result; return showresults; } }
部分截图:
因为我的编程能力不是很强,我在这次编程中的角色责任不是很大,但是还是想在合作中给的自己的一份力量,感谢队友的信任和帮助,让我们的编程作业能够顺利完成,也正是由于这次结对编程,让我有机会和大神雷翔宇同学一起完成这个任务,在合作的过程中,从他身上学到了很多东西,我想这就是结对编程任务的特别之处吧。可能这只是一个简单的小游戏,不过我和队友还是想在自己的能力范围内,让自己的东西能够趋于完美,可能以后的解队作业还会有,但是我会努力让自己的角色变得不一样,感谢老师,感谢队友雷翔宇同学。
PS:我们(23333)