天天看點

結對程式設計——黃金點遊戲

      原題目說的是: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)

結對程式設計——黃金點遊戲
結對程式設計——黃金點遊戲