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

📄 ictankcanvas.java

📁 本j2me坦克游戏是在Nokia平台下开发的
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    }
  }

  private void gamePaint(Graphics g) {
    if (pauseStart) {
      g.setColor(0xffffff);
      g.fillRect(0, 0, width, height);
      g.drawImage(helpImage, 0, 0, 20);
    }
    else {

      boolean lifePos;
      int i, j;
      boolean victorFlag;
      grassPaint = false;
      g.setColor(0x3f, 0x3f, 0x3f);
      g.fillRect(0, 0, width, mapOffsetY);
      g.fillRect(0, 0, mapOffsetX, mapOffsetY + mapHeight);
      g.fillRect(mapOffsetX + mapWidth, 0, width - mapOffsetX - mapWidth,
                 mapOffsetY + mapHeight);
      //   g.fillRect(0, mapOffsetY + mapHeight, width, mapOffsetY);

      if (showLevel) {

        g.setColor(0);
        g.fillRect(0, 0, width, height);

        g.setColor(fadeCol, fadeCol, fadeCol);
        g.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD,
                               Font.SIZE_MEDIUM));
        g.drawString("第 " + level + " 关", width / 2, height / 2, 17);

        if (fadein) {
          if (fadeCol < 0xfc) {
            //fadeCol += 4;
            fadeCol += 16;
            if (fadeCol > 0xfc) {
              fadeCol -= 16;
              fadein = false;
            }
          }
          else {
            fadein = false;
          }
        }
        else {
          if (fadeCol > 0) {
            // fadeCol -= 4;
            fadeCol -= 16;
            if (fadeCol < 0) {
              showLevel = false;
            }
          }
          else {
            showLevel = false;
          }
        }
        return;
      }

      lifePos = (width > height) ? true : false;

      if (firstTime || pauseBack) {
        if (firstTime) {
          s = new Sound(beginlist, 1);
          //    s.play(1);
        }
        victorFlag = false;
        g.setColor(0x3f, 0x3f, 0x3f);
        g.fillRect(0, 0, width, height);

        // draw the map
        for (i = 0; i < mapHeight / tileW; i += 2) {
          for (j = 0; j < mapWidth / tileW; j += 2) {
            switch (mapInfo[ (i * mapWidth / tileW) + j]) {
              case 0:
                g.drawImage(tile1, mapOffsetX + j * tileW,
                            mapOffsetY + i * tileW, g.TOP | g.LEFT);
                break;
              case 1:
                g.drawImage(tile2, mapOffsetX + j * tileW,
                            mapOffsetY + i * tileW, g.TOP | g.LEFT);
                break;
              case 2:
                g.drawImage(tile3, mapOffsetX + j * tileW,
                            mapOffsetY + i * tileW, g.TOP | g.LEFT);
                break;
              case 3:
                g.drawImage(tile4, mapOffsetX + j * tileW,
                            mapOffsetY + i * tileW, g.TOP | g.LEFT);
                break;
              case 4:
              case 5:
              case 6:
              case 7:
                if (!victorFlag) {
                  g.drawImage(victor, mapOffsetX + j * tileW,
                              mapOffsetY + i * tileW, g.TOP | g.LEFT);
                  victorFlag = true;
                }
              default:
                break;
            }
          }
        }

        //   g.drawImage(onTimer, 150, 150, g.TOP|g.LEFT);
        g.setColor(0x0);

        if (lifePos) {
          g.drawImage(logo, mapOffsetX + mapWidth + 2, mapOffsetY + 2,
                      g.TOP | g.LEFT);
          g.drawImage(ic, mapOffsetX + mapWidth + 2, mapOffsetY + mapHeight / 2,
                      g.TOP | g.LEFT);
        }
        else {
          g.drawImage(logo, mapOffsetX + 2, mapOffsetY + mapHeight + 2,
                      g.TOP | g.LEFT);
          g.drawImage(ic, mapOffsetX + mapWidth / 2, mapOffsetY + mapHeight + 2,
                      g.TOP | g.LEFT);
        }

        firstTime = false;
        pauseBack = false;

      }

      g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_ITALIC,
                             Font.SIZE_SMALL));

      if (lifePos) { //horizontal
        g.setColor(0x3f, 0x3f, 0x3f);
        g.fillRect(mapOffsetX + mapWidth + 1, mapOffsetY + hero.frameHeight + 3,
                   20, fontHeight);
        g.fillRect(mapOffsetX + mapWidth + 1,
                   mapOffsetY + mapHeight / 2 + hero.frameHeight + 2, 20,
                   fontHeight);

        g.setColor(0xff, 0xff, 0xfe);
        g.drawString(" " + life, mapOffsetX + mapWidth + 2,
                     mapOffsetY + hero.frameHeight + 1, g.TOP | g.LEFT);
        g.drawString(" " + numEnemy, mapOffsetX + mapWidth + 2,
                     mapOffsetY + mapHeight / 2 + hero.frameHeight + 0,
                     g.TOP | g.LEFT);
      }
      else { //vertical
        g.setColor(0x3f, 0x3f, 0x3f);
        g.fillRect(mapOffsetX + hero.frameWidth + 3, mapOffsetY + mapHeight + 1,
                   20, fontHeight);
        g.fillRect(mapOffsetX + mapWidth / 2 + hero.frameWidth + 1,
                   mapOffsetY + mapHeight + 1, 20, fontHeight);

        g.setColor(0xff, 0xff, 0xfe);
        g.drawString(" " + life, mapOffsetX + hero.frameWidth + 2,
                     mapOffsetY + mapHeight + 1, g.TOP | g.LEFT);
        g.drawString(" " + numEnemy,
                     mapOffsetX + mapWidth / 2 + hero.frameWidth,
                     mapOffsetY + mapHeight + 1, g.TOP | g.LEFT);
      }

      g.setColor(0xffffff);
      g.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN,
                             Font.SIZE_MEDIUM));
      g.drawString("帮助", width - fontWidth, height - fontHeight, 20);
      g.drawString("退出", 10, height - fontHeight, 20);

      //add by johnson

      if (reDraw) {
        //repaint the special area
        if (symboll.formerSymbolX != -1) {
          int fromX = symboll.formerSymbolX - mapOffsetX - tileW * 2;
          int fromY = symboll.formerSymbolY - mapOffsetY - tileW * 2;
          int toX = symboll.formerSymbolX - mapOffsetX + symboll.symbolWidth +
              tileW * 2;
          int toY = symboll.formerSymbolY - mapOffsetY + symboll.symbolHeight +
              tileW * 2;
          //adjust the repaint area
          if (fromX < 0) {
            fromX = 0;
          }
          else if ( (fromX % (tileW * 2)) != 0) {
            fromX = fromX - (fromX % (tileW * 2));
          }
          if (fromY < 0) {
            fromY = 0;
          }
          else if ( (fromY % (tileW * 2)) != 0) {
            fromY = fromY - (fromY % (tileW * 2));
          }
          if (toX > mapWidth) {
            toX = mapWidth;
          }
          if (toY > mapHeight) {
            toY = mapHeight;
          }

          for (i = fromY / tileW;
               i < toY / tileW;
               i += 2) {
            for (j = fromX / tileW;
                 j < toX / tileW;
                 j += 2) {
              switch (mapInfo[ (i * mapWidth / tileW) + j]) {
                case 0:
                  g.drawImage(tile1, mapOffsetX + j * tileW,
                              mapOffsetY + i * tileW,
                              g.TOP | g.LEFT);
                  break;
                case 1:
                  g.drawImage(tile2, mapOffsetX + j * tileW,
                              mapOffsetY + i * tileW,
                              g.TOP | g.LEFT);
                  break;
                case 2:
                  g.drawImage(tile3, mapOffsetX + j * tileW,
                              mapOffsetY + i * tileW,
                              g.TOP | g.LEFT);
                  break;
                case 3:
                  g.drawImage(tile4, mapOffsetX + j * tileW,
                              mapOffsetY + i * tileW,
                              g.TOP | g.LEFT);
                  break;
                case 4:
                case 5:
                case 6:
                case 7:
                  /* if (!victorFlag) {
                       g.drawImage(victor, mapOffsetX + j * 3,
                                   mapOffsetY + i * 3,
                                   g.TOP | g.LEFT);
                       victorFlag = true;
                                               }*/
                default:
                  break;
              }
            }
          }
        }
        //repaint end
        reDraw = false;
        hero.paint(g);
      }

      if (symboll.symbolState != 0) {
        symboll.paint(g);
      }

      // hero.paint(g);

      //add by johnson to realize the symbol collision judgement
      if (symboll.symbolState != 0) {
        if (hero.isobjCollide(symboll.symbolX, symboll.symbolY,
                              symboll.symbolWidth, symboll.symbolHeight)) {
          bonusMark = bonusMark + 500;
          switch (symboll.symbolState) {
            case 1: //timer
              for (i = 0; i < maxEnemy; i++) {
                if (enemyAlive[i]) {
                  enemy[i].ifTimer = true;
                }
                ifTimer = true;
                ictimer.timeCounter = 0;
              }
              break;
            case 2: //star
              if (bullet[0].starNum < 3) {
                bullet[0].starNum = bullet[0].starNum + 1;
              }
              break;
            case 3: //bomber

              //  System.out.println("maxEnemy="+maxEnemy);
              for (i = 0; i < maxEnemy; i++) {
                enemy[i].alive = false;
                if (enemyAlive[i]) {

                  enemyAlive[i] = false;
                  numEnemy--;

                  g.drawImage(bombImage, enemy[i].posX, enemy[i].posY,
                              g.TOP | g.LEFT);

                  Point p = new Point(enemy[i].posX, enemy[i].posY);
                  tempPos.addElement(p);
                  enemy[i].posX = -1000;
                  enemy[i].posY = -1000;
                  // g.fillRect(enemy[i].posX, enemy[i].posY,enemy[i].frameWidth,enemy[i].frameHeight);
                  if (numEnemy == 0) {
                    gameWin = true;
                    overtimer.timeCounter = 0;
                  }
                }
              }

              break;
            case 4: //homeWall
              if (!homeWall) {
                homeWall = true;
                for (i = (mapHeight - tileW * 6) / tileW;
                     i < (mapHeight) / tileW;
                     i += 2) {
                  for (j = (mapWidth / 2 - tileW * 4) / tileW;
                       j < (mapWidth / 2 + tileW * 4) / tileW;
                       j += 2) {
                    switch (mapInfoFormer[ (i * mapWidth / tileW) +
                            j]) {
                      case 0:
                        g.drawImage(tile1,
                                    mapOffsetX + j * tileW,
                                    mapOffsetY + i * tileW,
                                    g.TOP | g.LEFT);
                        break;
                      case 1: //draw the brick as iron
                        g.drawImage(tile3,
                                    mapOffsetX + j * tileW,
                                    mapOffsetY + i * tileW,
                                    g.TOP | g.LEFT);
                        mapInfo[ (i * mapWidth / tileW) +
                            j] = 2;
                        break;
                      case 2:

                        /* g.drawImage(tile3, mapOffsetX + j * 3,
                             mapOffsetY + i * 3,
                             g.TOP | g.LEFT);*/
                        break;
                      case 3:

                        /* g.drawImage(tile4, mapOffsetX + j * 3,
                             mapOffsetY + i * 3,
                            g.TOP | g.LEFT);*/
                        break;
                      case 4:
                      case 5:
                      case 6:
                      case 7:
                      default:
                        break;
                    }
                  }
                }
              }
              ictimer.timeCounter = 0;
              break;
            case 5: //bonus tanker
              life++;
              break;
            case 6: //cap
              cap = true;
              hero.capped = true;
              ictimer1.timeCounter = 0;
              break;
            default:
              break;
          }
          symboll.symbolState = 0;
          reDraw = true;
          symboll.formerSymbolX = symboll.symbolX;
          symboll.formerSymbolY = symboll.symbolY;
        }
      }

      //cancel the timer
      if (ictimer.timeCounter >= 15) {
        if (ifTimer) {
          for (i = 0; i < maxEnemy; i++) {
            if (enemyAlive[i]) {
              enemy[i].ifTimer = false;
            }
          }
          ifTimer = false;
        }
        if (homeWall) {
          for (i = (mapHeight - tileW * 6) / tileW;
               i < (mapHeight) / tileW;
               i += 2) {
            for (j = (mapWidth / 2 - tileW * 4) / tileW;
                 j < (mapWidth / 2 + tileW * 4) / tileW;
                 j += 2) {
              switch (mapInfo[ (i * mapWidth / tileW) + j]) {
                case 0:
                  g.drawImage(tile1, mapOffsetX + j * tileW,
                              mapOffsetY + i * tileW,
                              g.TOP | g.LEFT);
                  break;
                case 1: //draw the brick as iron

                  /* g.drawImage(tile3, mapOffsetX + j * 3,
                               mapOffsetY + i * 3,
                               g.TOP | g.LEFT);
                   mapInfo[ (i * mapWidth / 3) + j] = 2;*/
                  break;
                case 2:
                  g.drawImage(tile2, mapOffsetX + j * tileW,
                              mapOffsetY + i * tileW,
                              g.TOP | g.LEFT);
                  mapInfo[ (i * mapWidth / tileW) + j] = 1;
                  break;
                case 3:

                  /* g.drawImage(tile4, mapOffsetX + j * 3,
                               mapOffsetY + i * 3,
                              g.TOP | g.LEFT);*/
                  break;
                case 4:
                case 5:
                case 6:
                case 7:
                default:
                  break;
              }
            }
          }
          homeWall = false;
        }
      }
      //cancel the cap
      if (ictimer1.timeCounter >= 10) {
        cap = false;
        hero.capped = false;
      }

      //add by johnson to realize adding new enemy
      timeCount++;
      if (timeCount == 10) { //erase the bomb image
        if (tempPos.size() != 0) {
          g.setColor(0x0);
          for (i = 0; i < tempPos.size(); i++) {
            Point p = (Point) tempPos.elementAt(i);
            g.fillRect(p.x, p.y, 12, 12);
          }
          tempPos.removeAllElements();

⌨️ 快捷键说明

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