android飞机大战功能,Android飞机大战

点击进行安装下载:https://www.pgyer.com/gUk0

快来玩一下

MainActivity

package com.example.administrator.aircraftwar;

import android.content.DialogInterface;

import android.os.Bundle;

import android.os.Process;

import android.support.v7.app.AlertDialog;

import android.support.v7.app.AppCompatActivity;

import android.view.KeyEvent;

import android.view.Window;

public class MainActivity extends AppCompatActivity {

private GameView mGameView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

mGameView = new GameView(this);

// gameView.setWindow(getWindowManager());

setContentView(mGameView);

// SurfaceView 看电影 相机绘画

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if(keyCode==KeyEvent.KEYCODE_BACK){

mGameView.stop();

AlertDialog.Builder alert=new AlertDialog.Builder(this);

alert.setTitle("你要退出么");

alert.setNegativeButton("退出", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialogInterface, int i) {

Process.killProcess(Process.myPid());

}

});

alert.setPositiveButton("继续", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialogInterface, int i) {

mGameView.start();

}

});

alert.create().show();

}

return false;

}

}

GameView.java

package com.example.administrator.aircraftwar;

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.SoundPool;

import android.util.Log;

import android.view.MotionEvent;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.WindowManager;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

//飞机绘制

public class GameView extends SurfaceView implements Runnable,

