android实现打地鼠游戏
作者:疯狂的鲨鱼 发布时间:2023-09-25 08:45:59
标签:android,打地鼠
今天上课老师用Java实现了打地鼠游戏的界面和具体逻辑,那么我也尝试使用Android语言实现其功能。
首先是打地鼠游戏的玩法
1.每隔1秒或者0.5秒地鼠会出现在九宫格中的任一位置
2.点击界面,如果地鼠出现的位置与点击位置相同,则认为打中地鼠。否则游戏继续。
3.打中地鼠后,游戏立即停止。
先上两张效果图
布局实现
<LinearLayout 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:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="start"
android:text="开始" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="end"
android:text="暂停" />
</LinearLayout>
<TableLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
<TableRow android:layout_weight="1" >
<TextView
android:id="@+id/text11"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="#d2b48c"
android:gravity="center" />
<TextView
android:id="@+id/text12"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="#d2b48c"
android:gravity="center" />
<TextView
android:id="@+id/text13"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="#d2b48c"
android:gravity="center" />
</TableRow>
<TableRow android:layout_weight="1" >
<TextView
android:id="@+id/text21"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="#d2b48c"
android:gravity="center" />
<TextView
android:id="@+id/text22"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="#d2b48c"
android:gravity="center" />
<TextView
android:id="@+id/text23"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="#d2b48c"
android:gravity="center" />
</TableRow>
<TableRow android:layout_weight="1" >
<TextView
android:id="@+id/text31"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="#d2b48c"
android:gravity="center" />
<TextView
android:id="@+id/text32"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="#d2b48c"
android:gravity="center" />
<TextView
android:id="@+id/text33"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="3dp"
android:layout_weight="1"
android:background="#d2b48c"
android:gravity="center" />
</TableRow>
</TableLayout>
</LinearLayout>
逻辑代码
需要实现每隔1秒绘制一次界面,且得确定更新地鼠的位置(这里我用的handler来发送循环消息实现的)
ArrayList<TextView>texts;//用来存放九个TextView
Handler handler = new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
number = (int) (Math.random() * 8);
System.out.println(number);
for (int i = 0; i < arrays.length; i++) {
if (i==number) {
texts.get(i).setText("地鼠");
}else {
texts.get(i).setText("");
}
}
handler.sendEmptyMessageDelayed(0, 500);
return false;
}
});
这里单独写一个TextView的点击事件(一共九个),这里需要注意的是,我给每个textview都赋给了一个值a,从0-8,当点击的textview值 a=(地鼠出现的位置)时,我们就可以认为打中了地鼠。
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.text11:
if (number==0) {
Toast.makeText(this, "打中地鼠了!。。。", 1).show();
handler.removeMessages(0);
}
break;
}
}
最后贴上全部代码。
package com.example.dadishu;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
private int number;
private TextView text11;
private TextView text12;
private TextView text13;
private TextView text21;
private TextView text22;
private TextView text23;
private TextView text31;
private TextView text32;
private TextView text33;
private int[] arrays = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
ArrayList<TextView> texts;
Handler handler = new Handler(new Callback() {
@Override
public boolean handleMessage(Message msg) {
number = (int) (Math.random() * 8);
System.out.println(number);
for (int i = 0; i < arrays.length; i++) {
if (i == number) {
texts.get(i).setText("地鼠");
} else {
texts.get(i).setText("");
}
}
handler.sendEmptyMessageDelayed(0, 500);
return false;
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
text11 = (TextView) findViewById(R.id.text11);
text12 = (TextView) findViewById(R.id.text12);
text13 = (TextView) findViewById(R.id.text13);
text21 = (TextView) findViewById(R.id.text21);
text22 = (TextView) findViewById(R.id.text22);
text23 = (TextView) findViewById(R.id.text23);
text31 = (TextView) findViewById(R.id.text31);
text32 = (TextView) findViewById(R.id.text32);
text33 = (TextView) findViewById(R.id.text33);
texts = new ArrayList<TextView>();
for (int i = 0; i < arrays.length; i++) {
texts.add(text11);
texts.add(text12);
texts.add(text13);
texts.add(text21);
texts.add(text22);
texts.add(text23);
texts.add(text31);
texts.add(text32);
texts.add(text33);
}
for (TextView text : texts) {
text.setOnClickListener(this);
}
}
public void start(View v) {
TimerTask task = new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(0);
}
};
Timer timer = new Timer();
timer.schedule(task, 500);
}
public void end(View v) {
handler.removeMessages(0);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.text11:
if (number == 0) {
Toast.makeText(this, "打中地鼠了!。。。", 1).show();
handler.removeMessages(0);
}
break;
case R.id.text12:
if (number == 1) {
Toast.makeText(this, "打中地鼠了!。。。", 1).show();
handler.removeMessages(0);
}
break;
case R.id.text13:
if (number == 2) {
Toast.makeText(this, "打中地鼠了!。。。", 1).show();
handler.removeMessages(0);
}
break;
case R.id.text21:
if (number == 3) {
Toast.makeText(this, "打中地鼠了!。。。", 1).show();
handler.removeMessages(0);
}
break;
case R.id.text22:
if (number == 4) {
Toast.makeText(this, "打中地鼠了!。。。", 1).show();
handler.removeMessages(0);
}
break;
case R.id.text23:
if (number == 5) {
Toast.makeText(this, "打中地鼠了!。。。", 1).show();
handler.removeMessages(0);
}
break;
case R.id.text31:
if (number == 6) {
Toast.makeText(this, "打中地鼠了!。。。", 1).show();
handler.removeMessages(0);
}
break;
case R.id.text32:
if (number == 7) {
Toast.makeText(this, "打中地鼠了!。。。", 1).show();
handler.removeMessages(0);
}
break;
case R.id.text33:
if (number == 8) {
Toast.makeText(this, "打中地鼠了!。。。", 1).show();
handler.removeMessages(0);
}
break;
default:
break;
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
player.release();
}
}
来源:https://blog.csdn.net/liuchao9876543210/article/details/52675919


