1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > android简单小游戏——打地鼠

android简单小游戏——打地鼠

时间:2021-02-28 02:03:43

相关推荐

android简单小游戏——打地鼠

这些天研究了一下View中一些函数的使用,以及一些基本游戏功能的实现,做了一款打地鼠的小游戏,带有笔者写时的丰富注释,初学者可以下来玩玩,学习学习,大神勿喷。。。小弟也是在边学别人的代码边写的,虽然有些抄袭的嫌疑,但是还是尽量独立完成的,有自己的思考过程。

下面直接上部分代码,要完整源码的话可以去我的资源中下载,现在开始资源无积分开放。

package com.example.pingping_game2;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Random;import com.example.pingping_game2.gameargs.Epicture;import com.example.pingping_game2.gameargs.GameAgrs;import com.example.pingping_game2.gametools.MainMapManager;import com.example.pingping_game2.musicTools.VolumsPlayer;import android.R.integer;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.drm.DrmStore.Action;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.Toast;public class GameView extends View {public GameView(Context context) {super(context);// TODO Auto-generated constructor stubGameView.this.post(UpdatePaint); // 刷新画面线程GameView.this.postDelayed(setMouse, 1000); // 增加地鼠的线程,1s后执行}int start_X = 35; // 开始画方块的X坐标int start_Y = 56; // 开始画方块的Y坐标private Random random = new Random(); // 定义一个随机函数// 初始化每块方块的信息private List<Epicture> mainList = new ArrayList<Epicture>(GameAgrs.Total_Count);{for (int i = 0; i < GameAgrs.Total_Count; i++) {mainList.add(new Epicture());}}Runnable UpdatePaint = new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubGameView.this.invalidate();GameView.this.postDelayed(this, 100); // 每100ms刷新一次}};Runnable setMouse = new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubLinkedList<Epicture> tempList = new LinkedList<Epicture>();for (int i = 0; i < mainList.size(); i++) {Epicture epicture = mainList.get(i);if (epicture.GetCurrenty() == GameAgrs.Hole_Empty) {tempList.add(epicture);}}int tempSize = tempList.size();if (tempSize == 1) {tempList.poll().ToShow();} else if (tempSize > 1) {// 随机出一个或者两个地鼠for (int i = 0; i < random.nextInt(2) + 1; i++) {tempList.remove(random.nextInt(tempList.size())).ToShow();}GameView.this.invalidate();}GameView.this.postDelayed(this, 800 - GameAgrs.Grade / 20);}};private void DrawMessage(Canvas canvas) {Paint paint = new Paint();paint.setColor(Color.RED);paint.setTextSize(22);canvas.drawText("HP: " + GameAgrs.HP, 20, 20, paint);canvas.drawText("\nGrade: " + GameAgrs.Grade, 20, 50, paint);}// 游戏结束处理private void DoGameOver() {AlertDialog.Builder builder = new AlertDialog.Builder(getContext());builder.setTitle("游戏结束");builder.setMessage("得分:"+GameAgrs.Grade+",是否重新开始游戏?");builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubGameAgrs.Reset(); //用户信息重置GameActivity gameActivity = (GameActivity) getContext();gameActivity.reSetGame(); // 按确定则重新开始加载}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubGameAgrs.Reset(); //用户信息重置GameActivity gameActivity = (GameActivity) getContext();gameActivity.finish();}});builder.setCancelable(false);AlertDialog dialog = builder.create();dialog.show();}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);if (GameAgrs.HP <= 0) {getHandler().removeCallbacks(UpdatePaint);getHandler().removeCallbacks(setMouse);DoGameOver();return;}canvas.drawColor(Color.WHITE); // 将背景设置为白色DrawMessage(canvas); // 显示用户信息for (int i = 0; i < mainList.size(); i++) {Epicture epicture = mainList.get(i);int x = i % GameAgrs.Colums_Count; // 获得所在列int y = i / GameAgrs.Colums_Count; // 获得所在行canvas.drawBitmap(MainMapManager.getBitmap(epicture.GetCurrenty()),start_X + x * GameAgrs.EpicSize, start_Y + y* GameAgrs.EpicSize, null);epicture.ToNext(); // 进入下一个状态}}// 触摸事件@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubif (event.getAction() != MotionEvent.ACTION_DOWN) {return true;}float x = event.getX();float y = event.getY();int X = (int) ((x - start_X) / GameAgrs.EpicSize);int Y = (int) ((y - start_Y) / GameAgrs.EpicSize);if (X < 0 || Y < 0 || X >= 3 || Y >= 4) { // 如果打击不在方块范围内则不响应return true;}int num = Y * GameAgrs.Colums_Count + X;Epicture epicture = mainList.get(num);epicture.BeHited();return true;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。