欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android实现打地鼠游戏

程序员文章站 2023-10-31 15:13:16
今天上课老师用java实现了打地鼠游戏的界面和具体逻辑,那么我也尝试使用android语言实现其功能。首先是打地鼠游戏的玩法1.每隔1秒或者0.5秒地鼠会出现在九宫格中的任一位置2.点击界面,如果地鼠...

今天上课老师用java实现了打地鼠游戏的界面和具体逻辑,那么我也尝试使用android语言实现其功能。

首先是打地鼠游戏的玩法

1.每隔1秒或者0.5秒地鼠会出现在九宫格中的任一位置
2.点击界面,如果地鼠出现的位置与点击位置相同,则认为打中地鼠。否则游戏继续。
3.打中地鼠后,游戏立即停止。

先上两张效果图

android实现打地鼠游戏

android实现打地鼠游戏

布局实现

<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();
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。