猜你喜欢
- 底座的状态跟充电状态类似,很多底座提供充电功能(座充).底座状态同样使用sticky Intent广播。可以查询设备是否插入底座,哪种底座。
- 本文实例讲述了java之swing表格实现方法。分享给大家供大家参考。具体如下:import java.awt.*;import java.
- 设置session有效时间的三种方式session的默认有效时间是30分钟(min)方法一使用java函数:session.setMaxIn
- 一、数组的基本用法1.什么是数组数组:存储一组相同数据类型的数据的集合。2.定义数组 int[] :int类型数组 do
- 前言相信大家在java中用到的最多的时间类莫过于 java.util.Date了,由于Date类中将getYear() , getMonth
- 现在提起Android开发工具,大多人第一个想到的肯定是Android Studio。谷歌专门为Android开发者推出的这款IDE,以其强
- 1、文件上传1.1 后端部分1.1.1 引入Apache Commons FIleUpload组件依赖<!--文件上传与下载相关的依赖
- 前言《JAVA打砖块》游戏是自制的游戏。玩家操作一根萤幕上水平的“棒子”,让一颗不断弹来弹去的&am
- Unity Shader学习:玻璃材质,供大家参考。主要是通过反射和折射来达到透明的效果,用菲涅尔来混叠。shader部分:Shader &
- 本文实例讲述了Android编程之菜单实现方法。分享给大家供大家参考,具体如下:菜单是许多应用程序不可或缺的一部分,Android中更是如此
- 我们编程的过程中大部分使用了很出色的ORM框架,例如:MyBatis,Hibernate,SpringJDBC,但是这些都离不开数据驱动JD
- 1. 消息驱动概述1.1 是什么在实际应用中有很多消息中间件,比如现在企业里常用的有ActiveMQ、RabbitMQ、RocketMQ、K
- 本文实例讲述了Hibernate批量处理海量数据的方法。分享给大家供大家参考,具体如下:Hibernate批量处理海量其实从性能上考虑,它是
- 前言在有些业务场景中,系统对于响应时间有一定的要求,而一个方法里面同步执行的业务逻辑太多势必会影响响应速度,带来不好的用户体验。比如登录时记
- 有项目需求需要绘制多个圆圈,并且使用连续的数字对其排列起来,也就是好多排的圆圈。首先看一下效果图:一排设置为8个,一共有53个的:一排设值为
- 本文实例讲述了Winform中GridView分组排序功能实现方法。分享给大家供大家参考。具体实现方法如下:一、问题:由于客户最近要扩充公司
- 目录目标为什么操作步骤工程截图运行效果完整源代码目标在SpringBoot中集成内存数据库H2.为什么像H2、hsqldb、derby、sq
- 前言最近都是Mybatis-Plus系列的小白文,算是对工作中最常使用的框架的细节扫盲。有在学习Mybatis-Plus使用的,可以关注一波
- 可空类型用途主要是从数据库读取数据有可能为空,而不是插入使用,插入数据都要进行验证,如果要插入数据库的null,则使用DBNull.valu
- Java 8中引入了CompletableFuture类,它是一种方便的异步编程工具,可以处理各种异步操作,如网络请求、文件IO和数据库操作