用Android Studio详细实现打地鼠
时间: 2023-11-02 20:10:29 浏览: 284
基于Android平台的打地鼠游戏设计与实现.pdf
5星 · 资源好评率100%
打地鼠是一种经典的游戏,可以帮助我们训练反应速度和手眼协调能力。在Android Studio中实现打地鼠游戏,可以通过以下步骤:
1. 创建一个新的Android工程,并在MainActivity布局中添加一个ImageView,用于显示地鼠图片。同时,添加一个Button,用于开始游戏。
2. 在MainActivity中定义一个计时器和一个Handler,用于控制地鼠图片的显示和隐藏。在计时器中,可以设置一个随机数,用于控制地鼠出现的时间和位置。当地鼠出现时,将ImageView的可见性设置为可见,并在一定时间后将其隐藏。
3. 在Button的点击事件中启动计时器,并设置一个游戏结束的条件,比如在一定时间内打中地鼠的数量达到一定值,或者在一定时间内未能打中足够数量的地鼠。
4. 在ImageView的点击事件中判断当前ImageView是否可见,如果可见,则增加得分并隐藏ImageView。
5. 最后,在游戏结束时显示得分,并提供重新开始游戏的选项。
以下是一份示例代码,实现了一个简单的打地鼠游戏:
MainActivity.java
```java
public class MainActivity extends AppCompatActivity {
private Button startButton;
private ImageView moleImageView;
private TextView scoreTextView;
private int score = 0;
private int maxScore = 10;
private int gameTime = 30;
private boolean isGameOver = false;
private Timer timer;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startButton = findViewById(R.id.startButton);
moleImageView = findViewById(R.id.moleImageView);
scoreTextView = findViewById(R.id.scoreTextView);
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startGame();
}
});
moleImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (moleImageView.getVisibility() == View.VISIBLE) {
score++;
scoreTextView.setText("Score: " + score);
moleImageView.setVisibility(View.INVISIBLE);
}
}
});
}
private void startGame() {
score = 0;
scoreTextView.setText("Score: " + score);
isGameOver = false;
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
if (!isGameOver) {
showMole();
} else {
timer.cancel();
showGameOverDialog();
}
}
});
}
}, 0, 1000);
new CountDownTimer(gameTime * 1000, 1000) {
public void onTick(long millisUntilFinished) {
scoreTextView.setText("Time: " + millisUntilFinished / 1000 + " Score: " + score);
}
public void onFinish() {
isGameOver = true;
}
}.start();
}
private void showMole() {
Random r = new Random();
int x = r.nextInt(500);
int y = r.nextInt(500);
moleImageView.setX(x);
moleImageView.setY(y);
moleImageView.setVisibility(View.VISIBLE);
handler.postDelayed(new Runnable() {
@Override
public void run() {
moleImageView.setVisibility(View.INVISIBLE);
}
}, 1000);
}
private void showGameOverDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Game Over");
builder.setMessage("Your score is " + score);
builder.setPositiveButton("Restart", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startGame();
}
});
builder.setNegativeButton("Quit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.setCancelable(false);
builder.show();
}
}
```
activity_main.xml
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/startButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Game"
android:layout_centerInParent="true"/>
<ImageView
android:id="@+id/moleImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/mole"
android:visibility="invisible"/>
<TextView
android:id="@+id/scoreTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Score: 0"
android:textAlignment="center"
android:textSize="20sp"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
```
其中,mole.png是地鼠图片,可以放在drawable文件夹中。在AndroidManifest.xml中添加以下权限,用于控制计时器:
```xml
<uses-permission android:name="android.permission.WAKE_LOCK" />
```
阅读全文