Ejemplo n.º 1
0
  @Override
  public void actionPerformed(ActionEvent e) {
    // TODO 自动生成的方法存根
    if (game.getReminder().getLineCount() >= 6) {
      game.getReminder().setText("");
    }

    point = Dice.getNum(dice);

    // 擦除旧位置的名字
    game.getHost()
        .get(current.getPosition())
        .setText(
            new StringBuffer(game.getHost().get(current.getPosition()).getText())
                .delete(0, 1)
                .toString());
    // 当前位置

    System.out.println(current.getPosition() + "---------");
    int location = current.getPosition() + point;
    System.out.println(location + "+++====");
    if (location > 37) {
      boolean flag = false;
      for (int i = current.getPosition() + 1; i <= 37; i++) { // 37之前路段
        if (flag) {
          break;
        }
        House nextHouse = game.getMapHouses().get(i);
        if (nextHouse.isFence()) { // 前面的路上有路障
          location = i;
          current.setPosition(location); // 设置玩家投掷骰子后的位置
          nextHouse.setIcon(new ImageIcon(GetHousePicturel.getPicture().get(nextHouse.getLever())));
          nextHouse.setFence(false);
          game.getReminder().append(current.getName() + "踩到了路障\r\n");
          flag = true; // 找到了路障
        }
      }
      if (!flag) {
        location -= 38;
        for (int i = 0; i <= location; i++) { // 0和后面的路段
          if (flag) {
            break;
          }
          House nextHouse = game.getMapHouses().get(i);
          if (nextHouse.isFence()) { // 前面的路上有路障
            location = i; // 设置新location
            current.setPosition(location); // 设置玩家投掷骰子后的位置
            nextHouse.setIcon(
                new ImageIcon(GetHousePicturel.getPicture().get(nextHouse.getLever())));
            nextHouse.setFence(false);
            game.getReminder().append(current.getName() + "踩到了路障\r\n");
            flag = true; // 找到了路障
            break;
          }
        }
      }
    } else {
      boolean flag = false;
      for (int i = current.getPosition() + 1; i <= location; i++) { // 0和后面的路段
        if (flag) {
          break;
        }
        House nextHouse = game.getMapHouses().get(i);
        if (nextHouse.isFence()) { // 前面的路上有路障
          location = i; // 设置新location
          current.setPosition(location); // 设置玩家投掷骰子后的位置
          nextHouse.setIcon(new ImageIcon(GetHousePicturel.getPicture().get(nextHouse.getLever())));
          nextHouse.setFence(false);
          game.getReminder().append(current.getName() + "踩到了路障\r\n");
          flag = true; // 找到了路障
          break;
        }
      }
    }

    // 判断当前位置房子的类型
    House current_house = game.getMapHouses().get(location);
    current.setPosition(location);
    // 是监狱
    if (current_house.isPrison()) {
      current.setStayRound(3);
      current.setToPrison(true); // 关进监狱
      game.getReminder().append(current.getName() + "在监狱停留三天\r\n");
      game.getHost()
          .get(current.getPosition())
          .setText(
              game.getHost().get(current.getPosition()).getText()
                  + SetPlayers.getNames().get(current.getName()));

    }
    // 设置有炸弹道具
    else if (current_house.isBomb()) {
      current.setStayRound(2);
      current.setPosition(29);
      current.setToHospotal(true); // 住进医院
      current_house.setBomb(false);
      game.getReminder().append(current.getName() + "踩到炸弹,住院2天\r\n");
      current_house.setIcon(
          new ImageIcon(GetHousePicturel.getPicture().get(current_house.getLever()))); // 改变图片
      game.getHost()
          .get(current.getPosition())
          .setText(
              game.getHost().get(current.getPosition()).getText()
                  + SetPlayers.getNames().get(current.getName()));
    }
    // 是道具屋
    else if (current_house.isDaoju()) {
      new DaojuHouse(current, game);
      game.getHost()
          .get(current.getPosition())
          .setText(
              game.getHost().get(current.getPosition()).getText()
                  + SetPlayers.getNames().get(current.getName()));
    }
    // 是能提供点券的矿地
    else if (current_house.isTicket()) {
      current.setTicket(current_house.getTicket() + current.getTicket());
      game.getReminder().append(current.getName() + "获得了" + current_house.getTicket() + "点劵\r\n");
      game.flushPlayeInfo(current);
      game.getHost()
          .get(current.getPosition())
          .setText(
              game.getHost().get(current.getPosition()).getText()
                  + SetPlayers.getNames().get(current.getName()));
    } else if (current_house.isHospital()) { // 医院
      game.getHost()
          .get(current.getPosition())
          .setText(
              game.getHost().get(current.getPosition()).getText()
                  + SetPlayers.getNames().get(current.getName()));
    } else if (current_house.isStart()) { // 	起点	
      game.getHost()
          .get(current.getPosition())
          .setText(
              game.getHost().get(current.getPosition()).getText()
                  + SetPlayers.getNames().get(current.getName()));
    }
    // 普通房屋,
    else {
      game.getHost()
          .get(current.getPosition())
          .setText(
              game.getHost().get(current.getPosition()).getText()
                  + SetPlayers.getNames().get(current.getName()));
      if (current_house.getBelongTo() == null) { // 空地		
        int select =
            JOptionPane.showConfirmDialog(
                null, "是否花费" + current_house.getPrice() + "购买房子", "房地产", JOptionPane.YES_NO_OPTION);
        // 0:是,1:否
        if (select == 0) { // 购买此地
          if (current.getMoney() < current_house.getPrice()) { // 资金不够
            String[] options = {"确定"};
            JOptionPane.showOptionDialog(
                null,
                "你的资金不足!",
                "Warning",
                JOptionPane.DEFAULT_OPTION,
                JOptionPane.WARNING_MESSAGE,
                null,
                options,
                options[0]);
          } else { // 购买成功 0级
            current.setMoney(current.getMoney() - current_house.getPrice()); // 付款
            current.getMyHouses().add(current_house);
            current_house.setLever(current_house.getLever() + 1);
            current_house.setIcon(
                new ImageIcon(
                    GetHousePicturel.getPicture().get(current_house.getLever()))); // 设置地的级数图片

            current_house.setBelongTo(current);
            game.getHost()
                .get(current_house.getPosition())
                .setBackground(SetPlayers.getColor().get(current.getName()));
            game.flushPlayeInfo(current);
            game.getReminder()
                .append(current.getName() + "成功购买一块空地,花费" + current_house.getPrice() + "\r\n");
          }
        }
      } else { // 地盘有所属人
        if (current_house.getBelongTo().equals(current)) { // 属于自己的地盘
          if (current_house.getLever() < 3) // 房子最大级别为3
          {
            int select =
                JOptionPane.showConfirmDialog(
                    null,
                    "是否花费" + current_house.getPrice() + "升级房子",
                    "房地产",
                    JOptionPane.YES_NO_OPTION);
            if (select == 0) { // 升级此地
              if (current.getMoney() < current_house.getPrice()) { // 资金不够
                String[] options = {"确定"};
                JOptionPane.showOptionDialog(
                    null,
                    "你的资金不足!",
                    "Warning",
                    JOptionPane.DEFAULT_OPTION,
                    JOptionPane.WARNING_MESSAGE,
                    null,
                    options,
                    options[0]);
              } else { // 升级成功
                current.setMoney(current.getMoney() - (current_house.getPrice())); // 付款
                current_house.setLever(current_house.getLever() + 1); // 升级
                current_house.setIcon(
                    new ImageIcon(
                        GetHousePicturel.getPicture().get(current_house.getLever()))); // 设置地的级数图片
                game.getHost()
                    .get(current_house.getPosition())
                    .setBackground(SetPlayers.getColor().get(current.getName()));
                game.flushPlayeInfo(current); // 刷新财富榜
                game.getReminder()
                    .append(
                        current.getName() + "成功升级房子,花费" + current_house.getPrice() + "\r\n"); // 公告
              }
            }
          } else {
            game.getReminder().append(current.getName() + "的房子已达顶级!!!不可以在升级\r\n");
          }
        } else { // 踩在别人的地盘上
          if (current_house.getBelongTo().getStayRound() == 0) // 如果地主人没被关进监狱或者住进医院
          {
            int pay = (current_house.getLever() + 1) * current_house.getPrice() / 2;
            if (current.getMoney() < pay) // 付钱给别人但不够,退出游戏
            {
              String[] options = {"确定"};
              JOptionPane.showOptionDialog(
                  null,
                  "很遗憾," + current.getName() + "玩家资金不足!退出游戏",
                  "Warning",
                  JOptionPane.DEFAULT_OPTION,
                  JOptionPane.WARNING_MESSAGE,
                  null,
                  options,
                  options[0]);
              for (House house : current.getMyHouses()) {
                // 把当前该玩家的所有房产设置成不属于任何玩家的空地状态
                house.setLever(-1);
                house.setBelongTo(null);
                house.setIcon(new ImageIcon(GetHousePicturel.getPicture().get(house.getLever())));
                game.getHost().get(house.getPosition()).setBackground(Color.WHITE); // 所属者颜色为白色
              }
              StringBuffer sb =
                  new StringBuffer(game.getHost().get(current.getPosition()).getText());
              game.getHost()
                  .get(current.getPosition())
                  .setText(sb.delete(sb.length() - 1, sb.length()).toString());
              game.deletePlayer(current);
              int which = currentPlayer.getPlayerLocation();
              game.getPlayers().remove(current);
              // game.getPlayerMoney().remove(which);
              // game.getPlayerTicket().remove(which);
              System.out.println(game.getPlayers().size() + "haahhahh");
              currentPlayer = new CurrentPlayer(game.getPlayers()); // 重新设置当前玩家人数
              currentPlayer.setWhich(which - 1);

              //	current=currentPlayer.getCurrentPlayer();
              if (game.getPlayers().size() < 2) {
                new Victory(game.getPlayers().get(0), game);
              }

            } else // 付钱给别人钱够,就付款
            {
              current.setMoney(current.getMoney() - pay); // 付款给对方
              current_house
                  .getBelongTo()
                  .setMoney(current_house.getBelongTo().getMoney() + pay); // 收钱
              game.getReminder()
                  .append(
                      current.getName()
                          + "向"
                          + current_house.getBelongTo().getName()
                          + "支付过路费"
                          + pay
                          + "\r\n"); // 通知
              game.flushPlayeInfo(current); // 刷新显示栏
              System.out.println(current.getName() + "付款人");
              game.flushPlayeInfo(current_house.getBelongTo());
              System.out.println(current_house.getBelongTo().getName() + "收款人");
            }
          } else { // 地主人住进监狱或者医院
            game.getReminder().append(current.getName() + "真幸运,房子主人不在家,免除过路费\r\n");
          }
        }
      }
    }
    current = currentPlayer.getCurrentPlayer(); // 当前玩家
    while (true) {
      if (current.getStayRound() > 0) {
        ok:
        if (current.isToHospotal()) {

          current.setStayRound(current.getStayRound() - 1);

          if (current.getStayRound() == 0) {
            current.setToHospotal(false);
            game.getReminder().append("玩家" + current.getName() + "出院了\r\n");
            break ok;
          }
          game.getReminder()
              .append("玩家" + current.getName() + "因炸伤住院还剩" + current.getStayRound() + "回合\r\n");
        }
        out:
        if (current.isToPrison()) {

          current.setStayRound(current.getStayRound() - 1);

          if (current.getStayRound() == 0) {
            current.setToPrison(false);
            game.getReminder().append("玩家" + current.getName() + "出狱了\r\n");
            break out;
          }
          game.getReminder()
              .append(
                  "玩家" + current.getName() + "被关进监狱,剩余释放回合:" + current.getStayRound() + "天\r\n");
        }
        current = currentPlayer.getCurrentPlayer(); // 玩家停留,下一个玩家
      }

      if (current.getStayRound() == 0) break;
    }
    game.getRound().setText("当前回合:" + current.getName());
    game.getUseProp().setText("(" + SetPlayers.getNames().get(current.getName()) + ")道具");
    System.out.println("which" + CurrentPlayer.getPlayerLocation());
  }
Ejemplo n.º 2
0
 public DiceListener(JLabel dice, PlayGame game) {
   this.dice = dice;
   this.game = game;
   currentPlayer = new CurrentPlayer(game.getPlayers());
   current = currentPlayer.getCurrentPlayer();
 }