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

📄 playcanvas.java.bak

📁 一款运行于诺基亚6688上的手机游戏——大富翁源代码
💻 BAK
📖 第 1 页 / 共 5 页
字号:

    public void moveActor(int steps)
    {
        PlayCanvas.steps = steps;
        if(thread == null)
        {
          thread = new Thread(this);
          thread.start();
        }
      }
      /**
       * 移动角色的线程
       */

    public void run()
    {
        Thread thread = Thread.currentThread();
        int stepCount = 0;
        while(thread == this.thread)
          try
          {
            Thread.sleep((long)(gameSpeed*100)); //移动一步休息的时间
            if(stepCount == steps)
            {
              this.thread = null;
              stepOver(); //如果移动完毕
            } else
            {
              stepCount++;
              moveSteps(stepCount); //移动
              repaint();
              serviceRepaints();
            }
          }
          catch(Exception exception) { }
      }
      /**
       * 移动角色
       * @param stepCount 移动步数
       */

    private void moveSteps(int stepCount)
    {
        //System.out.println("Location:" + playerLocation[nowPlayerID]);
        player_location[nowPlayerID]++;
        specialLocationPlusSteps();
        if(player_location[nowPlayerID] == 50)
        { //如果到第50号地皮,就是一圈完毕
            if(stepCount != 1)
            {
                status_Park10_Prinson20_Sleep30 = 1;
                player_money[nowPlayerID] += 200; //加200的钱
            }
            player_location[nowPlayerID] = 0;
        }
    }
    /**
     * 到了特别的地方要加走的步数(因为?或飞机场占了几步的位置,但也只能算一步)
     */

    private void specialLocationPlusSteps()
    {
        switch(player_location[nowPlayerID])
        {
        case 5: // '\005'
        case 10: // '\n'
        case 14: // '\016'
        case 15: // '\017'
        case 27: // '\033'
        case 36: // '$'
        case 41: // ')'
        case 48: // '0'
            steps++;
            break;
        }
    }
    /**
     * 移动完毕要处理的事情
     */

    private void stepOver()
    {
        //System.out.println("StepOverLocation:" + player_location[nowPlayerID]);
        //playerLocation[nowPlayerID] = 49 ;
        switch(player_location[nowPlayerID])
        {
        case 2: //
        case 20: //
        case 42: // 随机事件
            randomEvent();
            return;

        case 6: //
        case 37: // 飞机场
            showFlyToNextStation();
            return;

        case 11: //
        case 25: //
        case 32: // 卡片
            addCard(10);
            return;

        case 16: // 监狱
            prise();
            return;

        case 28: //
        case 45: // 公园
            status_Park10_Prinson20_Sleep30 = 10;
            repaint();
            serviceRepaints();
            nextPlay(1000);
            return;

        case 49: // '1'
            nextPlay(1000);
            return;
        case 0:
        case 1:
        case 3: // '\003'
        case 4: // '\004'
        case 5: // '\005'
        case 7: // '\007'
        case 8: // '\b'
        case 9: // '\t'
        case 10: // '\n'
        case 12: // '\f'
        case 13: // '\r'
        case 14: // '\016'
        case 15: // '\017'
        case 17: // '\021'
        case 18: // '\022'
        case 19: // '\023'
        case 21: // '\025'
        case 22: // '\026'
        case 23: // '\027'
        case 24: // '\030'
        case 26: // '\032'
        case 27: // '\033'
        case 29: // '\035'
        case 30: // '\036'
        case 31: // '\037'
        case 33: // '!'
        case 34: // '"'
        case 35: // '#'
        case 36: // '$'
        case 38: // '&'
        case 39: // '\''
        case 40: // '('
        case 41: // ')'
        case 43: // '+'
        case 44: // ','
        case 46: // '.'
        case 47: // '/'
        case 48: // '0'
        default:
            onCommonGround();
            return;
        }
    }
    /**
     * 移动完毕到了一般的地皮上要处理的事情
     */

    private void onCommonGround()
    {
       // 如果是0-空地,-1 -- 财神作用过的土地,-2 --衰神作用过的土地
        if(groundForBuilding[player_location[nowPlayerID]] <= 0)
        {
            if(player_money[nowPlayerID] >= fetchGroundPrice(player_location[nowPlayerID]) && player_money[nowPlayerID] != 0)
                buildorBuyGround();
            else
                nextPlay(1000);
        } else
        if(isNowPlayerIDGround()) //如果是自己的地皮
        {   //如果有足够的钱修建
            if(player_money[nowPlayerID] >= fetchGroundPrice(player_location[nowPlayerID]))
            {
                int actorLevel = 1;
                for(int i = 0; i < nowPlayerID; i++)
                    actorLevel *= 10;
                    //如果不是最高级建筑就可以修建
                if(groundForBuilding[player_location[nowPlayerID]] == 4 * actorLevel)
                    nextPlay(1000);
                else
                    buildorBuyGround();
            } else
            {
                nextPlay(1000);
            }
        } else //如果土地的所有者处于不能移动状态
        if(player_prinson_canNotMoveNum[fetchNowPlayerLocationGroundBelongtoWho()] > 0 || player_sleep_canNotMoveNum[fetchNowPlayerLocationGroundBelongtoWho()] > 0)
            nextPlay(1000);
        else //减钱,过路费啦:)
            decreaseMoney(fetchNowPlayerLocationGroundBelongtoWho(), fetchConnectedLocationPrice(player_location[nowPlayerID]));
    }
    /**
     * 绘制画板
     */

    protected void paint(Graphics graphics)
    {
      // 如果游戏仍在进行
      if(gameStatusGoOrWinOrFail == 0)
      {
        //清屏
        bufferImageG.setColor(255,255,255);
        bufferImageG.fillRect(0, 0, canvasWidth, canvasHeight);

        int mapX = (40 - computePlayerX(player_location[nowPlayerID])) + -6;
        int mapY = (56 - computePlayerY(player_location[nowPlayerID])) + -16;

        // 画出地皮
        for(int i = 0; i < 50; i++) {
          //如果地皮有所变化
          if (this.groundForBuilding[i] != this.bufferGroundForBuilding[i]) {
            this.bufferGroundForBuilding[i] = this.groundForBuilding[i];
            Graphics g1 = mapImage1.getGraphics();
            Graphics g2 = mapImage2.getGraphics();

            if (groundForBuilding[i] == 0) {
              g1.drawImage(this.emptyGround, computeGroundX(i),
                           computeGroundY(i), 20);
              g2.drawImage(this.emptyGround, -128 + computeGroundX(i),
                           computeGroundY(i), 20);
              continue;
            }

            //财神使用过的土地
            if (groundForBuilding[i] == -1)
              try {
                g1.drawImage(Image.createImage("/res/image/h3.png"),
                             computeGroundX(i), computeGroundY(i),
                             20);
                g2.drawImage(Image.createImage("/res/image/h3.png"),
                             -128 + computeGroundX(i), computeGroundY(i),
                             20);
                continue;
              }
              catch (Exception exception3) {}

            // 衰神卡使用过的土地
            if (groundForBuilding[i] == -2)
              try {
                g1.drawImage(Image.createImage("/res/image/h4.png"),
                             computeGroundX(i), computeGroundY(i),
                             20);
                g2.drawImage(Image.createImage("/res/image/h4.png"),
                             -128 + computeGroundX(i), computeGroundY(i),
                             20);
                continue;
              }
              catch (Exception exception4) {}

            // 玩家1
            if (groundForBuilding[i] < 10) {
              g1.drawImage(player_houseImage[player_sequence[0]][groundForBuilding[
                           i] - 1], computeGroundX(i),
                           computeGroundY(i), 20);
              g2.drawImage(player_houseImage[player_sequence[0]][groundForBuilding[
                           i] - 1], -128 + computeGroundX(i),
                           computeGroundY(i), 20);
              continue;
            }
            //玩家2
            if (groundForBuilding[i] < 100) {
              g1.drawImage(player_houseImage[player_sequence[1]][groundForBuilding[
                           i] / 10 - 1], computeGroundX(i),
                           computeGroundY(i), 20);
              g2.drawImage(player_houseImage[player_sequence[1]][groundForBuilding[
                           i] / 10 - 1], -128 + computeGroundX(i),
                           computeGroundY(i), 20);
              continue;
            }
            //玩家3
            g1.drawImage(player_houseImage[player_sequence[2]][groundForBuilding[
                         i] / 100 - 1], computeGroundX(i), computeGroundY(i), 20);
            g2.drawImage(player_houseImage[player_sequence[2]][groundForBuilding[
                         i] / 100 - 1], -128 + computeGroundX(i),computeGroundY(i), 20);
          }

        }
        //绘制地图
        try
        {
          bufferImageG.drawImage(mapImage1, (34 - computePlayerX(player_location[nowPlayerID])), (40 - computePlayerY(player_location[nowPlayerID])), 20);
          bufferImageG.drawImage(mapImage2, (162 - computePlayerX(player_location[nowPlayerID])), (40 - computePlayerY(player_location[nowPlayerID])), 20);
        }
        catch(Exception exception) { }


        // 画出非当前游戏者的头像
        try
        {
          for(int i = 2; i >= 0; i--)
            if(i != nowPlayerID && player_money[i] >= 0)
              bufferImageG.drawImage(player_faceImage[player_sequence[i]], mapX + computePlayerX(player_location[i]), mapY + computePlayerY(player_location[i]), 20);
        }
        catch(Exception exception5) { }

        // 画出控制条
        try
        {
          Image image = Image.createImage(28,80);
          Graphics g = image.getGraphics();
          g.drawImage(gamePanelImage, 0, -16, 20);
          bufferImageG.drawImage(image, 73, 0, 20);
          g = null;
          image = null;
        }
        catch(Exception exception6) { }

         try
         {
           // 画出控制条上的头像
           bufferImageG.drawImage(player_faceImage[player_sequence[nowPlayerID]], 79, 4, 20);
           // 画出游戏者头像
           if(player_money[nowPlayerID] >= 0)
             bufferImageG.drawImage(player_faceImage[player_sequence[nowPlayerID]], 34, 40, 20);
         }
         catch(Exception exception8) { }
         //画出选择框
         bufferImageG.setColor(255,255,255);
         bufferImageG.drawRect(78, 23 + choiceIndex * 14, 17, 13);

       }
       //如果玩家获胜
       if(gameStatusGoOrWinOrFail == 2)
       {
         try
         {
           bufferImageG.drawImage(Image.createImage("/res/image/start00bw.png"), 0, 0, 20);
           bufferImageG.drawImage(Image.createImage("/res/image/win.png"), 20, 22, 20);
         }
         catch(Exception exception1) { }
       }
       //如果玩家失败
       if(gameStatusGoOrWinOrFail == 3)
       {
         try
         {
           bufferImageG.drawImage(Image.createImage("/res/image/start00bw.png"), 0, 0, 20);
           bufferImageG.drawImage(Image.createImage("/res/image/lost.png"), 17, 22, 20);
         }
         catch(Exception exception2) { }
       }
       //绘制特殊角色状态
       if(status_Park10_Prinson20_Sleep30 == 30)
         drawMessage(bufferImageG, "睡眠");
       else
       if(status_Park10_Prinson20_Sleep30 == 20)
         drawMessage(bufferImageG, "监狱");
       else
       if(status_Park10_Prinson20_Sleep30 == 10)
         drawMessage(bufferImageG, "公园");
       else
       if(status_Park10_Prinson20_Sleep30 > 0)
       {
         drawMessage(bufferImageG, "+ $200");
         status_Park10_Prinson20_Sleep30 = status_Park10_Prinson20_Sleep30 != 4 ? ++status_Park10_Prinson20_Sleep30 : 0;
       }
       //画出缓冲的图
       graphics.drawImage(bufferImage,0,0,20);
    }
    /**
     * 绘制出特殊角色状态
     * @param g 句柄
     * @param s 状态信息
     */

    private void drawMessage(Graphics g, String s)
    {
        g.setColor(0, 0, 0);
        g.fillRect(8, 29, 80, 30);
        g.setColor(255, 255, 255);
        g.fillRect(10, 31, 76, 26);
        g.setColor(255, 0, 0);
        g.setFont(Font.getFont(0, 1, 0));
        g.drawString(s, 48, 48, 65);
    }
    /**
     * 按键处理
     * @param keyInt 键值
     */

    public void keyPressed(int keyInt)
    {
      // 如果玩家失败或是成功
      if (gameStatusGoOrWinOrFail > 1)
        KMRichMan.exitGame();
      // 如果不是玩家进行游戏
      if (nowPlayerID != 0 || ManControlStatus_CanNotPlay)
        return;
      int pressKey = getGameAction(keyInt);

      switch (pressKey) {
        default:
          break;

        case 1: // 上
        case 2:
          choiceIndex--;
          if (choiceIndex == -1)
            choiceIndex = 3;
          repaint();
          serviceRepaints();
          break;

        case 5: // 下
        case 6:
          choiceIndex++;
          if (choiceIndex == 4)
            choiceIndex = 0;
          repaint();
          serviceRepaints();
          break;

        case 8: // 确定
          switch (choiceIndex) {
            default:
              break;

            case 0: // 投色子
              richMan.setDisplayToDiceCanvas();
              ManControlStatus_CanNotPlay = true;
              break;

            case 1: // 卡片
              if (player_cards[nowPlayerID][0] == 16)
                richMan.showNoCard();
              else
                richMan.showCards(player_cards[nowPlayerID]);
              break;

⌨️ 快捷键说明

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