下载连接:https://download.csdn.net/download/qq_35690700/10555369
1.运行截图
2.目录结构
3.代码示例
package com.hitmouse.controller;
import com.hitmouse.dao.DBHelper;
import com.hitmouse.service.MusicService;
import com.hitmouse.service.ScoreService;
import android.content.Context;
public class Controller {
Context context;
MusicService musicService;
ScoreService scoreService;
public Controller(Context context) {
this.context=context;
musicService = new MusicService(context);
scoreService = new ScoreService(context);
}
public void play() {
musicService.playBackground();
}
public void stop() {
musicService.stop();
}
public void pauseMusic() {
musicService.pause();
}
public void continuePlay() {
musicService.continuePlay();
}
public void close() {
musicService.close();
}
public void playSound(int resId) {
musicService.playSound(resId);
}
public boolean isPlay(){
return musicService.isNowPlay();
}
public void saveScore(String name,int score){
scoreService.saveScore(name, score);
}
public String[] searchScore(){
return scoreService.searchScore();
}
}
package com.hitmouse.ui;
import java.util.Random;
import com.example.hitmouse.R;
import com.hitmouse.controller.Controller;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class HitActivity extends Activity{
private ImageView mouse;
private TextView timer;
private TextView scoreView;
private LinearLayout layout;
private Handler handler;
private int score = 0;
private int recLen = 30;
Controller controller;
Boolean musicPlay=false;
Thread mouseThread;
Boolean flag=false;
public int[][] position = new int[][]{{240,130},{205,255},{190,390},
{535,125},{545,255},{540,410},
{850,130},{865,255},{895,400}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.hit_layout);
mouse = (ImageView) findViewById(R.id.mouse);
timer = (TextView) findViewById(R.id.timer);
scoreView =(TextView) findViewById(R.id.score);
layout = (LinearLayout) findViewById(R.id.layout);
controller = new Controller(HitActivity.this);
//布局监听
layout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
controller.playSound(R.raw.laugh);
}
});
//如果没有背景音乐则播放
if(!musicPlay){
controller.play();
musicPlay=true;
}
//难度时间,得分
Intent intent = getIntent();
final int diffity = Integer.parseInt(intent.getStringExtra("diffity"));
final int sum = Integer.parseInt(intent.getStringExtra("score"));
//地鼠线程
mouseThread = new Thread(new Runnable() {
@Override
public void run() {
int index = 0;
while (!Thread.currentThread().isInterrupted()) {
if(!controller.isPlay()){
controller.play();
}
index = new Random().nextInt(position.length);
//Message m = handler.obtainMessage();
Message m = Message.obtain();
m.arg1 = index;
m.what = 1;
if(flag==true){
m.what = 2;
}
handler.sendMessage(m);
try {
Thread.sleep(new Random().nextInt(300)+diffity);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
});
handler = new Handler(){
public void handleMessage(Message msg) {
int index = 0;
if(!flag)
mouse.setImageResource(R.drawable.mouse);
if(msg.what==1){
index = msg.arg1;
mouse.setX(position[index][0]);
mouse.setY(position[index][1]);
mouse.setVisibility(View.VISIBLE);
//设置mouse可编辑
mouse.setEnabled(true);
}
if(msg.what==2){
mouse.setImageResource(R.drawable.hit);
mouse.setVisibility(View.VISIBLE);
controller.playSound(R.raw.hit_sound);
controller.playSound(R.raw.dizzy);
flag=false;
}
super.handleMessage(msg);
}
};
mouseThread.start();
//时间线程
new Thread(new MyThread()).start();
//图片切换线程
// new Thread(new Runnable() {
//
// @Override
// public void run() {
// while(true){
// if(flag==true)
// { mouse.setImageResource(R.drawable.hit);
// try {
// Thread.sleep(200);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }
// }
//
// }
// }).start();
//监听
// if(mouseTouch==false){
// mouse.setEnabled(false);
// }
// else{
// mouse.setEnabled(true);
// }
mouse.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
// TODO Auto-generated method stub
//arg0.setVisibility(View.INVISIBLE);
// mouseTouch=false;
mouse.setEnabled(false);
flag=true;
score+=sum;
scoreView.setText(score+"");
//controller.pauseMusic();
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// controller.playSound(R.raw.miao);
//controller.playSound(R.raw.hit_sound);
//controller.playSound(R.raw.laugh);
return true;
}
});
}
final Handler timerHandler = new Handler(){
public void handleMessage(Message msg){
int index = 0;
switch (msg.what) {
case 1:
recLen--;
timer.setText("" + recLen);
if(recLen==0){
Intent intent = new Intent(HitActivity.this,GameOver.class);
intent.putExtra("score", score+"");
startActivity(intent);
controller.stop();
HitActivity.this.finish();
}
break;
default:
}
super.handleMessage(msg);
}
};
public class MyThread implements Runnable{
@Override
public void run(){
while(true){
try{
Thread.sleep(1000);
Message message = new Message();
message.what = 1;
timerHandler.sendMessage(message);
}catch (Exception e) {
}
}
}
}
@Override
protected void onPause(){
if(controller.isPlay()){
controller.pauseMusic();
}
super.onPause();
}
@Override
protected void onDestroy() {
if(controller.isPlay()){
controller.pauseMusic();
}
super.onDestroy();
}
}
github源码:https://gitee.com/keysacun/HitMouse