package com.pg;
import java.util.Random;
import java.util.Vector;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
/**
*
* @author Himi
*
*/
public class MySurfaceView extends SurfaceView implements Callback, Runnable {
private SurfaceHolder sfh;
private Paint paint;
private Thread th;
private boolean flag;
private Canvas canvas;
public static int screenW, screenH;
//定义游戏状态常量
public static final int GAME_MENU = 0;//游戏菜单
public static final int GAMEING = 1;//游戏中
public static final int GAME_WIN = 2;//游戏胜利
public static final int GAME_LOST = 3;//游戏失败
public static final int GAME_PAUSE = -1;//游戏菜单
//当前游戏状态(默认初始在游戏菜单界面)
public static int gameState = GAME_MENU;
//声明一个Resources实例便于加载图片
private Resources res = this.getResources();
//声明游戏需要用到的图片资源(图片声明)
private Bitmap bmpBackGround;//游戏背景
private Bitmap bmpBoom;//爆炸效果
private Bitmap bmpBoosBoom;//Boos爆炸效果
private Bitmap bmpButton;//游戏开始按钮
private Bitmap bmpButtonPress;//游戏开始按钮被点击
private Bitmap bmpEnemyDuck;//怪物鸭子
private Bitmap bmpEnemyFly;//怪物苍蝇
private Bitmap bmpEnemyBoos;//怪物猪头Boos
private Bitmap bmpGameWin;//游戏胜利背景
private Bitmap bmpGameLost;//游戏失败背景
private Bitmap bmpPlayer;//游戏主角飞机
private Bitmap bmpPlayerHp;//主角飞机血量
private Bitmap bmpMenu;//菜单背景
public static Bitmap bmpBullet;//子弹
public static Bitmap bmpEnemyBullet;//敌机子弹
public static Bitmap bmpBossBullet;//Boss子弹
//声明一个菜单对象
private GameMenu gameMenu;
//声明一个滚动游戏背景对象
private GameBg backGround;
//声明主角对象
private Player player;
//声明一个敌机容器
private Vector<Enemy> vcEnemy;
//每次生成敌机的时间(毫秒)
private int createEnemyTime = 50;
private int count;//计数器
//敌人数组:1和2表示敌机的种类,-1表示Boss
//二维数组的每一维都是一组怪物
private int enemyArray[][] = { { 1, 2 }, { 1, 1 }, { 1, 3, 1, 2 }, { 1, 2 }, { 2, 3 }, { 3, 1, 3 }, { 2, 2 }, { 1, 2 }, { 2, 2 }, { 1, 3, 1, 1 }, { 2, 1 },
{ 1, 3 }, { 2, 1 }, { -1 } };
//当前取出一维数组的下标
private int enemyArrayIndex;
//是否出现Boss标识位
private boolean isBoss;
//随机库,为创建的敌机赋予随即坐标
private Random random;
//敌机子弹容器
private Vector<Bullet> vcBullet;
//添加子弹的计数器
private int countEnemyBullet;
//主角子弹容器
private Vector<Bullet> vcBulletPlayer;
//添加子弹的计数器
private int countPlayerBullet;
//爆炸效果容器
private Vector<Boom> vcBoom;
//声明Boss
private Boss boss;
//Boss的子弹容器
public static Vector<Bullet> vcBulletBoss;
/**
* SurfaceView初始化函数
*/
public MySurfaceView(Context context) {
super(context);
sfh = this.getHolder();
sfh.addCallback(this);
paint = new Paint();
paint.setColor(Color.WHITE);
paint.setAntiAlias(true);
setFocusable(true);
setFocusableInTouchMode(true);
//设置背景常亮
this.setKeepScreenOn(true);
}
/**
* SurfaceView视图创建,响应此函数
*/
@Override
public void surfaceCreated(SurfaceHolder holder) {
screenW = this.getWidth();
screenH = this.getHeight();
initGame();
flag = true;
//实例线程
th = new Thread(this);
//启动线程
th.start();
}
/*
* 自定义的游戏初始化函数
*/
private void initGame() {
//放置游戏切入后台重新进入游戏时,游戏被重置!
//当游戏状态处于菜单时,才会重置游戏
if (gameState == GAME_MENU) {
//加载游戏资源
bmpBackGround = BitmapFactory.decodeResource(res, R.drawable.background);
bmpBoom = BitmapFactory.decodeResource(res, R.drawable.boom);
bmpBoosBoom = BitmapFactory.decodeResource(res, R.drawable.boos_boom);
bmpButton = BitmapFactory.decodeResource(res, R.drawable.button);
bmpButtonPress = BitmapFactory.decodeResource(res, R.drawable.button_press);
bmpEnemyDuck = BitmapFactory.decodeResource(res, R.drawable.enemy_duck);
bmpEnemyFly = BitmapFactory.decodeResource(res, R.drawable.enemy_fly);
bmpEnemyBoos = BitmapFactory.decodeResource(res, R.drawable.enemy_pig);
bmpGameWin = BitmapFactory.decodeResource(res, R.drawable.gamewin);
bmpGameLost = BitmapFactory.decodeResource(res, R.drawable.gamelost);
bmpPlayer = BitmapFactory.decodeResource(res, R.drawable.player);
bmpPlayerHp = BitmapFactory.decodeResource(res, R.drawable.hp);
bmpMenu = BitmapFactory.decodeResource(res, R.drawable.menu);
bmpBullet = BitmapFactory.decodeResource(res, R.drawable.bullet);
bmpEnemyBullet = BitmapFactory.decodeResource(res, R.drawable.bullet_enemy);
bmpBossBullet = BitmapFactory.decodeResource(res, R.drawable.boosbullet);
//爆炸效果容器实例
vcBoom = new Vector<Boom>();
//敌机子弹容器实例
vcBullet = new Vector<Bullet>();
//主角子弹容器实例
vcBulletPlayer = new Vector<Bullet>();
//菜单类实例
gameMenu = new GameMenu(bmpMenu, bmpButton, bmpButtonPress);
//实例游戏背景
backGround = new GameBg(bmpBackGround);
//实例主角
player = new Player(bmpPlayer, bmpPlayerHp);
//实例敌机容器
vcEnemy = new Vector<Enemy>();
//实例随机库
random = new Random();
//---Boss相关
//实例boss对象
boss = new Boss(bmpEnemyBoos);
//实例Boss子弹容器
vcBulletBoss = new Vector<Bullet>();
}
}
/**
* 游戏绘图
*/
public void myDraw() {
try {
canvas = sfh.lockCanvas();
if (canvas != null) {
canvas.drawColor(Color.WHITE);
//绘图函数根据游戏状态不同进行不同绘制
switch (gameState) {
case GAME_MENU:
//菜单的绘图函数
gameMenu.draw(canvas, paint);
break;
case GAMEING:
//游戏背景
backGround.draw(canvas, paint);
//主角绘图函数
player.draw(canvas, paint);
if (isBoss == false) {
//敌机绘制
for (int i = 0; i < vcEnemy.size(); i++) {
vcEnemy.elementAt(i).draw(canvas, paint);
}
//敌机子弹绘制
for (int i = 0; i < vcBullet.size(); i++) {
vcBullet.elementAt(i).draw(canvas, paint);
}
} else {
//Boos的绘制
boss.draw(canvas, paint);
//Boss子弹逻辑
for (int i = 0; i < vcBulletBoss.size(); i++) {
vcBulletBoss.elementAt(i).draw(canvas, paint);
}
}
//处理主角子弹绘制
for (int i = 0; i < vcBulletPlayer.size(); i++) {
vcBulletPlayer.elementAt(i).draw(canvas, paint);
}
//爆炸效果绘制
for (int i = 0; i < vcBoom.size(); i++) {
vcBoom.elementAt(i).draw(canvas, paint);
}
break;
case GAME_PAUSE:
break;
case GAME_WIN:
canvas.drawBitmap(bmpGameWin, 0, 0, paint);
break;
case GAME_LOST:
canvas.drawBitmap(bmpGameLost, 0, 0, paint);
break;
}
}
} catch (Exception e) {
// TODO: handle exception
} finally {
if (canvas != null)
sfh.unlockCanvasAndPost(canvas);
}
}
/**
* 触屏事件监听
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
//触屏监听事件函数根据游戏状态不同进行不同监听
switch (gameState
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Android学习不可不看的几个例子(包括游戏源码) (1723个子文件)
resources.ap_ 1.29MB
resources.ap_ 664KB
resources.ap_ 640KB
resources.ap_ 270KB
resources.ap_ 142KB
resources.ap_ 100KB
resources.ap_ 51KB
resources.ap_ 31KB
resources.ap_ 23KB
resources.ap_ 21KB
resources.ap_ 19KB
resources.ap_ 19KB
resources.ap_ 15KB
resources.ap_ 13KB
resources.ap_ 12KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
MediaPlayerProject.apk 1.29MB
BallGame.apk 749KB
PlaneGame.apk 652KB
TabProject.apk 274KB
MainActivity.apk 226KB
BuildHouse.apk 226KB
ClipCanvasProject.apk 104KB
TraverseMyBody.apk 100KB
CreateMouseJoint.apk 92KB
CreatePulleyJoint.apk 92KB
CreateGearJoint.apk 92KB
CreatePrismaticJoint.apk 92KB
AabbGetBodies.apk 92KB
CreateDistanceJoint.apk 92KB
CreatePrismaticJoint.apk 92KB
CreateRevoluteJoint.apk 92KB
CreateMyPolygon.apk 92KB
BodyCollision.apk 92KB
BodyForce.apk 92KB
CreateCircle.apk 92KB
TraverseBody.apk 92KB
CreatePolygon.apk 91KB
Box2dWorld.apk 91KB
FrameMovie.apk 56KB
SoundPoolProject.apk 35KB
PlayerProject.apk 28KB
ClipBitmapMovie.apk 25KB
ImageButtonProject.apk 23KB
MainActivity.apk 21KB
BitmapMovie.apk 20KB
NinePatchProject.apk 18KB
StreamProject.apk 16KB
SensorProject.apk 16KB
ListViewProject_2.apk 16KB
MoreRectCollision.apk 16KB
GestureProject.apk 15KB
共 1723 条
- 1
- 2
- 3
- 4
- 5
- 6
- 18
白天笑笑
- 粉丝: 16
- 资源: 46
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于c++的个人收支管理系统设计
- docker一键安装包
- Screenshot_20240430_144340_com.ss.android.ugc.live.jpg
- 回到山沟沟.mp3
- 基于matlab实现自适应波束形成RLS及LMS算法仿真源程序1.rar
- 基于matlab实现自己编写的基于卡尔曼滤波的利用加速度传感器的计步器,测试数据是传感器放在腰部和手臂 .rar
- 基于matlab实现阵列信号处理,波束形成.rar
- 111111111111111111
- 基于matlab实现计步器编程;对当前的计步器装置的数值算法模拟 .rar
- Mdb学习查看PW;access;mdb;pw;password;patch
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页