⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamecanvas.java

📁 飞行类射击小游戏
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                image[9].getHeight() / 2;
            bossBullet4[i][0] = 1;
            break;

          }
        }
      }
    }
  }

  private void bossBullet() {
    bossBulletInit();
    for (int i = 0; i < bossBullet.length; i++) {
      if (bossBullet[i][0] == 1)
        g.drawImage(image[9], bossBullet[i][1], bossBullet[i][2], 0);

    }
    bossBulletMove(2, 5, bossBullet);
  }

  private void bossBullet1() {
    bossBulletInit1();
    for (int i = 0; i < bossBullet1.length; i++) {
      if (bossBullet1[i][0] == 1)
        g.drawImage(image[9], bossBullet1[i][1], bossBullet1[i][2], 0);

    }
    bossBulletMove(0, 5, bossBullet1);
  }

  private void bossBullet2() {
    bossBulletInit2();
    for (int i = 0; i < bossBullet2.length; i++) {
      if (bossBullet2[i][0] == 1)
        g.drawImage(image[9], bossBullet2[i][1], bossBullet2[i][2], 0);

    }
    bossBulletMove(1, 5, bossBullet2);
  }

  private void bossBullet3() {
    bossBulletInit3();
    for (int i = 0; i < bossBullet3.length; i++) {
      if (bossBullet3[i][0] == 1)
        g.drawImage(image[9], bossBullet3[i][1], bossBullet3[i][2], 0);

    }
    bossBulletMove(3, 5, bossBullet3);
  }

  private void bossBullet4() {
    bossBulletInit4();
    for (int i = 0; i < bossBullet4.length; i++) {
      if (bossBullet4[i][0] == 1)
        g.drawImage(image[9], bossBullet4[i][1], bossBullet4[i][2], 0);

    }
    bossBulletMove(4, 5, bossBullet4);
  }

  private void bossBulletMove(int dir1, int speedY, int[][] bBullet) {
    for (int i = 0; i < bBullet.length; i++) {
      switch (dir1) {
        case 0:
          bBullet[i][1] -= 4;
          bBullet[i][2] += speedY;
          break;
        case 1:
          bBullet[i][1] -= 2;
          bBullet[i][2] += speedY;
          break;
        case 2:
          bBullet[i][2] += speedY;
          break;
        case 3:
          bBullet[i][1] += 2;
          bBullet[i][2] += speedY;
          break;
        case 4:
          bBullet[i][1] += 4;
          bBullet[i][2] += speedY;
          break;
      }
      if (bBullet[i][1] < 0 || bBullet[i][1] > width || bBullet[i][2] > height) {
        bBullet[i][0] = 0;

      }
    }
  }

  //敌机爆炸
  private void explode(int[][] i1, int[][] i2, Image image1, Image image2) {
    for (int i = 0; i < i1.length; i++) {
      if (i1[i][0] == 1) {
        for (int j = 0; j < i2.length; j++) {
          if (i2[j][0] == 1) {
            if (isIntersectingRect(i2[j][1], i2[j][2],
                                   image1.getWidth(),
                                   image1.getHeight(), i1[i][1],
                                   i1[i][2],
                                   image2.getWidth(), image2.getHeight())) {
              i1[i][0] = 0;
              i2[i][0] = 0;
              drawExplode(i1[i][1], i1[i][2]);
              if (i2[i][0] == 0) {
                score += 10;
              }
            }
          }
        }
      }
    }
  }
  //我方飞机爆炸
  private void explode(int[][] i1, Image image1, Image image2) {
    for (int i = 0; i < i1.length; i++) {
      if (i1[i][0] == 1) {
        if (isIntersectingRect(i1[i][1], i1[i][2],
                               image1.getWidth(),
                               image1.getHeight(), planeX+4,
                               planeY+2,
                               image2.getWidth()-8, image2.getHeight()-4)) {
            myHp-=5;
            g.setClip(planeX, planeY,
                      image[6].getWidth() / 2, image[6].getHeight());
            g.drawImage(image[6],
                        planeX - (frame * (image[6].getWidth() / 2)),
                        planeY, 0);
            g.setClip(0, 0, width, height);
            frame++;
            if (frame > 2)
              frame = 0;
              if(myHp<0){
                gameState = GAMEOVER;
              }
              i1[i][0] = 0;
          }
      }
    }
  }

  //boss爆炸
  private void bossExplode(int[][] i1, Image image1, Image image2) {
    for (int i = 0; i < i1.length; i++) {
      if (i1[i][0] == 1) {
        if (isIntersectingRect(i1[i][1], i1[i][2],
                               image1.getWidth(),
                               image1.getHeight(), bossX,
                               bossY,
                               image2.getWidth(), image2.getHeight())) {
          g.setClip(i1[i][1], i1[i][2] - 10,
                    image[6].getWidth() / 2, image[6].getHeight());
          g.drawImage(image[6],
                      i1[i][1] - (frame * (image[6].getWidth() / 2)),
                      i1[i][2] - 15, 0);
          g.setClip(0, 0, width, height);
          frame++;
          if (frame > 2) {
            frame = 0;
          }
          score += 10;
          bossHp -= 5;
          if(bossHp<200){
            bossBulletTime=200;
          }
          if(bossHp<0){
            gameState=GAMEOVER;
          }
          i1[i][0] = 0;
        }
      }
    }
  }

  //画爆炸
  private void drawExplode(int x, int y) {
    long nowTime = System.currentTimeMillis();
    if (nowTime - explodeTime > 100) {
      for (int frame = 0; frame < 2; frame++) {
        g.setClip(x, y,
                  image[6].getWidth() / 2, image[6].getHeight());
        g.drawImage(image[6],
                    x - (frame * (image[6].getWidth() / 2)),
                    y, 0);
        g.setClip(0, 0, width, height);

        frame++;
      }
      repaint();

    }
    explodeTime = System.currentTimeMillis();
  }

  //碰撞检测
  public static final boolean isIntersectingRect(int x1, int y1, int w1, int h1,
                                                 int x2, int y2, int w2, int h2) {
    if (y2 + h2 < y1 || y2 > y1 + h1 || x2 + w2 < x1 || x2 > x1 + w1)
      return false;
    return true;
  }
	private void ctrlLogo(){
		if(keyState!=0){
			gameState=MENU;
			keyState=0;
		}
	}
  //菜单按键
  private void ctrlMenu() {
    if ( (keyState & GAME_NUM2) != 0 || (keyState & GAME_UP) != 0) {
      menuChoose--;
      if (menuChoose < 0)
        menuChoose = menuString.length - 1;
        keyState &=~ GAME_NUM2;
      keyState &=~ GAME_UP;
    }
    if ( (keyState & GAME_NUM8) != 0 || (keyState & GAME_DOWN) != 0) {
      menuChoose++;
      if (menuChoose > menuString.length - 1)
        menuChoose = 0;
        keyState &=~ GAME_NUM8;
      keyState &=~ GAME_DOWN;
    }
    if ( (keyState & GAME_NUM5) != 0 || (keyState & GAME_FIRE) != 0) {
      switch (menuChoose) {
        case 0:
          gameState = LOAD;
          break;
        case 1:
          gameState = HELP;
          break;
        case 2:
          gameState = ABOUT;
          break;
        case 3:
          gameState = EXIT;
          break;
      }
      keyState &=~ GAME_NUM5;
      keyState &=~ GAME_FIRE;
    }
  }
  private void ctrlChange(){


    if((keyState & GAME_NUM4) != 0 || (keyState & GAME_LEFT) != 0){
      chooseX-=60;
      if(chooseX<60)
        chooseX=120;
      keyState &=~ GAME_NUM4;
      keyState &=~ GAME_LEFT;
    }
    if((keyState & GAME_NUM6) != 0 || (keyState & GAME_RIGHT) != 0){
      chooseX+=60;
      if(chooseX>120)
        chooseX=60;
      keyState &=~ GAME_NUM6;
      keyState &=~ GAME_RIGHT;
    }
    if((keyState & GAME_NUM5) != 0 || (keyState & GAME_FIRE) != 0){
      if (chooseX == 60) {
        bulletState = 0;
      }
      if (chooseX == 120) {
        bulletState = 1;
      }
      gameState = GAME;
      keyState &=~ GAME_NUM5;
      keyState &=~ GAME_FIRE;
    }
  }
  //游戏按键
  private void ctrlGame() {
    if ( (keyState & GAME_NUM2) != 0 || (keyState & GAME_UP) != 0)
      planeMove(5, 0);
    if ( (keyState & GAME_NUM8) != 0 || (keyState & GAME_DOWN) != 0)
      planeMove(5, 1);
    if ( (keyState & GAME_NUM4) != 0 || (keyState & GAME_LEFT) != 0) {
      planeMove(5, 2);
      myDir = LEFT;
    }
    if ( (keyState & GAME_NUM6) != 0 || (keyState & GAME_RIGHT) != 0) {
      planeMove(5, 3);
      myDir = RIGHT;
    }

    if ( (keyState & GAME_SLEFT) != 0) {
      gameState = MENU;
      keyState &=~GAME_SLEFT;
    }
    if ( (keyState & GAME_SRIGHT) != 0) {
      gameState = PAUSE;
      keyState &=~GAME_SRIGHT;
    }

  }
  private void ctrlPause(){
	if ( (keyState & GAME_NUM2) != 0 || (keyState & GAME_UP) != 0) {
      menuChoose1--;
      if (menuChoose1 < 0)
        menuChoose1 = pauseMenu.length - 1;
      keyState &=~ GAME_NUM2;
      keyState &=~ GAME_UP;
    }
    if ( (keyState & GAME_NUM8) != 0 || (keyState & GAME_DOWN) != 0) {
      menuChoose1++;
      if (menuChoose1 > pauseMenu.length - 1)
        menuChoose1 = 0;
      keyState &=~ GAME_NUM8;
      keyState &=~ GAME_DOWN;
    }
    if ( (keyState & GAME_NUM5) != 0 || (keyState & GAME_FIRE) != 0) {
      switch (menuChoose1) {
        case 0:
          gameState = GAME;
          break;
        case 1:
          gameState = MENU;
          break;
        case 2:
          gameState = EXIT;
          break;
      }
      keyState &=~ GAME_NUM5;
      keyState &=~ GAME_FIRE;
    }
    
  }
  //帮助按键
  private void ctrlHelp() {
    if ( (keyState & GAME_SLEFT) != 0) {
      gameState = MENU;
      keyState&=~GAME_SLEFT;
    }
  }

  //关于按键
  private void ctrlAbout() {
    if ( (keyState & GAME_SLEFT) != 0) {
      gameState = MENU;
      keyState&=~GAME_SLEFT;
    }
  }

  private void ctrlGameOver() {
    if ((keyState & GAME_SLEFT)!=0) {
      gameState = MENU;
      init();
      keyState&=~GAME_SLEFT;
    }
  }
  //按下按键
  protected void keyPressed(int keyCode) {
    switch (keyCode) {
      case KEY_UP:
        keyState |= GAME_UP;
        break;
      case KEY_DOWN:
        keyState |= GAME_DOWN;
        break;
      case KEY_LEFT:
        keyState |= GAME_LEFT;
        break;
      case KEY_RIGHT:
        keyState |= GAME_RIGHT;
        break;
      case KEY_FIRE:
        keyState |= GAME_FIRE;
        break;
      case KEY_NUM2:
        keyState |= GAME_NUM2;
        break;
      case KEY_NUM8:
        keyState |= GAME_NUM8;
        break;
      case KEY_NUM4:
        keyState |= GAME_NUM4;
        break;
      case KEY_NUM6:
        keyState |= GAME_NUM6;
        break;
      case KEY_NUM5:
        keyState |= GAME_NUM5;
        break;
      case LEFT_SOFT:
        keyState |= GAME_SLEFT;
        break;
      case RIGHT_SOFT:
        keyState |= GAME_SRIGHT;
        break;
    }
  }

  //松开按键
  protected void keyReleased(int keyCode) {
    keyState = 0;
    myDir = 0;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -