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

📄 foxcanvas.java

📁 一款java游戏,可以学习参考,类似"是男人就下一百层".
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
          imgSplash.dispose();
          System.gc();
          repaint();
        }
        break;
      case ST_MAINMENU: //主菜单
        DrawMainMenu(g);
        break;
      case ST_RUN: //新游戏提示
        DrawGameStart(g);
        break;
      case GAME_OVER_RESULT: //游戏结束,玩家输入姓名
        drawGameResult(g);
        break;
      case ST_GAMEINFO:
        DrawGameInfo(g);
        break;
      case ST_KEYINFO:
        DrawKeyInfo(g);
        break;
      case ST_HELP: //帮助
        DrawHelp(g);
        break;
      case ST_SETTING: //设置
        DrawSet(g);
        break;
      case ST_GAMEMENU: //游戏中的菜单
        DrawGameMenu(g);
        break;
      case ST_SCORELEVEL: //排行榜级别选择
        DrawScoreSelect(g);
        break;
      case ST_SCORE:
        DrawHighScore(g);
        break;
      case ST_GAMELEVEL: //游戏难度级别设定
        DrawGameSelect(g);
        break;
      case GAME_PLAY: //进入游戏
        if (bPause) {
          g.drawImage(imgBackSky, 0, 0);
          g.setColor(g.getColorOfRGB(0, 0, 255));
          g.drawString("拞抐", WIDTH / 2 - defFont.stringWidth("拞抐") / 2,
                       HEIGHT / 2);
        }
        else {
          drawBG(g);
          drawBoard(g);
          drawFramework(g);
          role.drawFox(g, boards);
        }
        break;
      case GAME_OVER_DIE: //狐狸死亡
        drawGameOverStage(g);
        break;
//      case GAME_INPUTNAME:
//        g.setColor(g.getColorOfRGB(0, 0, 0));
//        g.fillRect(0, 0, WIDTH, HEIGHT);
//        Display.setCurrent(new InputForm(this));
//        setSoftLabel(SOFT_KEY_1, "");
//        setSoftLabel(SOFT_KEY_2, "");
//        break;
      case GAME_PAUSE:
        g.setColor(g.getColorOfRGB(0, 0, 255));
        g.drawImage(imgBackSky, 0, 0);
        g.drawString("拞抐", WIDTH / 2 - defFont.stringWidth("拞抐") / 2,
                     HEIGHT / 2);
        break;
    }
    g.unlock(true);
  }

  void drawTitleString(Graphics g, String string, int y) {
    g.setColor(g.getColorOfRGB(0, 0, 255));
    g.drawString(string, WIDTH / 2 - defFont.stringWidth(string) / 2, y);
  }

//排行榜
  static int levelIndex = 0;
  static int levelListIndex = 0;

  //排行榜查看
  private void DrawHighScore(Graphics g) {
    if (iButton == 0) {
      iButton = 1;
      setSoftLabel(SOFT_KEY_2, "");
      setSoftLabel(SOFT_KEY_1, "栠傞");
    }
    int start = 0;
    g.drawImage(imgBackSky, 0, 0);
    switch (levelListIndex + 1) {
      case 1:
        start = 0;
        drawTitleString(g, "娙扨 Top5", 45);
        break;
      case 2:
        start = 5;
        drawTitleString(g, "晛捠 Top5", 45);
        break;
      case 3:
        start = 10;
        drawTitleString(g, "擄偟偄 Top5", 45);
        break;
    }
    g.setColor(g.getColorOfRGB(0, 0, 255));
    for (int i = 1, temp = start; i <= 5; i++, temp++) {
      g.drawString("No." + i,
                   60, 50 + i * 30);
      g.drawString(Integer.toString(numberList[temp]), 180, 50 + i * 30);
    }
  }

  //游戏开始的时候显示的效果画面
  private int gameStartCountW = 0, gameStartCountH = 0;
  public void DrawGameStart(Graphics g) {
    g.setColor(g.getColorOfRGB(255, 255, 255));
    g.fillRect(0, 0, WIDTH, HEIGHT);
    g.setColor(g.getColorOfRGB(85, 97, 116));
    if (10 * gameStartCountW < WIDTH && 10 * gameStartCountH < HEIGHT) {
      g.fillRect(WIDTH / 2 - (10 * gameStartCountW / 2),
                 HEIGHT / 2 - (10 * gameStartCountH / 2),
                 10 * gameStartCountW, 10 * gameStartCountH);
      gameStartCountW++;
      gameStartCountH++;

    }
    else {
      imgLogo = null;
      gameStartCountW = 0;
      gameStartCountH = 0;
      bPlay = true;
      setSoftLabel(SOFT_KEY_2, "\uFF92\uFF86\uFF6D\uFF70");
      setSoftLabel(SOFT_KEY_1, "拞抐");
      gameState = GAME_PLAY;
      System.gc();
    }
  }

