用android去寫一個小程序


前言:

      軟工的一個小作業:實現“黃金分割小游戲”, 需要結對編程,隊友:陳樂雲    共用時兩天。

早期思路設計:

      采用鍵值對的形式,以Map作為存儲結構。優點:能夠將數據與用戶對應,缺點:采用java實現過於復雜,工程量過大,需要消耗大量資源,類型轉換容易出錯。

后期思路設計:

      采用二維數組:第一行用於存儲用戶輸入原始數據,第二行用於存儲中間數據(第一行的與G值做差的絕對值),第三行用於保存用戶得分。

      優點:實現簡單,易於運算

  

分工:

    前期:陳樂雲負界面設計 和 代碼的檢查        中期: 陳樂雲負責代碼的檢查,bug檢查       后期:陳樂雲負責App測試        

             我負責算法的實現,界面優化                      我負責編碼和bug訂正                              我負界面的優化,代碼調試

App界面設計過程:

第一版代碼:

        第一版代碼只是簡單的實現后台的部分邏輯,主要用於測試邏輯的准確性,並沒有做具體的測試。

package cn.sau.Test;

import java.util.Arrays;
import java.util.Collection;

public class testGolden {
     static int number = 10;
    public static void main(String[] args) {
        double[][] array = new double[10][3];
        for(int i = 0 ;i<number;i++)
        {
            for(int j = 0 ;j<2;j++)
                if(j==0)
                    array[i][j]=i+10;
                else
                {
                    array[i][2]=0;
                    array[i][j] = 0;
        
                }
        }
        //平均值
        double average  = 0;
        for(int i = 0; i<number;i++){
            average = average +array[i][0];
        }
        int x = number;
        average = average /x;
        
        //G值
        double G =average *0.618; 
        
        //相近度
        for(int i = 0; i<number;i++){
            array[i][1] = Math.abs(array[i][0] -average);
        }
        
        //min:最近; max:最遠
        double min = array[0][1];
        double max = array[0][1];
        for(int i = 1; i<number; i++){
            if(min >array[i][1]){
                min =array[i][1];
            }
            if(max<array[i][1]){
                max =array[i][1];
            }
        }
        System.out.println("max:"+max +"\n min:" +min);
        //統計得分
        for(int i = 0; i<number;i++){
            if(array[i][1]==min){
                array[i][2] =number;
            }
            else if(array[i][1] == max){
                array[i][2]=-2;
            }
        }
        
        
        for(int i = 0 ;i<10;i++)
        {
            
             System.out.print(array[i][2] +"\n");
    
        }
    }
    

}

第二版代碼:

    第二版代碼主要是在第一個版的基礎上,實現對android平台的移植,比進行了大量的測試。

package com.example.m.goldengame10;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

/*
   黃金分割小游戲1.0版本
   實現以下功能:
       單機操作
       固定用戶為10
   2016/10/16
   作者:Finch & xiaoPang
 */

public class MainActivity extends AppCompatActivity {


     int number =10; //總人數
     int  count = 1; //局數判斷
    double[][] array = new double[10][3];

    TextView news ;
    EditText user1 ;
    EditText user2;
    EditText user3 ;
    EditText user4;
    EditText user5;
    EditText user6 ;
    EditText user7 ;
    EditText user8 ;
    EditText user9 ;
    EditText user10;
    Button  submit ;
    Button  clean;


