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

游戏内容:

阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏:

N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。

玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动。

结对编程的体验

这是第一次接触到结对编程,个人感觉效率提高了很多,在以前的编码过程中,思路经常因为查找文档这些事情而打断,但是在结对编程的过程中,两个人的思维都保持在一个很敏捷的状态,及时短暂的走神等负面状态,也可以在很短的时间内恢复高效的状态,个人很喜欢这种编码方式,如果以后有机会,还会再在日常的编码过程中使用这种工作方式。

项目概述

接到题目之后思考之后并没有想到C\S的良好交互体验方法,所有便选择了单机模式,就像在平时聚会时玩的谁是卧底游戏,只需要将手机按顺序传递就可以完成输入数据,在每个人输入数据之前重置界面便可以避免泄漏玩家的数据。同样限于时间问题,并没有做UI方面的设计,界面粗糙,还请海涵...下面讲一下该项目的文件结构。

共创建了4个class,其中3个继承至Activity,另一个类playerINFO用来存放管理用户数据。

1.MainActivity

在这里选择开始游戏,之后会弹出页面alterdialog提醒第一个玩家输入自己的昵称,并详细讲述游戏规则,在本游戏中,每一轮的游戏时玩家的序号是玩家的标号,昵称并不作为唯一确定玩家身份的变量。界面如下图。

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();
                                    }
                                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);}
                            }
                        }).create().show();
            }
        });
    }
}

  

2.Game

这部分作为项目的核心部分,玩家在这里输入自己的游戏数据,提交数据,然后把手机传给下一个玩家,循环往复。该部分在获取用户输入的过程中,很大一部分的工作是处理用户的异常输入,比如限制用户输入数字的范围必须在0-100,用户未输入数据不能点击结束游戏,下一位玩家的按钮,同时如果玩家少于2人,这个游戏无法开始,给用户提供两个选项结束游戏和继续游戏,在该部分为了使每次游戏的信息能存储下来,使用了sharedpreferences,是一种轻型的数据存储方式,它的本质是基于XML文件存储Key-Value键值对数据。界面如下图

 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.content.SharedPreferences;
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.Map;

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 ArrayList<Object> showresult=new ArrayList<>();
    public playerINFO playerinfo[]=new playerINFO[100];
    String[] result=new String[100];
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game);
        final SharedPreferences mypreferences=getSharedPreferences("tempdata",Context.MODE_APPEND);
        final SharedPreferences.Editor myeditor=mypreferences.edit();
        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 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);
                        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();}
                           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();
                           }
                       }
                   }).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;
                    for (int i=0;i<count;i++)
                    {
                        distance[i]=data[i]-G;
                        double a=Math.abs(distance[i]);
                        playerinfo[i].setDistance(a);
                     }
                    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;

                    }
                    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(count);
                        else
                            playerinfo[i].setScore(0);
                        playerinfo[i].showinfo();
                    }
                    for (int i=0;i<count;i++)
                    {
                        result[i]=playerinfo[i].showinfo();
                        myeditor.putString(playerinfo[i].name,result[i]);
                        myeditor.commit();

                    }
                    if (max==min)
                        draw=false;
                    for (int i=0;i<count;i++){
                        String myresult= mypreferences.getString(playerinfo[i].name, "无比赛数据");
                        System.out.println(myresult);}
                    Map<String,?> mydata=mypreferences.getAll();
                    for (String key:mydata.keySet()
                         ) {
                        showresult.add(mydata.get(key));
                        System.out.println("new------" + mydata.get(key));

                    }
                    for (int i=0;i<showresult.size();i++)
                        System.out.println(result[i]=showresult.get(i).toString());

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

              }
            }
        });

    }

}

3.showresult

该界面就是用来输出结果,在这里可以清楚过往数据,返回主页以及查看历史数据。

总结:

通过该次结对编程,让我对编码的技巧性的认识又扩宽的一个层面,一个人的能力或许是有限的,但是当我们找到一个合适的方法,我们可以提升效率,把自己的能力最大化输出,这是我们日后走向工作岗位很重要的一项技能,这其中的工程之美,只有自己亲身体验了才能感受到,这让我更加期待自己日后的软件工程课的学习了。

对伙伴的评价:本次项目进行之前,徐同学没有接触过android相关知识,但是在结对编程的过程中,学习进步非常快,个人觉得在IT行业中,学习能力是一项非常重要的能力,而徐同学在这方面很强,学以致用,举一反三,自己以后还是要向他学习一个。

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

时间: 2024-07-29 07:30:06

结对编程--基于android平台的黄金点游戏的相关文章

结对编程--基于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 较先前版本的改进: 交互更加合理 存储方式更科学 代码

基于Android平台开发的手电筒Light