//游戏结束的时候显示的效果画面
  private int gameOverCount = 0;
  public void gameOver(Graphics g) {
    g.setColor(g.getColorOfRGB(255, 255, 255));
    g.fillRect(0, 0, WIDTH, HEIGHT);
    g.setColor(g.getColorOfRGB(85, 97, 116));
    if (5 * gameOverCount < WIDTH / 2) {
      g.fillRect(0, 0, 5 * gameOverCount, HEIGHT);
      g.fillRect(0, 0, WIDTH, 5 * gameOverCount);
      g.fillRect(WIDTH - 5 * gameOverCount, 0, 5 * gameOverCount, HEIGHT);
      g.fillRect(0, HEIGHT - 5 * gameOverCount, WIDTH, 5 * gameOverCount);
      gameOverCount++;
    }
    else {
      gameOverCount = 0;
      midlet.terminate();
    }
  }

//画固定的背景
  int skyX, skyY;
  static Image imgBG;
  int clouds[] = {
      180, 180, 180};
  int cloudsBigX, cloudesBigY;
  int cloudsSmallX, cloudesSmallY;
  Random rnd = new Random();
  int frameY = HEIGHT;
  public void drawBG(Graphics g) {
    g.setColor(g.getColorOfRGB(255, 255, 255));
    g.fillRect(0, 0, WIDTH, HEIGHT);
//    g.drawImage(imgBG, 0, 0);
    for (int i = 0; i < WIDTH; i++) {
      g.drawImage(sky, i, 0);
    }
    for (int i = 0; i < 3; i++) {
      if (clouds[i] > -48) {
        clouds[i] -= i + 1;
      }
      else {
        clouds[i] = 240;
      }
    }
    g.drawImage(cloudsSmall, clouds[0], 90);
    g.drawImage(cloudsBig, clouds[1], 30);
    g.drawImage(cloudsSmall, clouds[2], 150);
  }

