程序如下:
1.主Activity
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
public class Day8execrise3Activity extends Activity {
MediaPlayer player;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyView myView = new MyView(this);
this.setContentView(myView);
myView.setFocusableInTouchMode(true);
myView.requestFocus();
new Thread(myView).start();
player = MediaPlayer.create(this, R.raw.hdl); //背景音乐
player.setLooping(true);
player.start();
}
}
2.红色弹类
public class RedDan {
public float x;
public float y;
public boolean show = true;
}
3.白色弹
public class Bullet {
public float x;
public float y ;
boolean show = true;
}
4.重要的窗口View,画面显示,操作模式:触屏模式
import java.util.ArrayList;
import java.util.Random;
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.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
public class MyView extends View implements GestureDetector.OnGestureListener,
Runnable {
private Bitmap feiji;
private float feiji_x = 160;
private float feiji_y = 360;
private Bitmap enemy;
private float enemy_x = 0;
private float enemy_y = -30;
private boolean enemy_show = true;
private int right = 0; // 方向:右为0,左为1.
private GestureDetector gd;
private ArrayList<Bullet> bullets; // 子弹集合
private ArrayList<Star> stars; // 星星集合
private Bitmap bulletImage; // 飞机子弹图片
private Bitmap redDanImage; // 敌机红弹
private ArrayList<RedDan> redDans;
private Paint paint;
public MyView(Context context) {
super(context);
feiji = BitmapFactory.decodeResource(super.getContext().getResources(),
R.drawable.fei);
bulletImage = BitmapFactory.decodeResource(super.getContext()
.getResources(), R.drawable.bullet);
enemy = BitmapFactory.decodeResource(super.getContext().getResources(),
R.drawable.enemy);
gd = new GestureDetector(this);
bullets = new ArrayList<Bullet>(); // 子弹集合初始化
stars = new ArrayList<Star>();// 星星集合初始化
redDanImage = BitmapFactory.decodeResource(super.getContext().getResources(), R.drawable.red);
redDans = new ArrayList<RedDan>();
paint = new Paint();
paint.setColor(Color.GRAY);
paint.setTextSize(25);
}
public void onDraw(Canvas canvas) {
canvas.drawBitmap(feiji, feiji_x, feiji_y, null);
canvas.drawBitmap(enemy, enemy_x, enemy_y, null);
// 咱的飞机,威武
for (int i = 0; i < bullets.size(); i++) {
Bullet bullet = bullets.get(i);
bullet.y -= 30;
if (bullet.y < 0) {
bullets.remove(i);
} else {
canvas.drawBitmap(bulletImage, bullet.x, bullet.y, null); //把图片显示在View上
}
}
for (int i = 0; i <redDans.size(); i++) {
RedDan redDan = redDans.get(i);
redDan.y+=20;
if (redDan.y>450) {
redDans.remove(i);
}
else {
canvas.drawBitmap(redDanImage, redDan.x,redDan.y, null);
}
}
}
public boolean onTouchEvent(MotionEvent event) {
return gd.onTouchEvent(event);
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
System.out.println("down");
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
return true;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
int width = this.feiji.getWidth() / 2;
int height = this.feiji.getHeight() / 2;
this.feiji_x = e2.getX() - width;
this.feiji_y = e2.getY() - height;
this.invalidate();
return true;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public void run() {
while (true) {
// 飞机的子弹
Bullet bullet = new Bullet();
// bullet.x = (feiji_x -5)+(feiji.getWidth()/2);
bullet.x = feiji_x - feiji.getWidth() + 25;
bullet.y = feiji_y - 90;
bullets.add(bullet);
// 敌机移动
if (enemy_show) {
if (right == 0) {
// 敌机往右
enemy_x += 35;
if (enemy_x > (300 - enemy.getWidth() / 2)) {
right = 1;
//enemy_x=-100;
}
} else if (right == 1) { // 敌机往左
enemy_x -= 35;
if (enemy_x <-100) {
right = 0;
//enemy_x=-100;
}
}
}
// 敌机的子弹的位置
Star star = new Star();
star.x = enemy_x +30;
star.y = enemy_y +60;
stars.add(star);
// 敌机红弹位置
RedDan redDan = new RedDan();
redDan.x = enemy_x + enemy.getWidth()/2;
redDan.y = enemy_y + enemy.getHeight()/2-76;
redDans.add(redDan);
this.postInvalidate();
try {
Thread.currentThread().sleep(500);
} catch (Exception e) {
// TODO: handle exception
}
}
}
}