小时候玩的飞机射击游戏类游戏,但也不是飞机...

又一J2ME飞机射击类游戏重装火炮源程序 展示 PlayCanvas.java源代码
- 下载整个 - 类型:.java文件
import javax.microedition.lcdui.*;
import java.util.Random;
import mmae.ui.*;
import mmae.game.Score;
import com.nokia.mid.ui.*;
//Download by
public class PlayCanvas extends XCanvas {
& private static int WIDTH ;
& private static int HEIGHT ;
& boolean gameover;
& ImageFont font;
& private static boolean gun_left;
& private static boolean gun_right;
& private static boolean fire[] = new boolean[4];
& private static boolean win = false;
& private static int gun_x; & & & & & & & & & & & & & & & & & & & & & & & & & & //大炮的X坐标
& private static int gun_y; & & & & & & & & & & & & & & & & & & & & & & & & & & //大炮的Y坐标
& private static int shot_x[] = new int[4]; & & & & & & & & & & & & & & & & & & //炮弹的X坐标
& private static int shot_y[] = new int[4]; & & & & & & & & & & & & & & & & & & //炮弹的Y坐标
& private int shotNum;
& private static int gun_width;
& private static int gun_height;
& private static int cdegree = 0;
& private static int tdegree[] = {0,0,0,0}; & & & & & & & & & & & & & & & & & & //temp degree
& private static Image[] gun = new Image[3]; & & & & & & & & & & & & & & & & & &//大炮
& private static Image cgun; & & & & & & & & & & & & & & & & & & & & & & & & & &//当前角度的大炮
& private static Image bracket; & & & & & & & & & & & & & & & & & & & & & & & & //支架
& private static Image plane[] = new Image[6];
& private static Image shot[] = new Image[4]; & & & & & & & & & & & & & & & & & //炮弹
& private static Image bomb; & & & & & & & & & & & & & & & & & & & & & & & & & &//炸弹
& private static Image[] explode = new Image[6]; & & & & & & & & & & & & & & & &//爆炸效果
& private static Image[] bg = new Image[6];
& private static final Font fs = Font.getFont(64, 0, 8);
& private static final Font fl = Font.getFont(64, 1, 16);
& private static int stage = 0;
& private static int score ;
& private static int life ;
& private static int left_plane ;
& private static int degree ;
& int rotatedelaycount = 0;
& int planeSpeed ;
& int bombX ;
& Random rand;
& int fly; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//whitch fly
& int tfly;
& int interval;
& int fireinterval;
& private static boolean [] isFly = {false,false,false,false,false,false}; & & &//fly flag
& private static boolean [] isSendBomb = {false,false,false,false,false,false};
& private static boolean [] isBombShot = {false,false,false,false,false,false};
& private static boolean [] isBombGun = {false,false,false,false,false,false};
& private static boolean [] isBombGround = {false,false,false,false,false,false};
& private static boolean [] isShotPlane = {false,false,false,false,false,false};
& private static boolean [] isShotBomb = {false,false,false,false,false,false};
& private static int [] hitPlane = {0,0,0,0,0,0};
& private static int [] hitBomb = {0,0,0,0,0,0};
& private static int [] hitGun = {0,0,0,0,0,0};
& private static int [] hitGround = {0,0,0,0,0,0};
& private static int [] tBombX = {0,0,0,0,0,0};
& int difficulty;
& private static int flip;
& private static int start_tx;
& private static boolean showscore = false ;
& private static boolean isNewStage = false ;
& private String stagelogo;
& boolean out[] = {false,false,false,false,false,false};
& int start_x;
& int step_x;
& int bomb_move_step_h;
& int explodecount;
& boolean rotate = true;
& private int stageinterval;
& private int maxstage;
& private Image offimg;
& private Graphics offg;
& private DirectGraphics dg;
& //分别对应飞机起飞的初始X,Y,投炸弹的初始X,Y,是否投弹(用0,1表示),飞机飞行的速度,飞机是否爆炸,炸弹是否爆炸(炸弹可见),爆炸效果图计数
& // & & & & & & & & & 0,1 & & & & & &2,3, & 4, & & & & & & & & 5, & & & & & & &6, & & & & &7 & & & & & & & & 8
& int[][] plane_XY = {
& & & // & & 0 &1 &2 &3 &4 &5 &6 &7 &8
& & & & {WIDTH, 0, 0, 0, 0, 0, 0, 0, 0}
& & & , {0, & & 0, 0, 0, 0, 0, 0, 0, 0}
& & & , {WIDTH, 0, 0, 0, 0, 0, 0, 0, 0}
& & & , {0, & & 0, 0, 0, 0, 0, 0, 0, 0}
& & & , {WIDTH, 0, 0, 0, 0, 0, 0, 0, 0}
& & & , {0, & & 0, 0, 0, 0, 0, 0, 0, 0}
& &};
& & & & public PlayCanvas()
& & & & {
& & & & & & & & /***********************************************
& & & & & & & & 以下为游戏类初使化内容
& & & & & & & & ***********************************************/
& & & & & & & gun[0] = go.getImage(&/Gun0.png&);
& & & & & & & gun[1] = go.getImage(&/Gun30.png&);
& & & & & & & gun[2] = go.getImage(&/Gun60.png&);
& & & & & & & bracket = go.getImage(&/Bracket.png&);
& & & & & & & shot[0] = go.getImage(&/Shot.png&);
& & & & & & & shot[1] = go.getImage(&/Shot.png&);
& & & & & & & shot[2] = go.getImage(&/Shot.png&);
& & & & & & & shot[3] = go.getImage(&/Shot.png&);
& & & & & & & plane[0] = go.getImage(&/Plane_1.png&);
& & & & & & & plane[1] = go.getImage(&/Plane_2.png&);
& & & & & & & plane[2] = go.getImage(&/Plane_3.png&);
& & & & & & & plane[3] = go.getImage(&/Plane_1.png&);
& & & & & & & plane[4] = go.getImage(&/Plane_2.png&);
& & & & & & & plane[5] = go.getImage(&/Plane_3.png&);
& & & & & & & explode[0] = go.getImage(&/Explosion1.png&);
& & & & & & & explode[1] = go.getImage(&/Explosion2.png&);
& & & & & & & explode[2] = go.getImage(&/Explosion3.png&);
& & & & & & & explode[3] = go.getImage(&/Explosion4.png&);
& & & & & & & explode[4] = go.getImage(&/Explosion5.png&);
& & & & & & & explode[5] = go.getImage(&/Explosion6.png&);
& & & & & & & bomb = go.getImage(&/Bomb.png&);
& & & & & & & bg[0] = go.getImage(&/Bg1.png&);
& & & & & & & bg[1] = go.getImage(&/Bg2.png&);
& & & & & & & bg[2] = go.getImage(&/Bg3.png&);
& & & & & & & bg[3] = go.getImage(&/Bg1.png&);
& & & & & & & bg[4] = go.getImage(&/Bg2.png&);
& & & & & & & bg[5] = go.getImage(&/Bg3.png&);
& & & & & & & & font = new ImageFont(go.getImage(&/Font.png&),8);
& & & & & & & & font.setOffset(-1);
& & & & & & & &
& & & & & & offimg = Image.createImage(getWidth(), getHeight());
& & & & & & offg = offimg.getGraphics();
& & & & & & offg.setFont(PlayCanvas.fs);
& & & & & & dg = DirectUtils.getDirectGraphics(offg);
& & & & & & WIDTH = getWidth();
& & & & & & HEIGHT = getHeight();
& & & & & & gun_width = gun[0].getWidth();
& & & & & & gun_height = gun[0].getHeight();
& & & & & & for(int j=0;j&shot.length;j++){
& & & & & & & shot_x[j] = WIDTH / 2;
& & & & & & & shot_y[j] = HEIGHT * 4 / 5 + 5;
& & & & & & }
& & & & & & rand = new Random();
& & & & & & init(); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //初始化游戏
& & & & & & initPlot(); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //初始化游戏关数
& & & & & & difficulty = 84; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//难度调节数
& & & & & & interval = 50; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//线程的时间间隔
& & & & & & maxstage = 6; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//最大关数
& & & & & & & & start(35);
& & & & }
& & & & & public void init(){ & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //初始化游戏
& & & & & & & & & win = false;
& & & & & & & & & gameover = false;
& & & & & & & & & isNewStage = true;
& & & & & & & & & stage = 0;
& & & & & & & & & score = 0;
& & & & & & & & & bomb_move_step_h = 1;
& & & & & & & & & life = 10;
& & & & & }
& & & & & private void initPlot(){ & & & & & & & & & & & & & & & & & & & & & & & & & & &//初始化关卡
& & & & & & //life = 10; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//每关中 玩家的命数
& & & & & & left_plane = 30; & & & & & & & & & & & & & & & & & & & & & & & & & & & & //每关中 玩家需要击落的飞机数
& & & & & & degree = 0; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //大炮在每关中初始的角度 0表示朝上
& & & & & & isNewStage = true; & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//新一关的开始 控制着过关后 显示下一关是第几关
& & & & & & difficulty -= 12; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //每过一次 难度的修改值 通过改变飞机出场的频率来实现
& & & & & & stageinterval = 0; & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//用于每关时延的临时计数
& & & & & & stage++; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//过关后 关数递增
& & & & & & shotNum = 0;
& & & & & & bomb_move_step_h ++; & & & & & & & & & & & & & & & & & & & & & & & & & & & &//炸弹下落时的速度 每一关加一
& & & & & & fireinterval = 0;
& & & & & & for(int j=0;j&shot.length;j++){
& & & & & & & fire[j] = false; & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//控制是否开火
& & & & & & & shotReset(j);
& & & & & & }
& & & & & & for (int i = 0; i & plane.length; i++) {
& & & & & & & planeReset(i);
& & & & & & }
& & & & & &
& & & & & & StringBuffer sb = new StringBuffer(&MISSION &);
& & & & & & sb.append(String.valueOf(stage));
& & & & & & stagelogo=sb.toString();
& & & & & }
& & public void paint(Graphics g) {
& & & & g.setClip(0,0,getWidth(),getHeight());
& & & & if(!isStop())
& & & & {
& & & & & & & & & & & & /***********************************************
& & & & & & & & & & & & 以下是游戏进行过程绘图
& & & & & & & & & & & & ***********************************************/ & && &
& & & & & & & & & & & & g.setColor(0);
& & & & & & & & & & & & g.fillRect(0,0,getWidth(),getHeight());
& & & & & & & & & & offg.drawImage(bg[stage-1], 0, 0, offg.LEFT | offg.TOP);
& & & & & & & & & & &if (isNewStage) { & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//新一关
& & & & & & & & & & & &//offg.setColor(255,255,255);
& & & & & & & & & & & &//offg.drawString(stagelogo+&&,WIDTH/2+1,HEIGHT/2+1,g.HCENTER|g.TOP);
& & & & & & & & & & & &//offg.setColor(255,255,255);& & & & & & & & & &
& & & & & & & & & & & & & &//offg.drawString(stagelogo+&&,WIDTH/2,HEIGHT/2,g.HCENTER|g.TOP);& & & & & & & & & &
& & & & & & & & & & & & & & & &
& & & & & & & & & & & &font.drawString(offg, stagelogo, getWidth()/2-32, getHeight()/2-10);
& & & & & & & & & & }
& & & & & & & & & & else { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//一般情况
& & & & & & & & & & & offg.setColor(0x000000); & & & & & & & & & & & & & & & & & & & & & & & & &//检测完各飞机的状态 准备再次重画游戏当前的状态值
& & & & & & & & & & & offg.setFont(fs);
& & & & & & & & & & &
& & & & & & & & & & & font.drawString(offg, &SCORE: &+score, 10, 5);
& & & & & & & & & & & font.drawString(offg, &STAGE: &+stage , WIDTH-65, 5);
& & & & & & & & & & & font.drawString(offg, &TASK: &+left_plane, 10, 15);
& & & & & & & & & & & font.drawString(offg, &LIFT: &+life, WIDTH-65, 15);
& & & & & & & & & & &
& & & & & & & & & & & //offg.drawString(&Score: & + score , 10, 5, offg.LEFT | offg.TOP); & & & & //顶部的状态行
& & & & & & & & & & & //offg.drawString(&Stage: & + stage , WIDTH-10, 5, offg.RIGHT | offg.TOP);
& & & & & & & & & & & //offg.drawString(&Task: & + left_plane , 10, 20,offg.LEFT | offg.TOP);
& & & & & & & & & & & //offg.drawString(&Life: & + life , WIDTH-10, 20, offg.RIGHT | offg.TOP);
& & & & & & & & & & & //for(int i=0;i&plane.i++){
& & & & & & & & & & & // &offg.drawString(i+&F:& + isFly[i] + &BS:&+isBombShot[i] + & G:&+isBombGun[i] + & R:&+isBombGround[i] + & S:&+isSendBomb[i], 0, (3+i)*12,offg.LEFT | offg.TOP);
& & & & & & & & & & & //}
& & & & & & & & & & & //炮弹
& & & & & & & & & & & for (int j = 0; j & shot.length; j++) {
& & & & & & & & & & & & if (fire[j]) {
& & & & & & & & & & & & & offg.drawImage(shot[j], shot_x[j], shot_y[j], offg.HCENTER | offg.TOP);
& & & & & & & & & & & & }
& & & & & & & & & & & }
& & & & & & & & & & & offg.drawImage(bracket, WIDTH / 2 - 5, HEIGHT * 4 / 5 + 10, offg.HCENTER | offg.TOP); & //画大炮支架及大炮
& & & & & & & & & & & dg.drawImage(cgun, WIDTH / 2, HEIGHT * 4 / 5, offg.HCENTER | offg.TOP, cdegree);
& & & & & & & & & & & offg.drawImage(bracket, WIDTH / 2, HEIGHT * 4 / 5 + 10, offg.HCENTER | offg.TOP);
& & & & & & & & & & & //飞机 &炸弹
& & & & & & & & & & & //打中炮弹 &大炮 &地面 &后的爆炸效果
& & & & & & & & & & & for (int i = 0; i & plane.length; i++) {
& & & & & & & & & & & & if (i % 2 == 0) flip = 0; else flip = 8192;
& & & & & & & & & & & & if(isFly[i]) {
& & & & & & & & & & & & & & &dg.drawImage(plane[i], plane_XY[i][0], plane_XY[i][1],
& & & & & & & & & & & & & & & & & & & & & offg.TOP | offg.HCENTER, flip);
& & & & & & & & & & & & & &}
& & & & & & & & & & & & & if (isShotPlane[i]) {
& & & & & & & & & & & & & & if (hitPlane[i] & explode.length) {
& & & & & & & & & & & & & & & offg.drawImage(explode[hitPlane[i]], plane_XY[i][0],
& & & & & & & & & & & & & & & & & & & & & & &plane_XY[i][1], offg.TOP | offg.HCENTER); & & & & &//画出爆炸效果图
& & & & & & & & & & & & & & & if (hitPlane[i] == 0)
& & & & & & & & & & & & & & & & updateLeftPlane(i);
& & & & & & & & & & & & & & & hitPlane[i]++;
& & & & & & & & & & & & & & }
& & & & & & & & & & & & & & else if (hitBomb[i] &= explode.length) {
& & & & & & & & & & & & & & & //hitPlane[i] = 0;
& & & & & & & & & & & & & & & //isShotPlane[i] =
& & & & & & & & & & & & & & }
& & & & & & & & & & & & & }
& & & & & & & & & & & & & if (isSendBomb[i]) {
& & & & & & & & & & & & & & if (isBombShot[i]) {
& & & & & & & & & & & & & & & if (hitBomb[i] & explode.length) {
& & & & & & & & & & & & & & & & offg.drawImage(explode[hitBomb[i]], plane_XY[i][2],
& & & & & & & & & & & & & & & & & & & & & & & &plane_XY[i][3], offg.TOP | offg.HCENTER); & & & &//画出爆炸效果图
& & & & & & & & & & & & & & & & hitBomb[i]++;
& & & & & & & & & & & & & & & }else if (hitBomb[i] &= explode.length) {
& & & & & & & & & & & & & & & & //hitBomb[i] = 0;
& & & & & & & & & & & & & & & & isBombShot[i]=false;
& & & & & & & & & & & & & & & & isSendBomb[i] = false;
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & } else
& & & & & & & & & & & & & & & if (isBombGun[i]) {
& & & & & & & & & & & & & & & & if (hitGun[i] & explode.length) {
& & & & & & & & & & & & & & & & & offg.drawImage(explode[hitGun[i]], plane_XY[i][2],
& & & & & & & & & & & & & & & & & & & & & & & & &plane_XY[i][3], offg.TOP | offg.HCENTER); & & &//画出爆炸效果图
& & & & & & & & & & & & & & & & & if(hitGun[i]==1) life--;
& & & & & & & & & & & & & & & & & hitGun[i]++;
& & & & & & & & & & & & & & & & }else if (hitGun[i] &= explode.length) {
& & & & & & & & & & & & & & & & & //hitGun[i] = 0;
& & & & & & & & & & & & & & & & & isBombGun[i]=false;
& & & & & & & & & & & & & & & & & isSendBomb[i] = false;
& & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & }else
& & & & & & & & & & & & & & & & if (isBombGround[i]) {
& & & & & & & & & & & & & & & & & if (hitGround[i] & explode.length) {
& & & & & & & & & & & & & & & & & & offg.drawImage(explode[hitGround[i]], plane_XY[i][2],
& & & & & & & & & & & & & & & & & & & & & & & & & &plane_XY[i][3], offg.TOP | offg.HCENTER); & &//画出爆炸效果图
& & & & & & & & & & & & & & & & & if(hitGround[i]==1) life--;
& & & & & & & & & & & & & & & & & & hitGround[i]++;
& & & & & & & & & & & & & & & & & }else if (hitGround[i] &= explode.length) {
& & & & & & & & & & & & & & & & & & //hitGround[i] = 0;
& & & & & & & & & & & & & & & & & & isBombGround[i]= false;
& & & & & & & & & & & & & & & & & & isSendBomb[i] = false;
& & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & } else
& & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & offg.drawImage(bomb, plane_XY[i][2], plane_XY[i][3], offg.TOP | offg.HCENTER);
& & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & & & } & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //end &一般情况
& & & & & & & & & & g.drawImage(offimg, 0, 0, 20); & & & & & & & & & & & & & & & & & & & & & & &//将临时画布一次画出来,避免屏幕抖动
& & & & & & & & & & & &
& & & & & & & & }
& & & & & & & & else if(!isKill())& & & & & & & & & & & & & & &
& & & & & & & & {
& & & & & & & & & & & & /***********************************************
& & & & & & & & & & & & 以下游戏暂停过程绘图
& & & & & & & & & & & & ***********************************************/ & && &
& & & & & & & & & & & & g.drawImage(go.getImage(&/Pause.png&),getWidth()/2,getHeight()/2,g.HCENTER|g.VCENTER);& & & & &
& & & & & & & & & & & &
& & & & & & & & }
& & & & & & & & else
& & & & & & & & {
& & & & & & & & & & & & /***********************************************
& & & & & & & & & & & & 以下游戏结束过程绘图
& & & & & & & & & & & & ***********************************************/ & && &
& & & & & & & & & & & & g.drawImage(go.getImage(&/Gameover.png&),getWidth()/2,getHeight()/2,g.HCENTER|g.VCENTER); & & & & & & &
& & & & & & & & & & & & & & & & & & & &
& & & & } & & &
& & & & }
& & & & public void update() {
& & & & & & & & /***********************************************
& & & & & & & & 以下是游戏线程处理
& & & & & & & & ***********************************************/ & &
& & & & & checkStage();
& & & & & if(!isNewStage) updatePos();
& & & & & repaint(); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//调用重画repaint()方法
& & & & & & & & serviceRepaints();
& & & & }
& & & & & private void updatePos() {
& & & & & & rotateGun(); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//转动大炮的瞄准角度
& & & & & & updateShot(); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //更新炮弹
& & & & & & updatePlane(); & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//更新飞机的位置
& & & & & & updateState();
& & & & & }
& & & & & private void updateState(){
& & & & & & for (int i = 0; i & plane.length; i++) {
& & & & & & & for(int j = 0;j&shot.length;j++){
& & & & & & & //isShotPlane
& & & & & & & if (Math.abs(plane_XY[i][0] - shot_x[j]) & (plane[i].getWidth() / 2 -3 ) &&
& & & & & & & & & (plane_XY[i][1] + plane[i].getHeight()) &= (shot_y[j] + 5) && (shot_y[j]+shot[j].getHeight() ) & plane_XY[i][1] &&
& & & & & & & & & !isShotPlane[i] && isFly[i]) {
& & & & & & & & isShotPlane[i] = true;
& & & & & & & & isFly[i] = false;
& & & & & & & & shotReset(j);
& & & & & & & }
& & & & & & & if(isSendBomb[i]){
& & & & & & & & //isBombShot
& & & & & & & & if (Math.abs(plane_XY[i][2] - shot_x[j]) & (bomb.getWidth() / 2 + shot[j].getWidth() / 2) &&
& & & & & & & & & & (plane_XY[i][3] + bomb.getHeight()) &= shot_y[j] && (shot_y[j]+shot[j].getHeight()) & plane_XY[i][3] &&
& & & & & & & & & & !isBombShot[i] && isSendBomb[i]) {
& & & & & & & & & shotReset(j);
& & & & & & & & & isBombShot[i] = true;
& & & & & & & & } else
& & & & & & & & //isBombGun
& & & & & & & & if (Math.abs(WIDTH / 2 - plane_XY[i][2]) & (bomb.getWidth() / 2 + gun[0].getWidth() / 2) &&
& & & & & & & & & & HEIGHT * 4 / 5 + 5 &= (plane_XY[i][3] + bomb.getHeight()) && !isBombGun[i] && isSendBomb[i]) {
& & & & & & & & & isBombGun[i] = true;
& & & & & & & & } else
& & & & & & & & //isBombGround
& & & & & & & & if (plane_XY[i][3] + bomb.getHeight() &&= HEIGHT && plane_XY[i][2] & 0 &&
& & & & & & & & & & plane_XY[i][2] & WIDTH && !isBombGround[i] && isSendBomb[i]) {
& & & & & & & & & isBombGround[i] = true;
& & & & & & & & }
& & & & & & & }
& & & & & & }
& & & & & }
& & & & }
& & & & & private void rotateGun() {
& & & & & & if(rotate){
& & & & & & if (gun_left) {
& & & & & & & if (degree &= 90) {
& & & & & & & & degree = 90;
& & & & & & & }
& & & & & & & else {
& & & & & & & & degree += 30;
& & & & & & & }
& & & & & & }
& & & & & & if (gun_right) {
& & & & & & & if (degree &= -90) {
& & & & & & & & degree = -90;
& & & & & & & }
& & & & & & & else {
& & & & & & & & degree -= 30;
& & & & & & & }
& & & & & & }
& & & & & & switch (degree) {
& & & & & & & case 0:
& & & & & & & & cgun = gun[0];
& & & & & & & & cdegree = 0;
& & & & & & & & break;
& & & & & & & case 30:
& & & & & & & & cgun = gun[1];
& & & & & & & & cdegree = 0;
& & & & & & & & break;
& & & & & & & case 60:
& & & & & & & & cgun = gun[2];
& & & & & & & & cdegree = 0;
& & & & & & & & break;
& & & & & & & case 90:
& & & & & & & & cgun = gun[0];
& & & & & & & & cdegree = 90;
& & & & & & & & break;
& & & & & & & case -30:
& & & & & & & & cgun = gun[2];
& & & & & & & & cdegree = 270;
& & & & & & & & break;
& & & & & & & case -60:
& & & & & & & & cgun = gun[1];
& & & & & & & & cdegree = 270;
& & & & & & & & break;
& & & & & & & case -90:
& & & & & & & & cgun = gun[0];
& & & & & & & & cdegree = 270;
& & & & & & & & break;
& & & & & & & default:
& & & & & & & & break;
& & & & & & }
& & & & & & rotate = false;
& & & & & }else{
& & & & & & rotatedelaycount++;
& & & & & & if(rotatedelaycount&=20){
& & & & & & & rotate = true;
& & & & & & }
& & & & & }
& & & & }
& & & & & private void updateShot() {
& & & & & & for(int j=0;j&shot.length;j++){
& & & & & & if (fire[j]) { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//如果发射了炮弹 则不断更新炮弹的位置
& & & & & & & switch (tdegree[j]) {
& & & & & & & & case 0:
& & & & & & & & & shot_y[j] -= 6;
& & & & & & & & & break;
& & & & & & & & case 30:
& & & & & & & & & shot_x[j] -= 3;
& & & & & & & & & shot_y[j] -= 6;
& & & & & & & & & break;
& & & & & & & & case 60:
& & & & & & & & & shot_x[j] -= 6;
& & & & & & & & & shot_y[j] -= 3;
& & & & & & & & & break;
& & & & & & & & case 90:
& & & & & & & & & shot_x[j] -= 6;
& & & & & & & & & shot_y[j] = HEIGHT * 4 / 5;
& & & & & & & & & break;
& & & & & & & & case -30:
& & & & & & & & & shot_x[j] += 3;
& & & & & & & & & shot_y[j] -= 6;
& & & & & & & & & break;
& & & & & & & & case -60:
& & & & & & & & & shot_x[j] += 6;
& & & & & & & & & shot_y[j] -= 3;
& & & & & & & & & break;
& & & & & & & & case -90:
& & & & & & & & & shot_x[j] += 6;
& & & & & & & & & shot_y[j] = HEIGHT * 4 / 5;
& & & & & & & & & break;
& & & & & & & & default:
& & & & & & & & & break;
& & & & & & & }
& & & & & & & if (shot_y[j] & 0 || shot_x[j] & WIDTH || shot_x[j] & 0) { & & & & & & & &//只有炮弹出了屏幕才可以
& & & & & & & & shotReset(j);
& & & & & & & }
& & & & & & }
& & & & & & else { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//如果没有发射 则不断将炮弹发射的角度用当前角度更新
& & & & & & & tdegree[j] = degree;
& & & & & & }
& & & & & }
& & & & & }
& & & & & private void checkPlaneOut(int i){
& & & & & & if(i%2==0) {
& & & & & & & & if (plane_XY[i][0] & 0) out[i] = true; else out[i] = false;
& & & & & & & } else {
& & & & & & & & & if (plane_XY[i][0] & WIDTH) out[i] = true; else out[i] = false;
& & & & & & & & }
& & & & & & & }
& & & & & private void updatePlane() {
& & & & & & fly = Math.abs(rand.nextInt() % difficulty); & & & & & & & & & & & & & & & &//根据难度变量的改变 修改飞机出发的频率
& & & & & & for (int i = 0; i & plane.length; i++) {
& & & & & & & checkPlaneOut(i);
& & & & & & & if (out[i] || !isFly[i]) {
& & & & & & & & if(!isSendBomb[i] && i==fly){
& & & & & & & & & tfly = fly;
& & & & & & & & & planeReset(i) ;
& & & & & & & & & isFly[i] = true ;
& & & & & & & & }
& & & & & & & }
& & & & & & & if (isFly[i] ) { & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//如果第I只飞机起飞了
& & & & & & & & plane_XY[i][0] += plane_XY[i][5];
& & & & & & & & plane_XY[i][1] += 1; & & & & & & & & & & & & & & & & & & & & & & & & & &//Y坐标则以1的单位递增 形成飞机向下飞的效果
& & & & & & & & if(i%2==1){
& & & & & & & & & if(plane_XY[i][0]&=plane_XY[i][2]&&plane_XY[i][0] + plane_XY[i][5]&plane_XY[i][2] && !isSendBomb[i]){
& & & & & & & & & & plane_XY[i][3] = plane_XY[i][1];
& & & & & & & & & & isSendBomb[i] = true;
& & & & & & & & & }
& & & & & & & & }else{
& & & & & & & & & if(plane_XY[i][0]&=plane_XY[i][2]&&plane_XY[i][0] + plane_XY[i][5]&plane_XY[i][2] && !isSendBomb[i]){
& & & & & & & & & & plane_XY[i][3] = plane_XY[i][1];
& & & & & & & & & & isSendBomb[i] = true;
& & & & & & & & & }
& & & & & & & & }
& & & & & & & }
& & & & & & & if (isSendBomb[i]) { & & & & & & & & & & & & & & & & & & & & & & & & & & &//如果不允许投弹 则有一个炸弹处在屏幕中下落状态
& & & & & & & & plane_XY[i][3] += bomb_move_step_h; & & & & & & & & & & & & & & & & & & //炸弹以bomb_move_step_h为单位,向下运动
& & & & & & & }
& & & & & & } & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //end for
& & & & & }
& & & & & private int getBombX() {
& & & & & & bombX = Math.abs(rand.nextInt() % (WIDTH*2)); & & & & & & & & & & & & & & & //产生一个-5~WIDTH+5之间的随机数,来确定投弹的X坐标,
& & & & & & return bombX; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //只有X在屏幕范围才投弹 从而形成不一定每架飞机过都投弹的效果
& & & & & }
& & & & & private void planeReset(int i) {
& & & & & & planeSpeed = &Math.abs(rand.nextInt() % 3)+3 ; & & & & & & & & & & & & & & &//产生速度
& & & & & & plane_XY[i][1] &= &Math.abs(rand.nextInt() % HEIGHT/6); & & & & & & & & & & //飞机起飞的Y坐标
& & & & & & if (i % 2 == 0) { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //确定起飞的X坐标
& & & & & & & plane_XY[i][0] = WIDTH;
& & & & & & & plane_XY[i][5] = -1*planeSpeed; & & & & & & & & & & & & & & & & & & & & & //确定速度
& & & & & & } else if(i%2==1){
& & & & & & & plane_XY[i][0] = 0;
& & & & & & & plane_XY[i][5] = planeSpeed;
& & & & & & }
& & & & & & plane_XY[i][2] = getBombX(); & & & & & & & & & & & & & & & & & & & & & & & &//投弹的X坐标
& & & & & & plane_XY[i][3] = 0; & &//投弹的Y坐标
& & & & & & hitPlane[i] = 0;
& & & & & & hitBomb[i] = 0;
& & & & & & hitGun[i] = 0;
& & & & & & hitGround[i] = 0;
& & & & & & isShotPlane[i] = false;
& & & & & & isSendBomb[i] = false;
& & & & & & isBombShot[i] = false;
& & & & & & isBombGun[i] = false;
& & & & & & isBombGround[i] = false;
& & & & & & isFly[i] = false; & & &//飞机可以飞
& & & & & & out[i] = false;
& & & & & }
& & & & & private void shotReset(int j) { & & & & & & & & & & & & & & & & & & & & & & & //炮弹复位
& & & & & & shot_x[j] = WIDTH / 2;
& & & & & & shot_y[j] = HEIGHT * 4 / 5 + 7;
& & & & & & fire[j] = false; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//允许发射下一颗炮弹
& & & & & & tdegree[j] = degree; & & & & & & & & & & & & & & & & & & & & & & & & & & & &//将当前的角度赋给临时的炮弹发射角度
& & & & & }
& & & & & private void checkStage() {
& & & & & & if (life == 0) {
& & & & & & & gameover = true;
& & & & & & & doGameOver();
& & & & & & } else if (left_plane &= 0) {
& & & & & & & if (stage & maxstage) {
& & & & & & & & initPlot();
& & & & & & & }else {
& & & & & & & & win = true;
& & & & & & & & gameover = true;
& & & & & & & & doGameOver();
& & & & & & & }
& & & & & & }
& & & & & & if(isNewStage){
& & & & & & & stageinterval++;
& & & & & & & if(stageinterval&=20){
& & & & & & & & isNewStage=false;
& & & & & & & }
& & & & & & }
& & & & & }
& & & & public void keyPressed(int keyCode)
& & & & {
& & & & & & & & switch(keyCode)
& & & & & & & & {
& & & & & & & & & & & & case SOFTKEY1:
& & & & & & & & & & & & & & & & if(isStop())
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & resume();
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & else
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & stop();
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & repaint();
& & & & & & & & & & & & & & & & break;
& & & & & & & & & & & & case SOFTKEY2:
& & & & & & & & & & & & & & & & kill();
& & & & & & & & & & & & & & & & go.changeCanvas(go.CVS_MAIN, true);
& & & & & & & & & & & & & & & & break;
& & & & & & & & }
& & & & & & & & & & & & & & & &
& & & & & & & & if(!isStop())
& & & & & & & & {
& & & & & & & & & & & & switch(getGameAction(keyCode))
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & /***********************************************
& & & & & & & & & & & & & & & & 以下是游戏进行过程按键处理
& & & & & & & & & & & & & & & & ***********************************************/ & && &
& & & & & & & & & & & & & & & case LEFT:
& & & & & & & & & & & & & & & & gun_left = true;
& & & & & & & & & & & & & & & & rotateGun();
& & & & & & & & & & & & & & & & break;
& & & & & & & & & & & & & & & case RIGHT:
& & & & & & & & & & & & & & & & gun_right = true;
& & & & & & & & & & & & & & & & rotateGun();
& & & & & & & & & & & & & & & & break;
& & & & & & & & & & & & & & & case FIRE:
& & & & & & & & & & & & & & & case UP:
& & & & & & & & & & & & & & & & & if(shotNum&=shot.length || shotNum==0) {
& & & & & & & & & & & & & & & & & & fireinterval = 4;
& & & & & & & & & & & & & & & & & & shotNum = 0;
& & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & if (!fire[shotNum]) {
& & & & & & & & & & & & & & & & & & if(fireinterval&4) fireinterval++;
& & & & & & & & & & & & & & & & & & if(fireinterval&=4){
& & & & & & & & & & & & & & & & & & & fire[shotNum] = true;
& & & & & & & & & & & & & & & & & & & fireinterval = 0;
& & & & & & & & & & & & & & & & & & & shotNum ++ ;
& & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & break;& & & & & & & & &
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & else
& & & & & & & & {
& & & & & & & & & & & & switch(keyCode)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & case FIRE:
& & & & & & & & & & & & & & & & & & & & if(gameover)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & kill();
& & & & & & & & & & & & & & & & & & & & & & & & go.changeCanvas(go.CVS_MAIN, true);
& & & & & & & & & & & & & & & & & & & & } & & & & & & &
& & & & & & & & & & & & & & & & & & & & break;
& & & & & & & & & & & & }
& & & & & & & & }
& & & & }
& & & & & & & &
& & & & public void keyReleased(int keyCode)
& & & & { & & & & & & &
& & & & & & & & if(!isStop()) &
& & & & & & & & & & & & switch(getGameAction(keyCode))
& & & & & & & & & & & & { & & & & & & & & & & &
& & & & & & & & & & & & & & & & /***********************************************
& & & & & & & & & & & & & & & & 以下是游戏进行过程按键处理
& & & & & & & & & & & & & & & & ***********************************************/ & && &
& & & & & & & & & & & & & & & case LEFT:
& & & & & & & & & & & & & & & & gun_left = false;
& & & & & & & & & & & & & & & & break;
& & & & & & & & & & & & & & & case RIGHT:
& & & & & & & & & & & & & & & & gun_right = false;
& & & & & & & & & & & & & & & & break;
& & & & & & & & & & & & & & & case FIRE:
& & & & & & & & & & & & & & & case UP:
& & & & & & & & & & & & & & & & fireinterval = 4;
& & & & & & & & & & & & & & & & break;& & & & & & & & &
& & & & & & & & & & & & }
& & & & & & & & else
& & & & & & & & & & & & switch(getGameAction(keyCode))
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & /***********************************************
& & & & & & & & & & & & & & & & 以下是游戏结束或暂停过程按键处理
& & & & & & & & & & & & & & & & ***********************************************/ & && &
& & & & & & & & & & & &
& & & & & & & & & & & & }
& & & & }
& & & & & public void doGameOver(){
& & & & & & & & kill();
& & & & & & & & Score highscore = new Score(go.STR_DBNAME,5,5000);
& & & & & & & & if(gameover){
& & & & & & & & & & & & if(highscore.isHighScore(score)){
& & & & & & & & & & & & & & & & go.setScore(score);
& & & & & & & & & & & & & & & & go.changeCanvas(go.CVS_INPUT, true);
& & & & & & & & & & & & }else{
& & & & & & & & & & & & & & & & go.changeCanvas(go.CVS_MAIN, true);
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & }
& & & & & private void updateLeftPlane(int i){
& & & & & & left_plane--; & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //玩家的任务数减1
& & & & & & if (i & 2) { & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &//这里是根据被击中的不同种类飞机,对玩家的成绩进行更新
& & & & & & & score += 100;
& & & & & & }
& & & & & & else if (i & 4 && i & 2) {
& & & & & & & score += 150;
& & & & & & }
& & & & & & else {
& & & & & & & score += 200;
& & & & & & }
& & & & & }
- 下载整个
相关源码/软件:
- 简单的JAVA计算器,简单进行数学运算,用到AWT,swing界面类。这个计算器具有退格功能,就是输...
- Java Maze3D迷宫游戏源码,浏览器上只要安上JAVA解释器就能运行,三维显示迷宫,点击 "N...
- 可以双人对战的Java版五子棋游戏,好像用JAVA写的还不多哦,JAR包可以直接运行,程序最好在Ec...
- Java写的桌面放大镜,有JAVA环境的可以运行一下,适合初学者学习。
- Java版的传奇私服登录器,附有开发源代码,运行于Eclipse,喜欢JAVA的朋友们可以好好研究一...
- 一款Java版的电子宠物游戏源代码,非常简单的那种,不是手机游戏,可作为学习资料参考一下。
- Java版PRG游戏——跳动的牛仔,源代码完整,前两年的流行游戏,学习JAVA游戏编程的朋友可以参考...
- 一套Java编写的战棋游戏源代码,感谢网友的提供,有兴趣的编译一下。
- Java游戏中的AStar算法源代码,根据以往网络上的代码改编,给学习J2me的朋友一些参考,有的地...
- J2me游戏FC恶魔城源代码,本程序是偶半年前水平的作品,有许多地方并没有达到商业代码的程度。但是这...
- 用DELPHI实现的断点续传,这个问题曾经是一个很经典的问题,不过现在已经不是什么稀罕的了,不过相信...
- 根据网上不成型的实例自己修改的,现在又加入了全新的词库引擎,准确率很高了,还扩充了词语联想功能,繁简...
- 网上虽然有很多这种程序,但多半都捆绑有木马或是病毒,用着很是不放心,所以自己就写了一个,可以添加服务...
- 在状态栏加入载入进度条,看上去有点专业,类似IE的网页载入进度条。
- 想打什么就打什么,可以像WORD一样对打印的内容进行编辑,重新排版等,可以打印预览,含有示例程序。
- 大家都知道著名的BeyondCompare软件吧,这一个小程序也只是实现了它的很小的一部分功能。只是...
- 把文件扩展名更改为指定的格式,也就是改变以了文件属性,用DELPHI编程实现,希望对初学者有用处。
- 比较不错了,还可以下载歌曲,多任务多线程的下载,也可以把它当作Mp3播放器,除此之外,还有很多小功能...
- DELPHI手机飞信发送软件,用到了Delphi自带Indy9三方控件,参考了PHP版的飞信发送原理...
- 只有一个文本文件,请拷贝进你的DELPHI工程里面编译一下,这个代码大家都说好,也不知道出处,所以就...}

我要回帖

更多关于 飞机射击游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信