//木板外面的框子
  public void drawFramework(Graphics g) {
    for (int i = 0; i < 48; i++) {
      g.drawImage(sawtooth, i * 5, 20);
    }
    frameY -= boardSpeed;
    if (frameY <= 0) {
      frameY += HEIGHT;
    }
    g.drawImage(ImageFrame, 0, frameY);
    g.drawImage(ImageFrame, 0, frameY - HEIGHT);
    g.drawImage(ImageFramef, WIDTH - 5, frameY);
    g.drawImage(ImageFramef, WIDTH - 5, frameY - HEIGHT);
    g.drawImage(topBoard, 0, 0);
    drawLife(g);
  }

  private boolean bSaveScore;
  public void drawGameResult(Graphics g) {
    bPlay = false;
    int start = 0, end = 0;
    switch (levelIndex + 1) {
      //查找相应级别,每级别存成绩最高的5个玩家,存储位置Easy:0-4,Normal:5-9,Hard:10-14
      case 1:
        start = 0;
        end = 4;
        break;
      case 2:
        start = 5;
        end = 9;
        break;
      case 3:
        start = 10;
        end = 14;
        break;
    }
    g.drawImage(imgBackSky, 0, 0);
    drawTitleString(g, "寢 壥", 40);
    g.setColor(g.getColorOfRGB(0, 0, 255));
    g.drawString("Frost Down " + role.number,
                 (WIDTH - defFont.stringWidth("Frost Down " + role.number)) / 2,
                 110);
    g.drawString("Record Down " + numberList[start],
                 (WIDTH - defFont.stringWidth("Record Down " + numberList[start])) /
                 2, 140);
    if (role.number > numberList[end]) {
      g.drawString("Top5偵擖傝傑偟偨",
                   (WIDTH - defFont.stringWidth("Top5偵擖傝傑偟偨")) / 2, 170);
    }
    if (iButton == 0) {
      iButton = 1;
      if (role.number > numberList[end]) {
        bSaveScore = true;
        setSoftLabel(SOFT_KEY_2, "SAVE");
      }
      else {
        setSoftLabel(SOFT_KEY_2, "");
        bSaveScore = false;
      }
      setSoftLabel(SOFT_KEY_1, "栠傞");
    }
  }

  private long gameOverStart;
  private boolean bGameOver = true;
  public void drawGameOverStage(Graphics g) {
    if (bGameOver) {
      iButton = 0;
      setSoftLabel(SOFT_KEY_1, "");
      setSoftLabel(SOFT_KEY_2, "");
      imgGameOver = createImage("gameOver");
      bGameOver = false;
      gameOverStart = System.currentTimeMillis();
    }
    else {
      g.drawImage(imgGameOver, 0, 0);
      if (System.currentTimeMillis() - gameOverStart > 2000) {
        gameState = GAME_OVER_RESULT;
        bGameOver = true;
        imgGameOver = null;
        iButton = 0;
        readDB();
        System.gc();
      }
    }
  }

//画血和层数
  boolean bDead = false;
  long deadDelay;
  private int[] score = {
      0, 0, 0, 0};
  public void drawLife(Graphics g) {
    score[0] = role.number / 1000;
    score[1] = role.number / 100 - role.number / 1000 * 10;
    score[2] = role.number / 10 - role.number / 100 * 10;
    score[3] = role.number % 10;
    for (int i = 0; i < score.length; i++) {
      drawClipImage(g, number, 164 + 9 * i, 5, 7 * score[i], 0, 7, 8);
    }
    if (role.life > 0) {
      for (int i = 0; i < role.life; i++) {
        g.drawImage(life, 38 + 5 * i, 5);
      }
    }
    else { //dead
      gameState = GAME_OVER_DIE;
//      if (!bDead) {
//        bDead = true;
//        deadDelay = System.currentTimeMillis();
//      }
//      if (System.currentTimeMillis() - deadDelay > 100) {
//        bDead = false;
//        gameState = GAME_OVER_DIE;
//      }
    }
  }

// 画移动的板子(坐标和类型)1.普通木板;2.弹簧;3草板;4钉板;5左滚板;6右滚板
  public static int[][] boards = { //第一维X ,第二维Y ,第三维Type ,第四维动画的imgIndex,第五维是否已经踩过了
      {
      95, 256, 1, 0, 0}
      , {
      20, 256 - 30, 2, 0, 0}
      , {
      69, 256 - 30 * 2, 3, 0, 0}
      , {
      15, 256 - 30 * 3, 1, 0, 0}
      , {
      95, 256 - 30 * 4, 5, 0, 0}
      , {
      90, 256 - 30 * 5, 6, 0, 0}
      , {
      54, 256 - 30 * 6, 1, 0, 0}
      , {
      44, 256 - 30 * 7, 2, 0, 0}
      , {
      5, 256 - 30 * 8, 4, 0, 0}
  };

  public void initBoards() {
    initBasicX();
    for (int i = 0; i < basicX.length; i++) {
      boards[i][0] = i != 4 ? basicX[i] : 100;
      boards[i][1] = 320 - 40 * i;
      boards[i][2] = 1; //0--5 + 1
      boards[i][3] = 0;
      boards[i][4] = 0;
    }
    boards[4][4] = 1;
  }

  int[] basicX = {
      95, 20, 69, 15, 145, 120, 54, 44, 5};
  public void initBasicX() {
    Vector v = new Vector();
    for (int i = 0; i < basicX.length; i++) {
      v.addElement(new Integer(basicX[i]));
    }
    int temp = 0;
    for (int i = 0; i < basicX.length; i++) {
      temp = Math.abs(rnd.nextInt() % v.size());
      basicX[i] = Integer.parseInt(v.elementAt(temp).toString());
      v.removeElementAt(temp);
    }
  }

