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次比较结果,比赛结束!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值