SurfaceHolder.Callback {

//实现监听SurfaceView的变化,实现Runnable的子线程,SurfaceView绘画可以在子线程实现

private Bitmap my;//自己

private Bitmap baozha;//爆炸

private Bitmap bg;//背景

private Bitmap diren;//敌人

private Bitmap zidan;//子弹

private Bitmap erjihuancun;//二级缓存

private WindowManager mWindow;

private int Display_w;//屏幕的宽高

private int Display_h;

private ArrayList mGameImages = new ArrayList<>();

private ArrayList mZidans = new ArrayList<>();

public GameView(Context context) {

super(context);

getHolder().addCallback(this);//注册回掉方法

}

private FeijiImage SelectmFeiji;

@Override

public boolean onTouchEvent(MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {//手接触飞机

for (GameImage game : mGameImages) {

if (game instanceof FeijiImage) {

//是否选中飞机

FeijiImage mFeiji = (FeijiImage) game;

if (game.getX() < event.getX() //判断我点击的X是否小于图的X

&& game.getY() < event.getY()

&& mFeiji.getX() + mFeiji.getW() > event.getX()

&& mFeiji.getY() + mFeiji.getH() > event.getY()) {

//选中了飞机

SelectmFeiji = mFeiji;

} else {

Log.e("xx", "onTouchEvent: 没有");

SelectmFeiji = null;

}

break;

}

}

} else if (event.getAction() == MotionEvent.ACTION_MOVE) {

if (SelectmFeiji != null) {

SelectmFeiji.setX((int) event.getX() - SelectmFeiji.getW() / 2);

SelectmFeiji.setY((int) event.getY() - SelectmFeiji.getH() / 2);

}

} else if (event.getAction() == MotionEvent.ACTION_UP) {

SelectmFeiji = null;

}

return true;

}

private SoundPool poll=null;

int bomb;

int gameover;

int shot;

private void init() {

//加载照片

my = BitmapFactory.decodeResource(getResources(), R.drawable.my);

baozha = BitmapFactory.decodeResource(getResources(), R.drawable.baozha);

bg = BitmapFactory.decodeResource(getResources(), R.drawable.bg);

diren = BitmapFactory.decodeResource(getResources(), R.drawable.diren);

zidan = BitmapFactory.decodeResource(getResources(), R.drawable.zidan);

//生产二级缓存照片

erjihuancun = Bitmap.createBitmap(Display_w, Display_h, Bitmap.Config.ARGB_8888);

mGameImages.add(new BeijingImage(bg));//先加入背景照片

mGameImages.add(new FeijiImage(my));//自己

mGameImages.add(new DijiImage(diren,baozha));//敌人

poll=new SoundPool(10, AudioManager.STREAM_SYSTEM,0);

bomb = poll.load(getContext(), R.raw.bomb, 1);

gameover = poll.load(getContext(), R.raw.gameover, 1);

shot = poll.load(getContext(), R.raw.shot, 1);

}

private class Bofang extends Thread{

int i;

public Bofang(int i){

this.i=i;

}

@Override

public void run() {

poll.play(i,1,1,1,0,1);

super.run();

}

}

private interface GameImage {

Bitmap getBitmap();

int getX();

int getY();

}

//负责背景照片的处理

private class BeijingImage implements GameImage {

Bitmap bg;

private Bitmap newBitmap = null;

private BeijingImage(Bitmap bg) {

this.bg = bg;

newBitmap = Bitmap.createBitmap(Display_w, Display_h, Bitmap.Config.ARGB_8888);

}

private int heigth = 0;

@Override

public Bitmap getBitmap() {

Paint paint = new Paint();

Canvas canvas = new Canvas(newBitmap);

/**

* 将源资源对应的尺寸 绘制 到目标资源对应的尺寸上

* @param bitmap 源资源

* @param src 源资源的尺寸

* @param dst 目标资源的尺寸

* @param paint May be null. The paint used to draw the bitmap

*/

//绘制下面的图片

canvas.drawBitmap(bg, new Rect(0, 0, bg.getWidth(), bg.getHeight()),

new Rect(0, heigth, Display_w, Display_h + heigth), paint);

//绘制上面的图片

canvas.drawBitmap(bg, new Rect(0, 0, bg.getWidth(), bg.getHeight()),

new Rect(0, -Display_h + heigth, Display_w, heigth), paint);

heigth++;

if (heigth == Display_h) {

heigth = 0;

}

return newBitmap;

}

@Override

public int getX() {

return 0;

}

@Override

public int getY() {

return 0;

}

}

//自己飞机

private class FeijiImage implements GameImage {

private Bitmap newBitmap;

private int X;

private int Y;

private int w;

private int h;

public int getW() {

return w;

}

public void setW(int w) {

this.w = w;

}

public int getH() {

return h;

}

public void setH(int h) {

this.h = h;

}

public void setX(int x) {

X = x;

}

public void setY(int y) {

Y = y;

}

// public boolean select(int x,int y){

//

// }

private List feiji = new ArrayList<>();

public FeijiImage(Bitmap my) {

newBitmap = my;

Bitmap bitmap = Bitmap.createBitmap(newBitmap, 0, 0, newBitmap.getWidth() / 4, newBitmap.getHeight());

Bitmap bitmap2 = Bitmap.createBitmap(newBitmap, (newBitmap.getWidth() / 4) * 1, 0, newBitmap.getWidth() / 4, newBitmap.getHeight());

Bitmap bitmap3 = Bitmap.createBitmap(newBitmap, (newBitmap.getWidth() / 4) * 2, 0, newBitmap.getWidth() / 4, newBitmap.getHeight());

Bitmap bitmap4 = Bitmap.createBitmap(newBitmap, (newBitmap.getWidth() / 4) * 3, 0, newBitmap.getWidth() / 4, newBitmap.getHeight());

feiji.add(bitmap);

feiji.add(bitmap2);

feiji.add(bitmap3);

feiji.add(bitmap4);

//得到战机的高和宽

w = newBitmap.getWidth() / 4;

h = newBitmap.getHeight();

X = (Display_w - newBitmap.getWidth() / 4) / 2;

Y = Display_h - newBitmap.getHeight() - 30;

}

private int index = 0;

private int num = 0;

@Override

public Bitmap getBitmap() {

Bitmap bitmap = feiji.get(index);

if (num == 10) {

index++;

if (index == feiji.size()) {

index = 0;

}

num = 0;

}

num++;

return bitmap;

}

@Override

public int getX() {

return X;

}

@Override

public int getY() {

return Y;

}

}

//敌人飞机

private class DijiImage implements GameImage {

private Bitmap diren;

private List mBitmaps = new ArrayList<>();

private List baozas = new ArrayList<>();

private int X;

private int Y;

private int W;

private int H;

public DijiImage(Bitmap diren,Bitmap baoza) {

this.diren = diren;

//前23参数是从哪开始,后面是结束的宽高

Bitmap bitmap = Bitmap.createBitmap(diren, 0, 0, diren.getWidth() / 4, diren.getHeight());

Bitmap bitmap1 = Bitmap.createBitmap(diren, (diren.getWidth() / 4) * 1, 0, diren.getWidth() / 4, diren.getHeight());

Bitmap bitmap2 = Bitmap.createBitmap(diren, (diren.getWidth() / 4) * 2, 0, diren.getWidth() / 4, diren.getHeight());

Bitmap bitmap3 = Bitmap.createBitmap(diren, (diren.getWidth() / 4) * 3, 0, diren.getWidth() / 4, diren.getHeight());

mBitmaps.add(bitmap);

mBitmaps.add(bitmap1);

mBitmaps.add(bitmap2);

mBitmaps.add(bitmap3);

baozas.add(Bitmap.createBitmap(baoza,0,0,baoza.getWidth()/4,baoza.getHeight()/2));

baozas.add(Bitmap.createBitmap(baoza,(baoza.getWidth()/4)*1,0,baoza.getWidth()/4,baoza.getHeight()/2));

baozas.add(Bitmap.createBitmap(baoza,(baoza.getWidth()/4)*2,0,baoza.getWidth()/4,baoza.getHeight()/2));

baozas.add(Bitmap.createBitmap(baoza,(baoza.getWidth()/4)*3,0,baoza.getWidth()/4,baoza.getHeight()/2));

baozas.add(Bitmap.createBitmap(baoza,0,baoza.getHeight()/2,baoza.getWidth()/4,baoza.getHeight()/2));

baozas.add(Bitmap.createBitmap(baoza,(baoza.getWidth()/4)*1,baoza.getHeight()/2,baoza.getWidth()/4,baoza.getHeight()/2));

baozas.add(Bitmap.createBitmap(baoza,(baoza.getWidth()/4)*2,baoza.getHeight()/2,baoza.getWidth()/4,baoza.getHeight()/2));

baozas.add(Bitmap.createBitmap(baoza,(baoza.getWidth()/4)*3,baoza.getHeight()/2,baoza.getWidth()/4,baoza.getHeight()/2));

Y = -diren.getHeight();

Random ran = new Random();

X = ran.nextInt(Display_w - (diren.getWidth() / 4));

W = diren.getWidth() / 4;

H = diren.getHeight();

}

private int index = 0;

private int num = 0;

@Override

public Bitmap getBitmap() {

Bitmap bitmap = mBitmaps.get(index);

//因为index到不了8

// if(index==8&&siwang){

// mGameImages.remove(this);

// }

if (num == 7) {

index++;

if(index==8&&siwang){

mGameImages.remove(this);

}

if (index == mBitmaps.size()) {

index = 0;

}

num = 0;

}

Y += dijiyidong;

num++;

if (Y > Display_h) {

mGameImages.remove(this);

}

return bitmap;

}

@Override

public int getX() {

return X;

}

@Override

public int getY() {

return Y;

}

private boolean siwang=false;

//收到攻击

public void soudaogongji(ArrayList zidans) {

if(!siwang){

for (Zidan zd : (List) zidans.clone()) {

if (zd.getX() > X && zd.getY() > Y && zd.getX() < X + W && zd.getY() < Y + H) {

siwang=true;

zidans.remove(zd);

mBitmaps=baozas;

fenshu+=10;

new Bofang(bomb).start();

break;

}

}

}

}

}

//子弹

private class Zidan implements GameImage {

private FeijiImage feijiImage;

private Bitmap zidan;

private int X;

private int Y;

public Zidan(FeijiImage feijiImage, Bitmap zidan) {

this.feijiImage = feijiImage;

this.zidan = zidan;

X = (feijiImage.getX() + feijiImage.getW() / 2) - 17;

Y = feijiImage.getY() - zidan.getHeight();

}

@Override

public Bitmap getBitmap() {

Y -= 19;

if (Y <= -10) {

mZidans.remove(this);

}

return zidan;

}

@Override

public int getX() {

return X;

}

@Override

public int getY() {

return Y;

}

}

private boolean runState = false;

private SurfaceHolder mHolder = null;

private long fenshu=0;

private int guanka=1;

private int chudishu = 30; // 出敌机的数字

private int dijiyidong = 5; // 敌机移动

private int xiayiguan = 50; // 下一关分数

private int[][] sj = { { 1, 50, 30, 5 }, { 2, 100, 30, 5 },

{ 3, 200, 30, 6 }, { 4, 300, 25, 6 }, { 5, 400, 25, 7 },

{ 6, 500, 25, 7 }, { 7, 600, 20, 8 }, { 8, 700, 20, 8 },

{ 9, 800, 15, 9 }, { 10, 900, 10, 10 }, { 11, 1000, 10, 10 },

{ 12, 1100, 10, 10 } };

//绘画中心

@Override

public void run() {

Paint pain = new Paint();

Paint pain2 = new Paint(Paint.ANTI_ALIAS_FLAG);

pain2.setColor(Color.YELLOW);

pain2.setTextSize(50);

pain2.setDither(true);//设置防震动

int diren_num = 0;

int zidan_num = 0;

try {

while (runState) {

while (stopState) {

try {

Thread.sleep(1000000);

} catch (Exception e) {

}

}

if (SelectmFeiji != null) {

zidan_num++;

if (zidan_num == 10) {

zidan_num = 0;

new Bofang(shot).start();

mZidans.add(new Zidan(SelectmFeiji, zidan));

}

}

Canvas canvas1 = new Canvas(erjihuancun);

for (GameImage image : (List) mGameImages.clone()) {

if(image instanceof DijiImage){

DijiImage diji= (DijiImage)image;

diji.soudaogongji(mZidans);

}

canvas1.drawBitmap(image.getBitmap(), image.getX(), image.getY(), pain);

}

diren_num++;

if (diren_num == chudishu) {

diren_num = 0;

mGameImages.add(new DijiImage(diren,baozha));

}

for (Zidan image : (List) mZidans.clone()) {

canvas1.drawBitmap(image.getBitmap(), image.getX(), image.getY(), pain);

}

//分数

canvas1.drawText("得分"+fenshu+"关卡"+guanka,0,40,pain2);

canvas1.drawText("下一关" + xiayiguan, 0, 100, pain2);

if (sj[guanka - 1][1] <= fenshu) {

chudishu = sj[guanka][2];

dijiyidong = sj[guanka][3];

fenshu = sj[guanka - 1][1] - fenshu;

xiayiguan = sj[guanka][1];

guanka = sj[guanka][0];

}

//锁上获得绘画的画布\new Rect(0,0,0,0)绘画的范围

Canvas canvas = mHolder.lockCanvas();//锁

canvas.drawBitmap(erjihuancun, 0, 0, pain);

mHolder.unlockCanvasAndPost(canvas);//解锁

}

} catch (Exception E) {

Log.e("gg", "run:异常 ");

}

}

//试图创建时

@Override

public void surfaceCreated(SurfaceHolder surfaceHolder) {

}

private boolean stopState = false;

public void stop() {

stopState = true;

}

public void start() {

stopState = false;

sleepTime.interrupt();// 起来

}

//界面发生改变时

@Override

public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

Display_w = i1;

Display_h = i2;

init();

mHolder = surfaceHolder;

runState = true;

//初始化

sleepTime=new Thread(this);

sleepTime.start();

}

Thread sleepTime=null;

//销毁的

@Override

public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

runState = false;

}

}

效果图

8ff5477015ad?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=qzone

image.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值