实例介绍
【实例简介】
【实例截图】
【核心代码】
package com.example.planewar; import java.util.ArrayList; import java.util.HashMap; import java.util.Random; import com.example.planewar.ProcessView.TutorialThread; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.SoundPool; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.Surface; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.SurfaceHolder.Callback; public class GameView extends SurfaceView implements SurfaceHolder.Callback, Runnable { int shun=0; boolean zhakai=false; private int jiguang=10; private long second=-1200; private long third=-600; private long fourth=0; SurfaceHolder sh; private PanlewarActivity activity; private int width; private int height; private boolean flag = true; Bitmap background4, player; private Bitmap explosion; public float tm1,tm2; private Canvas canvas; private ArrayList<Explosion> explosions = new ArrayList<Explosion>(); private ArrayList<Bullet> ebullets = new ArrayList<Bullet>(); float x, y; int height1 = 0; Enamy enemy; int[] explodesID = new int[]{//爆炸的所有帧 R.drawable.explode1, R.drawable.explode2, R.drawable.explode3, R.drawable.explode4, R.drawable.explode5, R.drawable.explode6, R.drawable.explode7, R.drawable.explode8, R.drawable.explode9, R.drawable.explode10, R.drawable.explode11, R.drawable.explode12, }; Bitmap[] explodes = new Bitmap[explodesID.length];//爆炸的数组 Bitmap jiguangpt; SoundPool soundPool;// 声音 HashMap<Integer, Integer> soundPoolMap; MediaPlayer mMediaPlayer; ArrayList<Enamy> enemys = new ArrayList<Enamy>(); int height2; int width1; int width2; int shoot, time; private Paint paint = new Paint(); Paint paint2; private float xu; private float yu; private float xd; private float yd; private Bullet bullet; private ArrayList<Bullet> bullets = new ArrayList<Bullet>(); private int bomb = 10; private int ilife = 3; private int score; Bitmap bulle; Bitmap bull; Bitmap ene; Bitmap xuetiao; boolean isSound; boolean jikai=false; public GameView(PanlewarActivity activity, int width, int height, int bomb, int ilife) { super(activity); sh = this.getHolder(); sh.addCallback(this); initSounds(); this.isSound = activity.isSound; mMediaPlayer = MediaPlayer.create(activity, R.raw.gamestart); mMediaPlayer.setLooping(true); ene = BitmapFactory.decodeResource(GameView.this.getResources(), R.drawable.enemy); bulle = BitmapFactory.decodeResource(this.getResources(), R.drawable.bullet2); background4 = BitmapFactory.decodeResource(this.getResources(), R.drawable.background); bull = BitmapFactory.decodeResource(this.getResources(), R.drawable.bullet); player = BitmapFactory.decodeResource(this.getResources(), R.drawable.myplane); jiguangpt=BitmapFactory.decodeResource(this.getResources(),R.drawable.jiguang); xuetiao=BitmapFactory.decodeResource(this.getResources(),R.drawable.xuetiao); // explosion = BitmapFactory.decodeResource(this.getResources(), // R.drawable.explosion); for(int i=0; i<explodes.length; i ){//初始化爆炸图片 explodes[i] = BitmapFactory.decodeResource(getResources(), explodesID[i]); } this.activity = activity; this.width = width; this.height = height; this.height2 = -height; this.width1=width/2-jiguangpt.getWidth()/2; this.width2=width/2-jiguangpt.getWidth()/2; this.bomb = bomb; this.ilife = ilife; this.x = width / 2 - player.getWidth() / 2; this.y = height / 2; this.setFocusable(true); this.score = 0; if (isSound) { mMediaPlayer.start(); } // TODO Auto-generated constructor stub } public void onDraw() { if (flag) { canvas = sh.lockCanvas(); Rect rect1 = new Rect(0, 0, background4.getWidth(), background4.getHeight()); Rect rect2 = new Rect(0, height1, width, height 10 height1); Rect rect3 = new Rect(0, height2, width, height 10 height2); canvas.drawBitmap(background4, rect1, rect2, null); canvas.drawBitmap(background4, rect1, rect3, null); height1 = height / 100; height2 = height / 100; if (height1 >= height) { height1 = -height; } if (height2 >= height) { height2 = -height; } // 绘制子弹 // 绘制敌人战机 添加子弹 for (int j = 0; j < enemys.size(); j ) { Enamy ene = enemys.get(j); if (shoot % 40 == 0) { Bullet bull = new Bullet(ene.x 9, ene.y 31, bulle, time,this); ebullets.add(bull); } if (ene.y < height) { ene.draw(canvas); } else { enemys.remove(ene); } } //绘制爆炸 for(int m = 0;m<explosions.size();m ){ Explosion explo =explosions.get(m); for(;explo.m<6;explo.m ){ explo.draw(canvas); } explosions.remove(explo); } //炸弹效果 // 敌人子弹与玩家碰撞 绘制敌人子弹 for (int i = 0; i < ebullets.size(); i ) { Bullet bull = ebullets.get(i); float ebullx = bull.x; float ebully = bull.y; if (bull.y < height) { bull.draw2(canvas); } else { ebullets.remove(bull); } if (ebullx > x 10 & ebullx< x ene.getWidth() 10 & ebully > y & ebully< y ene.getHeight() // |(ebullx>x 10*ene.getWidth()/46&ebullx<x 36*ene.getWidth()/46& // ebully>y 20*ene.getHeight()/47&ebully<y 34*ene.getHeight()/47) ) { ebullets.remove(bull); ilife--; Explosion explo = new Explosion(x 9,y 9,explodes); explosions.add(explo); if(isSound){ playSound(2,0); } if (ilife <= 0) { activity.score=score; activity.myhander.sendEmptyMessage(5); if (this.mMediaPlayer.isPlaying()) { this.mMediaPlayer.stop();// 将游戏背景音乐停止 playSound(3,0); } } } } // 玩家子弹 for (int i = 0; i < bullets.size(); i ) { Bullet bul = bullets.get(i); float bullx = bul.x bull.getWidth() / 2; float bully = bul.y; for (int k = 0; k < enemys.size(); k ) { Enamy eneb = enemys.get(k); float enemyx = eneb.x; float enemyy = eneb.y; if (bullx < (enemyx 100) & (bullx 11) > enemyx & bully < (enemyy 100) & (bully 11 > enemyy)) { score = 100; enemys.remove(eneb); bullets.remove(bul); Explosion explo = new Explosion(enemyx,enemyy,explodes); explosions.add(explo); if (isSound) { playSound(3, 0); } } } if (bul.y > 0) { bul.draw1(canvas); } else { bullets.remove(bul); } } if (ilife <= 0) { for(int m = 0;m<explosions.size();m ){ Explosion explo =explosions.get(m); for(;explo.m<6;explo.m ){ explo.draw(canvas); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } explosions.remove(explo); } } else { canvas.drawBitmap(player, x, y, null); } //添加炸弹 if(zhakai){ for (int k = 0; k < enemys.size(); k ) { Enamy eneb = enemys.get(k); float enemyx = eneb.x; float enemyy = eneb.y; score = 100; enemys.remove(eneb); Explosion explo = new Explosion(enemyx,enemyy,explodes); explosions.add(explo); } for (int i = 0; i < ebullets.size(); i ) { Bullet bull = ebullets.get(i); ebullets.remove(bull); } zhakai=false; } //绘制激光条 if(jikai){ Rect rect4 = new Rect(0, 0, jiguangpt.getWidth(), jiguangpt.getHeight()); Rect rect5 = new Rect(width1, 0, width1 jiguangpt.getWidth(), height); Rect rect6 = new Rect(width2, 0, width2 jiguangpt.getWidth(), height); canvas.drawBitmap(jiguangpt, rect4, rect5, null); canvas.drawBitmap(jiguangpt, rect4, rect6, null); for (int k = 0; k < enemys.size(); k ) { Enamy eneb = enemys.get(k); float enemyx = eneb.x; float enemyy = eneb.y; if(width1<enemyx 50&width1>enemyx|width2>enemyx&width2<enemyx 50){ if (isSound) { playSound(3, 0); } score = 100; enemys.remove(eneb); Explosion explo = new Explosion(enemyx,enemyy,explodes); explosions.add(explo); }} for (int i = 0; i < ebullets.size(); i ) { Bullet bull = ebullets.get(i); if(width1<bull.x 50&width1>bull.x|width2>bull.x&width2<bull.x 50){ ebullets.remove(bull); }} if(shun==0){ width1-=10; width2 =10;} else{ width1 =10; width2-=10; } if(width1<=0){ shun=1; } if(width1>width2&shun==1){ jikai=false; shun=0; width1=width/2-jiguangpt.getWidth()/2; width2=width1; } } // 绘制血条、炸弹、分数等状态 paint.setColor(Color.RED); paint.setTextSize(20); canvas.drawText("炸弹:" bomb, 0, 50, paint); canvas.drawText("分数:" score,width*3/5, 50, paint); canvas.drawText("血量:", width/3, 50, paint); canvas.drawText("激光弹" jiguang, width/3, 100, paint); canvas.drawBitmap(xuetiao,width/3 50,40, paint); paint.setColor(Color.BLUE); canvas.drawRect(width/3 50,40,width/3 50 ilife*xuetiao.getWidth()/3, 40 xuetiao.getHeight(),paint); //canvas.drawText("激光弹" jiguang, width/3, 100, paint); sh.unlockCanvasAndPost(canvas); } } public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } public void initSounds() { soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); soundPoolMap = new HashMap<Integer, Integer>(); soundPoolMap .put(1, soundPool.load(getContext(), R.raw.bulletsound1, 1)); soundPoolMap.put(2, soundPool.load(getContext(), R.raw.explode, 1)); soundPoolMap.put(3, soundPool.load(getContext(), R.raw.dead, 1)); } public void playSound(int sound, int loop) { AudioManager mgr = (AudioManager) getContext().getSystemService( Context.AUDIO_SERVICE); float streamVolumeCurrent = mgr .getStreamVolume(AudioManager.STREAM_MUSIC); float streamVolumeMax = mgr .getStreamMaxVolume(AudioManager.STREAM_MUSIC); float volume = streamVolumeCurrent / streamVolumeMax; soundPool.play(soundPoolMap.get(sound), volume, volume, 1, loop, 1f); } @Override public void surfaceCreated(SurfaceHolder arg0) { // TODO Auto-generated method stub setFlag(true);// 设置线程标志位 new Thread(this).start(); } @Override public void surfaceDestroyed(SurfaceHolder arg0) { // TODO Auto-generated method stub try { soundPool=null; mMediaPlayer=null; setFlag(false); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } flag = false; } public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: xu = event.getX(); yu = event.getY(); xd = xu - x; yd = yu - y; second=third; third=fourth; fourth=System.currentTimeMillis(); if(fourth-third<500){//炸弹效果 if(fourth-third<500&third-second<500){ //激光的效果//,但是还没有加,以后学的很深入了再加!已经加上 jiguang(); }else{ baozha(); } } break; case MotionEvent.ACTION_MOVE: xu = event.getX(); yu = event.getY(); x = xu - xd; y = yu - yd; if (x <= 0) { x = 0; } if (y <= 0) { y = 0; } if (x >= width - player.getWidth()) { x = width - player.getWidth(); } if (y >= height - player.getHeight()) { y = height - player.getHeight(); } break; case MotionEvent.ACTION_UP: break; } return true; } public boolean onKeyDown(int keyCode,KeyEvent event){ if(keyCode==KeyEvent.KEYCODE_BACK){ this.setFlag(false); if(mMediaPlayer!=null){ mMediaPlayer=null; } activity.myhander.sendEmptyMessage(5); return true; } return super.onKeyDown(keyCode, event); } public void setFlag(boolean flag) {// 设置标志位 this.flag = flag; } public void jiguang(){ if(jiguang>0){ bomb =1; jiguang-=1; jikai=true; } } public void baozha(){ if(bomb>0){ bomb-=1; if (isSound) { playSound(3, 0); } zhakai=true; } } public void run() { // TODO Auto-generated method stub // 不停在不同位置生成敌人 new Thread(new Runnable() { public void run() { Random r = new Random(); float tm1=0,tm2=0; tm1=System.currentTimeMillis(); while (flag) { int i = r.nextInt(9); int shui=1000; if (i == 0) { enemy = new Enamy(player.getWidth()/2-ene.getWidth()/2, 0, ene,GameView.this); enemys.add(enemy); } else if (i == 1) { enemy = new Enamy(width/8, 0, ene,GameView.this); enemys.add(enemy); } else if (i == 2) { enemy = new Enamy(2*width/8, 0, ene,GameView.this); enemys.add(enemy); } else if (i == 3) { enemy = new Enamy(3*width/8, 0, ene,GameView.this); enemys.add(enemy); } else if (i == 4) { enemy = new Enamy(4*width/8, 0, ene,GameView.this); enemys.add(enemy); } else if (i == 5) { enemy = new Enamy(5*width/8, 0, ene,GameView.this); enemys.add(enemy); } else if (i == 6) { enemy = new Enamy(6*width/8- ene.getWidth()/2-player.getWidth()/2, 0, ene,GameView.this); enemys.add(enemy); } else if (i == 7) { enemy = new Enamy(7*width/8- ene.getWidth()/2-player.getWidth()/2, 0, ene,GameView.this); enemys.add(enemy); } else { enemy = new Enamy(width - ene.getWidth()/2-player.getWidth()/2, 0, ene,GameView.this); enemys.add(enemy); } tm2=System.currentTimeMillis(); if(tm2-tm1>5000){ shui=500;} if(tm2-tm1>30000){ shui=400;} if(tm2-tm1>60000){ shui=250;} try { Thread.sleep(shui); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }).start(); tm1=System.currentTimeMillis(); // 循环调用onDraw方法 while (this.flag) {// 循环 if (shoot % 5 == 0) { bullet = new Bullet(x player.getWidth() / 2-bull.getWidth()/2, y, bull, 0,this); bullets.add(bullet); } else if (shoot == 100) { shoot = 0; } shoot = 1; tm2=System.currentTimeMillis(); onDraw();// 调用绘制方法 try { Thread.sleep(30); } catch (InterruptedException e) { e.printStackTrace(); } } } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论