Handler案例-简易打地鼠游戏(延时处理消息)
1. 游戏思路
(1)用ImageView显示地鼠,初始状态将ImageView设置为不可见状态。当开始游戏后,通过sendMessageDelayed()方法延时发送消息,使ImageView显示出来,即实现了地鼠间隔出现的效果。
(2)通过Random获取随机数,给ImageView随机坐标,实现地鼠随机位置出现的效果。
(3)打中1次分数加1,同时记录出现的地鼠数量,当数量达到设定的最大数量,则游戏结束。
2. 代码
布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
tools:context="com.studying.network.GameActivity">
<ImageView
android:id="@+id/image_view"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/mouse"
android:visibility="gone" />
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="80dp" />
<Button
android:id="@+id/button"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:text="@string/start_game"
android:textSize="12sp" />
</RelativeLayout>
Activity:
public class GameActivity extends Activity implements View.OnClickListener{
private ImageView mImageView;
private TextView mTextView;
private Button mButton;
private MyHandler mMyHandler = new MyHandler(this);
public int mWidth; //设备屏幕宽度
public int mHeight; //设备屏幕高度
private int mTotalCount; //已经出现的地鼠数量
private int mSuccessCount; //打中的地鼠数量
public static final int SHOW_CODE = 100001; //消息标识
public static final int MAX_COUNT = 10; //会出现的全部地鼠数量
public static final int RANDOM_TIME = 500; //地鼠出现的随机时间最大值
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
initView();
setTitle("打地鼠");
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
mWidth = dm.widthPixels;
mHeight = dm.heightPixels;
}
private void initView() {
mImageView = (ImageView) findViewById(R.id.image_view);
mTextView = (TextView) findViewById(R.id.text_view);
mButton = (Button) findViewById(R.id.button);
mImageView.setOnClickListener(this);
mButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
start();
break;
case R.id.image_view:
mImageView.setVisibility(View.GONE);
mSuccessCount++;
mTextView.setText("打到了" + mSuccessCount + "只,共" + MAX_COUNT + "只");
break;
}
}
//游戏初始化
private void start() {
mTextView.setText("开始游戏!");
mButton.setText("游戏中");
mButton.setEnabled(false);
next(0);
}
//设置下一只地鼠的出现
private void next(int delayTime) {
int positionX = new Random().nextInt(mWidth - 160);
int positionY = new Random().nextInt(mHeight - 320);
Message message = Message.obtain();
message.what = SHOW_CODE;
message.arg1 = positionX;
message.arg2 = positionY;
mMyHandler.sendMessageDelayed(message, delayTime);
mTotalCount++;
}
private static class MyHandler extends Handler {
private WeakReference<GameActivity>weakReference;
MyHandler(GameActivity activity) {
this.weakReference = new WeakReference<>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
GameActivity activity = weakReference.get();
switch (msg.what) {
case SHOW_CODE:
//游戏结束条件
if (activity.mTotalCount > MAX_COUNT) {
activity.clear();
Toast.makeText(activity, "地鼠打完了!", Toast.LENGTH_SHORT).show();
return;
}
//设置地鼠定时出现
int positionX = msg.arg1;
int positionY = msg.arg2;
activity.mImageView.setX(positionX);
activity.mImageView.setY(positionY);
activity.mImageView.setVisibility(View.VISIBLE);
int randomTime = new Random().nextInt(RANDOM_TIME) + RANDOM_TIME;
activity.next(randomTime);
break;
}
}
}
//重置游戏数据
private void clear() {
mTotalCount = 0;
mSuccessCount = 0;
mImageView.setVisibility(View.GONE);
mButton.setText("开始游戏");
mButton.setEnabled(true);
}
}
Handler案例-简易打地鼠游戏(延时处理消息)的更多相关文章
- Android 多线程 打地鼠游戏
前言:最近比较喜欢多线程了,看到了一些线程案例,这里总结一下打地鼠游戏的整个过程. 1.首先是主活动要加载的布局,我一般就喜欢早点把这个写上,这样就好在主活动中玩弄这些控件了.闲话不多说,一个Fram ...
- Android打地鼠游戏源码带道具购买的Android游戏开发
这是一款基于安卓的打地鼠游戏,界面简洁,有level模式打地鼠和无尽模式打地鼠两种游戏模式,并可以通过商店使用金币进行道具的购买,道具可以让你更容易通关:同时金币可以在游戏通关的时候获取.工程中有较为 ...
- iOS版打地鼠游戏源码
打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款 ...
- 无聊的人用JS实现了一个简单的打地鼠游戏
直入正题,用JS实现一个简单的打地鼠游戏 因为功能比较简单就直接裸奔JS了,先看看效果图,或者 在线玩玩 吧 如果点击颜色比较深的那个(俗称坏老鼠),将扣分50:如果点击颜色比较浅的那个(俗称好老鼠) ...
- 打地鼠游戏iOS源码项目
打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款 ...
- 团队项目——打地鼠游戏(SPEC)系统性能评估测试
1.SPEC测试的目标: 本轮测试的目的是测试打地鼠游戏的需求以及确保每个需求都能得到满足的方法.编写此需求说明书是为了使用户和开发人员对所开发的系统有一致的理解.通过阅读此说明书,开发人员可以了解当 ...
- 打地鼠游戏ios源码
打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款 ...
- Angular4 自制打地鼠游戏
前端工程师新手一枚,之前一直做些小设计,以及静态页面的编写工作.刚刚接触 Angular 没有多久,四个月前对于 Javascript也只是会写 alert 之流,现在进步算是很大,下面是自制的打地鼠 ...
- 打地鼠游戏iOS源代码项目
打地鼠游戏源代码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源代码.这也是一款高质量的打地鼠游戏源代码.能够拥有逐步上升的关卡的设置,大家能够在关卡时设置一些商业化的模式来盈利的,很完美的 ...
随机推荐
- shell 中最常使用的 FD (file descriptor)
在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是: 0 是一个文件描述符,表示标准输入(stdin)1 是一个文件描述符,表示标准输出(stdout) ...
- 【Android Developers Training】 31. 序言:共享简单数据
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- EventUtil.addHandler方法
EventUtil.addHandler: addHandler 方法,职责是分别视情况而定来使用DOM0级方法.DOM2级方法或IE方法来添加事件. 这个方法属于一个名字叫EventUtil的对 ...
- AutoMapper 6.x 扩展
简介 很多时候我们使用AutoMapper的时候,都需要进行一个配置才可以使用Mapper.Map<Source,Target>(entity);.如果不进行配置则会报错. 如果实体过多, ...
- Linux安装SVN服务器
“svn都快淘汰了” #安装subversion yum -y install subversion #创建svn仓库基础路径 mkdir /home/svn #创建svn仓库 svnadmin cr ...
- Kubernetes服务之“运行单实例的有状态服务”
目标 在你的环境中创建一个PV 创建一个MySQl的Deployment 在集群中以DNS名称的方式,将MySQL暴露给其他的pod 开始之前 你需要一个Kubernetes集群,一个可以连接到集群的 ...
- Mysql连接出错问题
1.java 提示:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 处理:导入mysql-connector-java-5.1.7-bi ...
- C/C++中const关键字的用法及其与宏定义的比较
1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 ; ; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用c ...
- IDEA使用01 创建java项目、创建web项目
注意:本教程使用的开发环境是:(专业版) 1 创建javaSE项目 1.1 file -> new -> project 注意:如果是第一次使用,就需要配置 project SDK , ...
- HTML中的行内元素和框元素详解
定义 传统的块级元素定义中只是说明了在文档流中形成了一个块,在前后加换行,这里有些笼统. 其实框元素是指宏观上的框元素,它包括3种类型:1.本身就是块级元素 2.dispaly被设置为类block 3 ...