Android趣味课程:打地鼠游戏

本篇博客为大家介绍一个简单小游戏的制作:打地鼠游戏的编写。打地鼠,进入页面点击开始游戏后,即可直接进入游戏。此刻,地鼠会不经意的从屏幕中探出一个脑袋,快速消失,企图躲过游戏者的视线。游戏者点击地鼠则获得1分,在限定时间到达后,结束游戏。

功能需求分析:

1.让地鼠图片可随机出现在屏幕的各个角落,通过获取屏幕的尺寸,让地鼠随机出现在屏幕的任何地方。

2.为地鼠设置点击事件,让其可点击,点击后引起计数的增加。

3.设置倒计时功能,当时间减少至0秒,游戏结束。

根据分析的思路,开始编写代码:

首先依然编写布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/background">
    <ImageView
        android:id="@+id/hw_mouse_iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/mouse"
        android:layout_centerInParent="true"/>
    <Button
        android:id="@+id/hw_btn_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开始游戏"
        />
    <TextView
        android:id="@+id/hw_tv_score"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0分"
        android:layout_centerHorizontal="true"
        android:layout_alignBottom="@+id/hw_btn_start"
        android:textSize="26sp"
        />
    <TextView
        android:id="@+id/hw_tv_second"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="10"
        android:layout_alignParentRight="true"
        android:textColor="#F00"
        android:textSize="26sp"
        android:layout_marginRight="10dp"
        android:layout_alignBottom="@+id/hw_tv_score"/>
</RelativeLayout>

然后在编写此布局对应的activity。

package com.animee.testinfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn;//开始游戏 逻辑:点击button之后,地鼠出现在中间位置,同时可以被点击,然后开始倒计时,按钮将消失
    private TextView scoreTv;  //当确认地鼠被点击到时,分数会自增
    private TextView secondTv;  //  可以使用handler写一个计时器的方法,判断倒数的事件是否为0.
    private ImageView mouseIv;  //点击事件:让原来位置的老鼠消失,随机生成新的位置,让老鼠出现在新的位置上,分数加1
    int height;   //屏幕的高度
    int width;  //屏幕的宽度
    int score = 0; // 定义一个表示当前分数的变量
    int totalTime = 10; //定义一个表示每一次游戏时间的变量
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what==100) {
                int time = msg.arg1;
                if (time>0) {
//                  时间还没有结束,对于TextView进行修改
                    secondTv.setText(time+"");
                }else{
//                    时间到了    1.让按钮展示出来    2.老鼠不能在点击了
                    btn.setVisibility(View.VISIBLE);
                    secondTv.setText(""+10);
                    mouseIv.setClickable(false);
                    Toast.makeText(MainActivity.this,"游戏结束",Toast.LENGTH_LONG).show();
                }
            }else if (msg.what==200) {    //
                int mX = msg.arg1;
                int mY = msg.arg2;
                Log.i("tag111", "handleMessage:地鼠的位置x: "+mX+",y的位置:"+mY);
                scoreTv.setText(score+"分");
                mouseIv.setVisibility(View.VISIBLE);
                mouseIv.setX(mX);
                mouseIv.setY(mY);
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hw);
        btn = (Button) findViewById(R.id.hw_btn_start);
        scoreTv = (TextView) findViewById(R.id.hw_tv_score);
        secondTv = (TextView) findViewById(R.id.hw_tv_second);
        mouseIv = (ImageView) findViewById(R.id.hw_mouse_iv);
        /**
         * 获取屏幕的宽度和高度
         * */
        DisplayMetrics metrics = getResources().getDisplayMetrics();
        this.height = metrics.heightPixels;
        this.width = metrics.widthPixels;
        Log.i("tag111", "onCreate: 屏幕的height==="+ this.height +",width=="+ this.width);
        //设置点击事件
        btn.setOnClickListener(this);
        mouseIv.setOnClickListener(this);
        mouseIv.setClickable(false);   //设置地鼠不能被点击
    }
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.hw_btn_start:   //开始游戏的点击
//              设置地鼠可以被点击
                mouseIv.setClickable(true);
//                设置地鼠最初的坐标
                mouseIv.setX(width / 2);
                mouseIv.setY(height / 2);
//                隐藏button按钮
                btn.setVisibility(View.INVISIBLE);
//              开始倒计时
                startCountDown();
                break;
            case R.id.hw_mouse_iv:   //地鼠的点击
                mouseIv.setVisibility(View.INVISIBLE);
                score++;
                Message msg = new Message();
                msg.what = 200;
//                随机数   = (int)(最小值+Math.random*(最大值-最小值));
                msg.arg1 = (int)(Math.random()*(width-400)+200);    //老鼠随机生成的x轴的位置
                msg.arg2 = (int)(Math.random()*(height-400)+200);
//                发送一条消息通知老鼠出现
                handler.sendMessageDelayed(msg,200);
                break;
        }
    }
    /**
     * @des 开始倒计时的方法
     */
    public void startCountDown() {

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = totalTime-1; i >=0 ; i--) {
                    try {
                        Thread.sleep(1000);
//                        向子线程发送一条消息
                        Message msg = new Message();
                        msg.what = 100;
                        msg.arg1 = i;
                        handler.sendMessage(msg);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}

最后运行一下app,就会发现,打地鼠游戏完成了。感谢您的阅读~

  • 10
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值