android實(shí)現(xiàn)打地鼠游戲
今天上課老師用Java實(shí)現(xiàn)了打地鼠游戲的界面和具體邏輯,那么我也嘗試使用Android語言實(shí)現(xiàn)其功能。
首先是打地鼠游戲的玩法
1.每隔1秒或者0.5秒地鼠會出現(xiàn)在九宮格中的任一位置
2.點(diǎn)擊界面,如果地鼠出現(xiàn)的位置與點(diǎn)擊位置相同,則認(rèn)為打中地鼠。否則游戲繼續(xù)。
3.打中地鼠后,游戲立即停止。
先上兩張效果圖
布局實(shí)現(xiàn)
<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>
邏輯代碼
需要實(shí)現(xiàn)每隔1秒繪制一次界面,且得確定更新地鼠的位置(這里我用的handler來發(fā)送循環(huán)消息實(shí)現(xiàn)的)
ArrayList<TextView>texts;//用來存放九個(gè)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; } });
這里單獨(dú)寫一個(gè)TextView的點(diǎn)擊事件(一共九個(gè)),這里需要注意的是,我給每個(gè)textview都賦給了一個(gè)值a,從0-8,當(dāng)點(diǎn)擊的textview值 a=(地鼠出現(xiàn)的位置)時(shí),我們就可以認(rèn)為打中了地鼠。
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(); } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解析android中的幫助、about、關(guān)于作者、HELP等提示頁面
本篇文章是對android中的幫助、about、關(guān)于作者、HELP等提示頁面進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Android開發(fā)學(xué)習(xí)實(shí)現(xiàn)簡單計(jì)算器
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)一個(gè)簡單計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04Flutter應(yīng)用程序?qū)崿F(xiàn)隱私屏幕示例解析
這篇文章主要為大家介紹了Flutter應(yīng)用程序?qū)崿F(xiàn)隱私屏幕示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09Android將應(yīng)用調(diào)試log信息保存在SD卡的方法
Android將應(yīng)用調(diào)試log信息保存在SD卡的方法大家都知道嗎,下面腳本之家小編給大家分享Android將應(yīng)用調(diào)試log信息保存在SD卡的方法,感興趣的朋友參考下2016-04-04Android NDK中socket的用法以及注意事項(xiàng)分析
本篇文章是對Android NDK中socket的用法以及注意事項(xiàng)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Android應(yīng)用隱私合規(guī)檢測實(shí)現(xiàn)方案詳解
這篇文章主要介紹了Android應(yīng)用隱私合規(guī)檢測實(shí)現(xiàn)方案,我們需要做的就是提前檢測好自己的應(yīng)用是否存在隱私合規(guī)問題,及時(shí)整改過來,下面提供Xposed Hook思路去檢測隱私合規(guī)問題,建議有Xposed基礎(chǔ)的童鞋閱讀,需要的朋友可以參考下2022-07-07Cocos2d-x入門教程(詳細(xì)的實(shí)例和講解)
這篇文章主要介紹了Cocos2d-x入門教程,包括詳細(xì)的實(shí)例、講解以及實(shí)現(xiàn)過程,需要的朋友可以參考下2014-04-04