基于Android平台开发的手电筒Light 1.     需求分析: 在现代社会中,手机的功能越来越完善,手电筒就是这些功能中必不可少的一种.当行走在漆黑的道路上,当你在黑暗狭小的地方寻找物品,当你在家中停电之时,如果你的手机拥有了手电筒的功能,那将为你带来莫大的方便.当然,它的用处不仅仅只是这样,有了这样一个方便携带的手电筒,在许多时候都是大有益处,因此,开发出了手电筒这一应用程序. 2.     开发环境: 1. JDK Ver: jdk-7u4-windows-x64.exe 2. My

基于Android平台的i-jetty网站智能农业监控系统

基于android平台i-jetty网站的智能农业监控系统 摘要:传统的监控系统,一般是基于PC的有线通信传输,其有很多不足之处,如功耗较高.布线成本高.难度大,适应性差,可扩展性不强,增加新的通信线路需要再次布线施工,而且维护起来也比较麻烦,一旦线路出问题,需要繁琐的检查.而嵌入式Web监控系统是基于物联网技术,其无线通信技术具有成本低廉.适应性强.扩展性强.信息安全.使用维护简单等优点. 智能农业中,种植大棚是通过大棚内安装温湿度以及光照传感器,来对农作物的环境参数进行实时采集,由Web监控

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

会议室管理系统具体设计说明书 第一部分  引言 1.编写目的 本说明对会议室管理系统项目的各模块.页面.脚本分别进行了实现层面上的要求和说明. 软件开发小组的产品实现成员应该阅读和參考本说明进行代码的编写.測试. 1.2 背景 说明: A.软件系统的名称:会议室管理系统 B. 任务提出者:内蒙古大学计算机学院 开发人员:魏晓蕾 本项目将实现基于Android平台的会议室管理系统的原型部分,而且在该原型的基础上进行功能的扩展和需求的界定,终于完毕的版本号将在全国范围内推广使用. 提供会议室管理功能

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

摘要:论文简单介绍Android 平台的特性,主要阐述了基于Android 平台简易即时通讯(IM)的作用和功能以及实现方法.(复杂的通讯如引入视频音频等可以考虑AnyChat SDK~)关键词:Android 平台:即时通讯 (本文中图表点击附件即可见) 1 Android 平台简介Android 是Google 公司于2007年11月5日推出的手机操作系统,经过2年多的发展,Android平台在智能移动领域占有不小的份额,由Google为首的40 多家移动通信领域的领军企业组成开放手机联盟(

cocos2dx-2.X前后台切换分析,基于android平台

摘自网上的android生命周期图: cocos2dx-2.X前后台切换分析,基于android平台: 1.从后台进入前台 项目的activity一般继承自Cocos2dxActivity,看过activity生命周期的 都知道onCreate,onResume等方法,这些函数是activity生命周期中 最重要的函数,具体什么时候调用,可以查看相关资料. //刚进入游戏和游戏从后台回到前台会调用 @Override protected void onResume() { super.onRes

基于Android平台简易即时通讯的研究与设计

1 Android平台简介 Android是Google公司于2007年11月5日推出的手机操作系统,经过2年多的发展,Android平台在智能移动领域占有不小的份额,由Google为首的40多家移动通信领域的领军企业组成开放手机联盟(OHA).Google与运营商.设备制造商.开发商和其他第三方结成深层次的合作伙伴关系,希望通过建立标准化.开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统.正因如此,Android正在被越来越多的开发者和使用者所接受.近日,Google发言人Ant

基于Android平台的快递轨迹查询应用开发全程视频教程

课程讲师:欧楠课时数量:10(17节)课时用到技术:MenuDrawer.DbUtils.HttpUtils.讯飞语音识别涉及项目:基于Android平台的快递轨迹查询应用开发项目咨询QQ:1609173918 http://yunpan.cn/cVgILJtNYMcDB 访问密码 f885 目前Android平台移动应用开发正如火如荼的发展,智能手机和平板电脑的出货量正快速上升,人们正越来越习惯于在移动平台进行娱乐和各种操作.目前电子商务的发展使人们在每次网购之后都需要了解购买的商品的物流信息

基于Android平台的汽车租赁平台项目的数据库设计心得

我们团队的项目是基于Android平台的汽车租赁平台,其分为手机客户端与web后台管理系统,用以满足租车公司的业务需求,故数据库设计对于本项目显得尤为重要,我们团队数据库设计最开始用的是最原始的方式:Word手动输入,但随后随着数据库课程以及实验的学习,我们最后使用的PowerDesigner设计的数据库并生成了SQL文件,导入数据库完成的数据库最终设计与搭建,我们团队于第8周完成了数据库的搭建. 数据库设计中,数据库要严格与项目需求相联系,同时保证数据库数据完整.正确.安全以及数据处理的高效与