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

📄 tankcanvas.java

📁 J2ME手机游戏源码 整个游戏有八个类组成: &#61548 主类:TankMIDlet &#61548 敌人坦克:Enemy &#61548 图片池:EnemyPool &#61548
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                                    mapInfo[ (i * mapWidth / tileW) + j] = 1;
                                    break;
                                default:
                                    break;
                            }
                        }
                    }
                    homeWall = false;
                }
        }
      
        if (timeCount == 10) {
            isCapped = false;
            hero.isCapped = false;
        }       
      
        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();
            }
        }
        if(timeCount == 40){
          
            liveCount = 0;
            for (i = 0; i < currentEnemy; i++) {
                if (enemyAlive[i]) {
                    liveCount++;
                }
            }
            timeCount = 0;
            if(currentEnemy<maxShowEnemy&&currentEnemy<leftEnemy){
                currentEnemy++;
                enemy[currentEnemy-1] = enemy[numPos];
                numPos++;
                enemy[currentEnemy-1].alive = true;
                enemyAlive[currentEnemy-1] = true;
                int pos = (currentEnemy-1)%3;
                switch(pos) {
                        case 0:
                            enemy[currentEnemy-1].posX = mapOffsetX + mapWidth/2 - enemy[currentEnemy-1].frameWidth/2;
                            enemy[currentEnemy-1].posY = mapOffsetY + enemy[currentEnemy-1].frameHeight;
                            break;
                        case 1:
                            enemy[currentEnemy-1].posX = mapOffsetX;
                            enemy[currentEnemy-1].posY = mapOffsetY + enemy[currentEnemy-1].frameHeight;
                            break;
                        case 2:
                            enemy[currentEnemy-1].posX = mapOffsetX + mapWidth - enemy[currentEnemy-1].frameWidth;
                            enemy[currentEnemy-1].posY = mapOffsetY + enemy[currentEnemy-1].frameHeight;
                        default:
                            break;
                    }
                   
                    if(ifTimer){
                        enemy[currentEnemy-1].ifTimer = true;
                    }
                    for ( int i0 = 0; i0 < currentEnemy-1; i0 ++ ){
                        if ( enemyAlive[i0] ) {//add failed
                            if ( enemy[i0].isObjCollide( enemy[currentEnemy-1].posX, enemy[currentEnemy-1].posY ) ){
                                enemy[currentEnemy-1].alive = false;
                                enemyAlive[currentEnemy-1] = false;
                                enemy[currentEnemy-1].ifTimer = false;
                                currentEnemy--;
                                numPos--;
                                break;
                            }
                        }
                    }
            }
        }

        for ( i = 0; i < currentEnemy; i ++ ){
            if ( enemyAlive[i] ) {
                enemy[i].paint(g);//绘制当前敌人
            
                for ( j = 0; j < currentEnemy; j ++ ){//检测地任何敌人的碰撞
                    if ( i == j )
                        continue;
                    if ( enemy[j].alive ) {
                     
                        if ( enemy[i].isObjCollide( enemy[j].posX, enemy[j].posY ) ){
                            enemy[i].direction = (enemy[i].direction ^ 7)&3;
                            if ( enemy[i].direction == 0 )
                                enemy[i].direction = 4;
                        }
                    }
                }
              
                if ( enemy[i].isObjCollide( hero.posX, hero.posY ) && (hero.status == 1) ){
                    enemy[i].direction = (enemy[i].direction ^ 7)&3;
                    if ( enemy[i].direction == 0 )
                        enemy[i].direction = 4;
                    if(!isCapped){   //when there is no isCapped protection
                        hero.status = 2;
                        hero.direction = hero.direction & 0x0f;
                        hero.count = 8;
                    }else{
                        hero.direction = (hero.direction ^ 7)&3;
                    }
                }

                if ( bullet[0].alive && (bullet[0].isObjCollide( enemy[i].posX, enemy[i].posY, enemy[i].frameWidth, enemy[i].frameHeight )) && (!bullet[0].bombFlag) ){

              SoundPlayer.getInstance().playExplodeSound();
                   
                    switch(enemy[i].kind){
                        case 0:
                            normalNum++;
                            break;
                        case 1:
                            redNum++;
                            break;
                        case 2:
                            if(enemy[i].lifeCount == 1){
                                greenNum++;
                            }
                            break;
                        case 3:
                            superNum++;
                            break;
                        default:
                            break;
                    }
                  
                    if(enemy[i].kind == 1){
                        reDraw = true;
                        bonus.formerBonusX = bonus.bonusX;
                        bonus.formerBonusY = bonus.bonusY;
                        Random r = new Random();
                     
                        int num = Math.abs(r.nextInt()%6)+1;
                     
                        bonus.bonusKind = num;
                        bonus.bonusX = Math.abs(r.nextInt() % (mapWidth - 50)) +
                            mapOffsetX;
                        bonus.bonusY = Math.abs(r.nextInt() %
                            (mapHeight - 50)) + mapOffsetY;
                    }
                  
                    if(enemy[i].kind == 2){
                        enemy[i].lifeCount--;
                      
                        if(enemy[i].lifeCount!=0){
                            bullet[0].alive = false;
                            g.fillRect(bullet[0].posX,bullet[0].posY,bullet[0].frameWidth,bullet[0].frameHeight);
                        }
                    }
                    if(enemy[i].lifeCount <= 0){
                        bullet[0].BposX = enemy[i].posX;
                        bullet[0].BposY = enemy[i].posY;
                        bullet[0].bombFlag = true;//爆炸
                        bullet[0].bombCount = 8;//爆炸计数器
                        enemyAlive[i] = false;
                        leftEnemy--;
                 
                    }
                    if ( leftEnemy == 0 ){
                        isWin = true;
                      
                    }
                    g.fillRect(enemy[i].posX, enemy[i].posY, enemy[i].frameWidth, enemy[i].frameHeight);
                    if(enemy[i].lifeCount <= 0){
                        if(i!=currentEnemy-1){
                            enemy[i].posX = -1000;
                            enemy[i].posY = -1000;
                        }
                    }
                }
            } else {
                if ( leftEnemy >= currentEnemy ||(leftEnemy>0&&liveCount<currentEnemy&&liveCount<leftEnemy)){
                    //add by johnson
                    liveCount++;
                    Random r = new Random();
                    j = Math.abs(r.nextInt()%3);
                    enemy[i] = enemy[numPos];
                    numPos++;
                    switch(j) {
                        case 0:
                            enemy[i].posX = mapOffsetX + mapWidth/2 - enemy[0].frameWidth/2;
                            enemy[i].posY = mapOffsetY + 2;
                            break;
                        case 1:
                            enemy[i].posX = mapOffsetX;
                            enemy[i].posY = mapOffsetY + 2;
                            break;
                        case 2:
                            enemy[i].posX = mapOffsetX + mapWidth - enemy[2].frameWidth;
                            enemy[i].posY = mapOffsetY + 2;
                        default:
                            break;
                    }
                    enemy[i].alive = true;
                    enemyAlive[i] = true;
                    if(enemy[i].kind == 2){
                        enemy[i].lifeCount = 3;
                    }
                    if(ifTimer){
                        enemy[i].ifTimer = true;
                    }
               
                    for ( int i0 = 0; i0 < currentEnemy; i0 ++ ){
                        if ( enemyAlive[i0]&& (i != i0) ) {
                            if ( enemy[i0].isObjCollide( enemy[i].posX, enemy[i].posY ) ){
                                enemy[i].alive = false;
                                enemyAlive[i] = false;
                                numPos--;
                                break;                            }
                        }
                    }

                }
            }
        }
       if ( bullet[0].alive ){
         if(bullet[0].isbomb){

            SoundPlayer.getInstance().playExplodeSound();
            bullet[0].isbomb = false;
          }
         bullet[0].paint(g);
       }
        else {
            hero.shootFlag = false;
            bulletAlive[0] = false;
        }
        hero.paint(g);
        for ( i = 1; i < maxBullet; i ++ ){
            if ( bulletAlive[i] ) {
                bullet[i].paint(g);
                if ( !bullet[i].alive ){
                    bulletAlive[i] = false;
                    for ( j = 0; j < currentEnemy; j ++ ){
                        if ( enemy[j].bulletNo == i && enemy[j].shootFlag == true )
                            enemy[j].shootFlag = false;
                    }
                }
          
                if ( bulletAlive[0] && bullet[i].isObjCollide( bullet[0].posX, bullet[0].posY, bullet[0].frameWidth, bullet[0].frameHeight ) && (hero.status == 1) && (!bullet[i].bombFlag) && (!bullet[0].bombFlag) ){
                    bullet[i].alive = false;
                    bullet[0].alive = false;
                    bulletAlive[0] = false;
                    bulletAlive[i] = false;
                    g.fillRect(bullet[i].posX, bullet[i].posY, bullet[i].frameWidth, bullet[i].frameHeight);
                    g.fillRect(bullet[0].posX, bullet[0].posY, bullet[0].frameWidth, bullet[0].frameHeight);
                }
               
                if ( bullet[i].isObjCollide( hero.posX, hero.posY, hero.frameWidth, hero.frameHeight ) && (hero.status == 1) && (!bullet[i].bombFlag) ){
                    bullet[i].alive = false;
                    bulletAlive[i] = false;
                    g.fillRect(bullet[i].posX, bullet[i].posY,
                               bullet[i].frameWidth, bullet[i].frameHeight);
                    if (!isCapped) {
                      
                        bullet[0].starNum = 0;
                        hero.status = 2;
                        hero.direction = hero.direction & 0x0f;
                        hero.count = 8;
                    }
                }
            }
        }
       if(grassPaint){
           reDraw(3, g);
       }
        if ( isWin || isLose){
           
                if (isLose){
                    bullet[0].starNum = 0; //reset the bullet speed
                }

            bullet[0].paint(g);
            if(isLose)canMove = false;
                isFirstTime = true;
                gameStatus = 5;
                gameSubStatus = 1;                
            
        }
	  }
	  g.setColor(0x3f, 0x3f, 0x3f);
    g.fillRect(0,CanvasHeight-fontHeight,CanvasWidth,CanvasHeight);
	  g.setColor(0xffffff);
	  g.setFont(font);
	        if(isPaused==false)g.drawString("暂停", CanvasWidth-2*fontWidth, CanvasHeight-fontHeight, 20);
	    else g.drawString("继续", CanvasWidth-2*fontWidth, CanvasHeight-fontHeight, 20);
	    g.drawString("退出",   0, CanvasHeight-fontHeight, 20);
    }
  
    private void drawResult(Graphics g){
    	  ResultCnt++;
    	
        switch(gameSubStatus) {
            case 1:
                if(isFirstTime){
                    g.setColor(0x3f, 0x3f, 0x3f);
                    g.fillRect(0,0,CanvasWidth,CanvasHeight);
                    g.setColor(0x0);
                    g.fillRect(mapOffsetX,mapOffsetY,mapWidth,mapHeight);
                    isFirstTime = false;
                    
                }
                    g.setColor(0xff8080);
                    g.setFont(Font.getFont(Font. FACE_PROPORTIONAL,  Font.STYLE_BOLD, Font.SIZE_LARGE));
                    g.drawString("最高分:20000", CanvasWidth/2, mapOffsetY+5, g.TOP|g.HCENTER);
                    g.setFont(Font.getFont(Font. FACE_PROPORTIONAL,  Font.STYLE_BOLD, Font.SIZE_MEDIUM));
                    g.drawString("关数:"+level, CanvasWidth/2, mapOffsetY+7+fontHeight, g.TOP|g.HCENTER);
                    g.drawImage(EnemyPool.enemyUpNormal,CanvasWidth/2+25, mapOffsetY+10+2*fontHeight,20);
                    g.drawImage(EnemyPool.enemyUpRed,CanvasWidth/2+25, mapOffsetY+20+3*fontHeight,20);
                    g.drawImage(EnemyPool.enemyUpGreen,CanvasWidth/2+25, mapOffsetY+30+4*fontHeight,20);
                    g.drawImage(EnemyPool.enemyUpNormal,CanvasWidth/2+25, mapOffsetY+40+5*fontHeight,20);
                    g.drawString("得分", mapOffsetX+mapWidth/4+30, mapOffsetY+10+2*fontHeight, g.TOP|g.HCENTER);
                    g.drawString("得分", mapOffsetX+mapWidth/4+30, mapOffsetY+20+3*fontHeight, g.TOP|g.HCENTER);
                    g.drawString("得分", mapOffsetX+mapWidth/4+30, mapOffsetY+30+4*fontHeight, g.TOP|g.HCENTER);
                    g.drawString("得分", mapOffsetX+mapWidth/4+30, mapOffsetY+40+5*fontHeight, g.TOP|g.HCENTER);
                    int total = superNum+greenNum+redNum+normalNum;
                    int totalMark1 = superNum*400+greenNum*300+redNum*200+normalNum*100+bonusMark;

⌨️ 快捷键说明

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