// 画移动的板子1.普通木板;2.弹簧;3草板;4钉板;5左滚板;6右滚板
  static int timer = 0;
  static boolean isStart = false;

  public void drawBoard(Graphics g) {
    for (int i = 0; i < boards.length; i++) {
      switch (boards[i][2]) {
        case 1:
          g.drawImage(boardSingle, boards[i][0], boards[i][1]);
          break;
        case 2:
          if (boards[i][4] == 0) {
            g.drawImage(springboardsingle, boards[i][0], boards[i][1]);
          }
          else {
            drawClipImage(g, springboard, boards[i][0], boards[i][1],
                          46 * boards[i][3], 0, 46, 8);
            if (++boards[i][3] == 3) {
              boards[i][3] = 0;
              boards[i][4] = 0;
            }
          }
          break;
        case 3:
          if (boards[i][3] == 3) {
            drawClipImage(g, grassboard, boards[i][0], boards[i][1],
                          46 * 2, 0, 46, 22);
          }
          else
          if (boards[i][4] == 0 || timer < 3) {
            g.drawImage(grassboardSingle, boards[i][0], boards[i][1]);
          }
          else {
            drawClipImage(g, grassboard, boards[i][0], boards[i][1],
                          46 * boards[i][3], 0, 46, 22);
            ++boards[i][3];
          }
          break;
        case 4:
          g.drawImage(nailboard, boards[i][0], boards[i][1]);
          break;
        case 5:
          drawClipImage(g, scrollboard, boards[i][0], boards[i][1], 0,
                        5 * boards[i][3], 46, 5);
          boards[i][3] = boards[i][3] < 2 ? boards[i][3] + 1 : 0;
          break;
        case 6:
          drawClipImage(g, scrollboardf, boards[i][0], boards[i][1], 0,
                        5 * boards[i][3], 46, 5);
          boards[i][3] = boards[i][3] < 2 ? boards[i][3] + 1 : 0;
          break;
      }
      if (boards[i][1] > 0) {
        boards[i][1] -= boardSpeed;
      }
      else {
        role.number = i % 5 == 0 ? role.number + 1 : role.number;
        int num = rnd.nextInt() % 50;
        int type = Math.abs(rnd.nextInt() % 6) + 1;
        boards[i][0] = boards[i][0] + num > 240 - 59 || boards[i][0] + num < 5 ?
            boards[i][0] : boards[i][0] + num;
        int previousIndex = 0;
        previousIndex = i == 8 ? 0 : i + 1;
        boards[i][1] = boards[previousIndex][1] + 40;
        boards[i][2] = type;
        boards[i][3] = 0;
        boards[i][4] = 0;
      }
    }
    if (isStart) {
      timer++;
    }
  }

//  class InputForm
//      extends Panel
//      implements ComponentListener {
//    public TextBox t = new TextBox("", 4, 1, TextBox.DISPLAY_ANY);
//    Button btOK = new Button("SAVE");
//    Button btCancel = new Button("栠傞");
//    FoxCanvas canvas;
//    InputForm(FoxCanvas c) {
//      setTitle("僾儗僀儎乕曐懚");
//      this.add(t);
//      this.add(btCancel);
//      this.add(btOK);
//      this.setComponentListener(this);
//      this.canvas = c;
//    }
//
//    public void componentAction(Component c, int type, int param) {
//      if (c == btOK) {
//        String inputName = t.getText().trim();
//        if (inputName == null || inputName == "" || inputName.length() == 0) {
//          inputName = "Bbmf";
//        }
//        if (inputName.length() > 4) {
//          inputName = inputName.substring(0, 4);

⌨️ 快捷键说明

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