    protected void onCreate(Bundle savedInstanceState) {
        Log.v("Button","on");
        for(int i = 0; i<number;i++){
            array[i][0]=0;
            array[i][1]=0;
            array[i][2]=0;
        }

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        news =(TextView)findViewById(R.id.news);
        user1 = (EditText)findViewById(R.id.user1);
        user2 = (EditText)findViewById(R.id.user2);
        user3 = (EditText)findViewById(R.id.user3);
        user4 = (EditText)findViewById(R.id.user4);
        user5 = (EditText)findViewById(R.id.user5);
        user6 = (EditText)findViewById(R.id.user6);
        user7 = (EditText)findViewById(R.id.user7);
        user8 = (EditText)findViewById(R.id.user8);
        user9 = (EditText)findViewById(R.id.user9);
        user10 = (EditText)findViewById(R.id.user10);
        submit =(Button)findViewById(R.id.submit);
        clean =(Button)findViewById(R.id.clean);
        submit.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){

                news.setText("第"+count+"局得分");
                array[0][0] =Double.parseDouble( user1.getText().toString());
                array[1][0] =Double.parseDouble( user2.getText().toString());
                array[2][0] =Double.parseDouble( user3.getText().toString());
                array[3][0] =Double.parseDouble( user4.getText().toString());
                array[4][0] =Double.parseDouble( user5.getText().toString());
                array[5][0] =Double.parseDouble( user6.getText().toString());
                array[6][0] =Double.parseDouble( user7.getText().toString());
                array[7][0] =Double.parseDouble( user8.getText().toString());
                array[8][0] =Double.parseDouble( user9.getText().toString());
                array[9][0] =Double.parseDouble( user10.getText().toString());

                //平均值
                double average  = 0;
                for(int i = 0; i<number;i++){
                    average = average +array[i][0];
                }
                int x = number;
                average = average /x;

                //G值
                double G =average *0.698;

                //相近度
                for(int i = 0; i<number;i++){
                    array[i][1] = Math.abs(array[i][0] -G);
                }

                //min:最近; max:最遠
                double min = array[0][1];
                double max = array[0][1];
                for(int i = 1; i<number; i++){
                    if(min >array[i][1]){
                        min =array[i][1];
                    }
                    if(max<array[i][1]){
                        max =array[i][1];
                    }
                }

                //統計得分
                for(int i = 0; i<number;i++){
                    if(array[i][1]==min){
                        array[i][2] =array[i][2] + number;
                    }
                    else if(array[i][1] == max){
                        array[i][2]=array[i][2]-2;
                    }
                }

                user1.setText(String.valueOf(array[0][2]));
                user2.setText(String.valueOf(array[1][2]));
                user3.setText(String.valueOf(array[2][2]));
                user4.setText(String.valueOf(array[3][2]));
                user5.setText(String.valueOf(array[4][2]));
                user6.setText(String.valueOf(array[5][2]));
                user7.setText(String.valueOf(array[6][2]));
                user8.setText(String.valueOf(array[7][2]));
                user9.setText(String.valueOf(array[8][2]));
                user10.setText(String.valueOf(array[9][2]));
                count++; //每提交一次,局數加一
            }
        });

        clean.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){


                //初始化
               for(int i= 0;i<number;i++){
                   array[i][0]=0;
                   array[i][1]=0;
                   news.setText("開始第"+count+"局,請輸入數值");
                   news.setTextSize(30);
               }
                //自動清空數據
                user1.getText().clear();
                user2.getText().clear();
                user2.getText().clear();
                user3.getText().clear();
                user4.getText().clear();
                user5.getText().clear();
                user6.getText().clear();
                user7.getText().clear();
                user8.getText().clear();
                user9.getText().clear();
                user10.getText().clear();
            }
        });
    }
}

App界面設計:

  

 App測試:

                                  

    

 代碼測試圖集:

           

 

 App測試其他圖集:

 

 

 

 總結:針對本次作業,我們還有很多需要完善的地方:1,未能實現聯機模式,導致用戶體驗不好

                                                                      2,界面設計過於簡陋,體驗稍差

                                                                      3,算法實現未能考慮人數不確定性

    當然,我們會在后期系統的學習java和android后,會及時的做出更正。

 附:

 android studio 項目 代碼:https://git.coding.net/fench/GodlenGame-on-android.git

 App下載地址A(歡迎試玩):GoldernGameAPK

 

    隊友陳樂雲的博客鏈接:http://www.cnblogs.com/clyln/  coding賬號:https://coding.net/u/Clyln),                                                                                                                                                                 finch

                                                                                                                                                                                                     2016-10-17

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM