android模擬NBA西決比賽!

本來我是在學習HandlerThread和Handler的post方法的,然後正好今天NBA雷霆晉級,西部決賽將對陣勇士隊!肯定很激烈啊!於是我就突然想用代碼模擬一下西部決賽,既學習了安卓又預測了比賽,不多說,先上圖


比賽過程



於是我開始了西決模擬,

第一場                                                  第二場 第三場

            

  第四場 第五場 第六場


             

第七場


哈哈,還真是激烈,打到了搶七,雖然模擬結果勇士贏了,但我還是挺雷霆啊!(模擬僅參考雙方常規賽三分兩分罰球出手數及命中率)


上代碼

界面寫的不太好,太亂,怕誤導別人,就不給了= =


進球的方法

private int play(double ftTime, double twoShootTime, double threeShootTime,
			double ftpercent, double twoPercent, double threePercent,
			String team,int result) {
		
		int type = new Random().nextInt(100);
		if (type < ftTime) {
			report = team + "獲得了罰球";
			// 獲得了一次罰球
			int percent = new Random().nextInt(1000);
			if (percent <= ftpercent * 10) {
				result++;
				report += ",並且命中";
			} else {
				report += ",沒有命中";
			}

		} else if (type >= ftTime && type < (ftTime + twoShootTime)) {
			// 獲得了兩分球出手
			report = team + "出手兩分球";
			int percent = new Random().nextInt(1000);
			if (percent <= twoPercent * 10) {
				result += 2;
				report += ",並且命中";
			} else {
				report += ",沒有命中";
			}
		} else {
			// 獲得了三分球出手
			report = team + "出手三分球";
			int percent = new Random().nextInt(1000);
			if (percent <= threePercent * 10) {
				result += 3;
				report += ",並且命中";
			} else {
				report += ",沒有命中";
			}
		}
		return result;

	}


開啓後臺線程的方法

private void initBackThread() {
		mMsgThread = new HandlerThread("msg");
		mMsgThread.start();
		mMsgHandler = new Handler(mMsgThread.getLooper()) {

			@Override
			public void handleMessage(Message msg) {
				update();
				if (isUpdateInfo) {
					mMsgHandler.sendEmptyMessageDelayed(MSG_UPDATE_INFO, 100);
				}
			}
		};

	}


重寫的activity生命週期

@Override
	protected void onResume() {
		isUpdateInfo = true;
		//開始比賽
		mMsgHandler.sendEmptyMessageDelayed(MSG_UPDATE_INFO, 2000);
		super.onResume();
	}

	@Override
	protected void onPause() {
		isUpdateInfo = false;
		//暫停比賽
		mMsgHandler.removeMessages(MSG_UPDATE_INFO);
		super.onPause();
	}
	
	@Override
	protected void onDestroy() {
		mMsgThread.quit();
		super.onDestroy();
	}


比賽的方法

private void update() {

		mHandler.post(new Runnable() {

			@Override
			public void run() {
				time++;
				if(time==100){
					mShowWarriorsTextView.setText("");
					if(warriorsResult>thunderResult){
						mShowThunderTextView.setText("勇士勝利!");
					}else{
						mShowThunderTextView.setText("雷霆勝利!");
					}
					mMsgThread.quit();
				}else{
				warriorsResult=	play(20, 51, 29, 76.3, 52.8, 41.5, "勇士隊",warriorsResult);
				mShowWarriorsTextView.setText(report);
				mWarriorsTextView.setText(warriorsResult + "");
				report = "";

				thunderResult=play(23, 56, 21, 78.2, 52.3, 34.8, "雷霆隊",thunderResult);

				mShowThunderTextView.setText(report);
				mThunderTextView.setText(thunderResult + "");
				report = "";
			}
			}
		});
	}

onCreate()

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mHandler = new Handler();

		mShowThunderTextView = (TextView) findViewById(R.id.main_tv_thunder_report);
		mShowWarriorsTextView = (TextView) findViewById(R.id.main_tv_warriors_report);
		mWarriorsTextView = (TextView) findViewById(R.id.main_tv_warriors);
		mThunderTextView = (TextView) findViewById(R.id.main_tv_thunder);

		initBackThread();

	}

首先onPause方法會給比賽線程發送消息開始比賽,即調用update方法,然後開始模擬比賽play方法,需要傳遞的參數是雙方常規賽三分兩分罰球出手數及命中率,然後post方法更新UI,然後再延遲1秒向比賽線程發送Message再進行模擬,最後模擬100次比較結果,比賽結束!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章