亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? battel.java

?? wiziqi
?? JAVA
字號:
package dao;

import iniset.PropertySet;
import iniset.finals.SetDatas;

import java.awt.Cursor;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.LinkedList;

import javax.swing.JLabel;
import dao.popinf.PopInf;

import view.CreatWindow;
import vo.ChessPoint;
import vo.CursorsAndImg;
import vo.Enums;
import vo.sounds.Sound;

/**
 * 棋盤類,繼承自JLabel,實現MouseListener接口,是本游戲的核心部分,負責事件處理 判斷
 * 
 * @author B.Lee
 * @version 2008.05.10
 */
public class Battel extends JLabel implements MouseListener {
  public int dirBeginX[];

  public int dirBeginY[];

  public int lineBeginX[];

  public int lineBeginY[];

  public int offsetX[];

  public int offsetY[];

  public int scoreBlack[] = { 0, 10, 50, 500, 10000 };

  public int scoreWhite[] = { 0, 10, 50, 500, 10000 };

  private int i0, j0;

  private PropertySet propertySet = null;

  CreatWindow creatWindow = null;

  /**
   * 用于存放悔棋路徑
   */
  public LinkedList<ChessPoint> path = new LinkedList<ChessPoint>();

  /**
   * 是否已經分出勝負的變量
   */
  boolean end;

  /**
   * 用來實現棋盤的按鈕
   */
  private ChessPoint[][] chPoint = new ChessPoint[15][15];

  private Enums.chessState nowPlayer;

  /**
   * 構造函數
   */
  public Battel(CreatWindow window) {
    this.creatWindow = window;
    this.setIcon(CursorsAndImg.BACK);
    this.setSize(540, 540);
    this.setVisible(true);

    GridLayout gridLayout = new GridLayout();
    gridLayout.setRows(15);
    gridLayout.setColumns(15);
    gridLayout.setHgap(0);
    gridLayout.setVgap(0);
    this.setLayout(gridLayout);

    for (int row = 0; row < 15; row++)
      for (int col = 0; col < 15; col++) {
        chPoint[row][col] = new ChessPoint(Enums.chessState.NONE, new Point(
            row, col));
        chPoint[row][col].addMouseListener(this);
        this.add(chPoint[row][col]);
      }

    dirBeginX = new int[] { 0, 0, 0, 1, 0, 14 };
    dirBeginY = new int[] { 0, 0, 0, 0, 0, 1 };
    lineBeginX = new int[] { 0, 1, 0, 1, 1, 0 };
    lineBeginY = new int[] { 1, 0, 1, 0, 0, 1 };
    offsetX = new int[] { 1, 0, 1, 1, -1, -1 };
    offsetY = new int[] { 0, 1, 1, 1, 1, 1 };

    propertySet = PropertySet.getPropertySet();
    // 初始化當前玩家
    nowPlayer = propertySet.getFirst() == SetDatas.BLACK_FIRST ? Enums.chessState.BLACK
        : Enums.chessState.WHITE;
  }

  // 以下為該類的其它非設置獲取參數的函數

  /**
   * 電腦選擇一個點下棋
   */
  private void chosePoint() {
    resetScore();
    evaluate();
    getMax();
  }

  /**
   * 重新設置各點的分值
   */
  private void resetScore() { // 重設分值
    for (int row = 0; row < 15; row++)
      for (int col = 0; col < 15; col++) {
        if (getchessPoint(new Point(row, col)).getState() == Enums.chessState.NONE) {
          getchessPoint(new Point(row, col)).setScore(0);
        }
      }
  }

  /**
   * 判斷并為各點打分
   */
  private void evaluate() {
    for (int k = 0; k < 6; k++) {
      int lineX = this.dirBeginX[k];
      int lineY = this.dirBeginY[k];
      line: for (; valid(lineX, lineY); lineX += lineBeginX[k], lineY += lineBeginY[k]) {
        int x = lineX;
        int y = lineY;
        point: for (; valid(x, y); x += this.offsetX[k], y += this.offsetY[k]) {
          int m = 0;
          Enums.chessState state = Enums.chessState.NONE;
          for (int l = 0; l < 5; l++) {
            int xx = x + l * this.offsetX[k];
            int yy = y + l * this.offsetY[k];
            if (!valid(xx, yy)) {
              continue line;
            }
            if (state == Enums.chessState.NONE) {
              if (getchessPoint(new Point(xx, yy)).getState() != Enums.chessState.NONE) {
                m = 1;
                state = getchessPoint(new Point(xx, yy)).getState();
              }
            } else {
              if (getchessPoint(new Point(xx, yy)).getState() == Enums.chessState.NONE)
                continue;
              if (state != getchessPoint(new Point(xx, yy)).getState()) {
                continue point;
              }
              m++;
            }
          }
          // score
          if (m == 0)// 當前點分數為零
            continue;
          if (m == 5) {
            end = true;
            if (state == Enums.chessState.BLACK) {
              // 玩家贏
              if(propertySet.getSound() == SetDatas.SOUND_ON) {
                Sound.getSound().play(Sound.WIN);//播放玩家贏時的音效
              }
              PopInf.informBlackWin(this);
              // 重新布置棋盤
              for (int row = 0; row < 15; row++)
                for (int col = 0; col < 15; col++) {
                  getchessPoint(new Point(row, col)).setState(
                      Enums.chessState.BLACK);
                }
              return;
            } else {
              //玩家輸
              if(propertySet.getSound() == SetDatas.SOUND_ON) {
                if(propertySet.getModel() == SetDatas.PEOPLE_VS_COMPUTER){//如果人機對戰則此時人輸
                  Sound.getSound().play(Sound.LOSS);//播放玩家輸時的音效
                } else { //播放贏的音效
                  Sound.getSound().play(Sound.WIN);
                }
              }
              PopInf.informWhiteWin(this);
              for (int row = 0; row < 15; row++)
                for (int col = 0; col < 15; col++) {
                  getchessPoint(new Point(row, col)).setState(
                      Enums.chessState.BLACK);
                }
              return;
            }
          }
          int sc = state == Enums.chessState.BLACK ? this.scoreBlack[m]
              : this.scoreWhite[m];
          for (int l = 0; l < 5; l++) {
            int xx = x + l * this.offsetX[k];
            int yy = y + l * this.offsetY[k];
            if (getchessPoint(new Point(xx, yy)).getState() == Enums.chessState.NONE) {
              getchessPoint(new Point(xx, yy)).setScore(
                  getchessPoint(new Point(xx, yy)).getScore() + sc);
            }
          }
        }
      }
    }
  }

  private void getMax() {
    float max = 0;
    i0 = j0 = -1;
    for (int row = 0; row < 15; row++) {
      for (int col = 0; col < 15; col++) {
        if (getchessPoint(new Point(row, col)).getState() == Enums.chessState.NONE) {
          if (max < getchessPoint(new Point(row, col)).getScore()) {
            max = getchessPoint(new Point(row, col)).getScore();
            i0 = row;
            j0 = col;
          }
        }
      }
    }
    if (i0 == -1 || j0 == -1) {
      i0 = j0 = 15 / 2;
    }
  }

  public boolean valid(int i, int j) {// 判斷點是否在棋盤里
    return i >= 0 && i < 15 && j >= 0 && j < 15;
  }

  /**
   * 
   * @return 當前棋盤
   */
  public Battel getBattel() {// 獲取當前棋盤
    return this;
  }

  public Enums.chessState getNowPlayer() {
    return nowPlayer;
  }

  public void setNowPlayer(Enums.chessState nowPlayer) {
    this.nowPlayer = nowPlayer;
  }

  /**
   * 獲取當前棋盤按鈕數組
   * 
   * @return 當前棋盤按鈕數組
   */
  public ChessPoint[][] getchPoint() {
    return this.chPoint;
  }

  /**
   * 當想要獲取取一顆棋時調用
   * 
   * @param argPoint
   *          該點的坐標
   * @return 所找點的引用
   */
  public ChessPoint getchessPoint(Point argPoint) {// 反回某一個子
    return getchPoint()[argPoint.x][argPoint.y];
  }

  /**
   * 設置當前游戲狀態
   * 
   * @param argEnd
   *          是否已經結束
   */
  public void setEnd(boolean argEnd) {
    end = argEnd;
  }

  public boolean getEnd() {
    return end;
  }

  // 以下加入事件處理
  /**
   * 當鼠標進入到某個棋子上方時調用 如果當前棋子已經下過棋了,則設置鼠標形狀為不可用,否則設置為可用并在棋盤上標示
   */
  public void mouseEntered(MouseEvent e) {
    ChessPoint chessPoint = (ChessPoint) e.getSource();
    if (chessPoint.getState() != Enums.chessState.NONE) {// 如果當前點已經有子了
      setCursor(CursorsAndImg.UN_CHESS_ABLE);
      return;
    } else {
      setCursor(new Cursor(CursorsAndImg.HAND_CURSOR));
      chessPoint.setIcon(CursorsAndImg.PUT_ABLE);
      // System.out.println(chessPoint.getPoint().x + "..."
      // + chessPoint.getPoint().y);// 顯示鼠標位置
    }
  }

  /**
   * 鼠標移出某個棋
   */
  public void mouseExited(MouseEvent e) {
    ChessPoint chessPoint = (ChessPoint) e.getSource();
    if (chessPoint.getState() != Enums.chessState.NONE) {// 如果當前點已經有子了
      setCursor(new Cursor(CursorsAndImg.DEFAULT_CURSOR));
      return;
    } else {
      setCursor(new Cursor(CursorsAndImg.DEFAULT_CURSOR));
      chessPoint.setIcon(CursorsAndImg.NONE_CHESS);
    }
  }

  /**
   * 鼠標在某個位置上單擊了一下
   */
  public void mouseClicked(MouseEvent e) {
    ChessPoint chessPoint = (ChessPoint) e.getSource();
    if (chessPoint.getState() != Enums.chessState.NONE) {// 如果當前點已經有子了
      return;
    } else if (propertySet.getModel() == SetDatas.PEOPLE_VS_COMPUTER) {// 人與電腦下模式
      // if (SoundSet.sound == 1) {
      // new Sound(Sound.PUTCHESS);
      // }
      if(propertySet.getSound() == SetDatas.SOUND_ON) {
        Sound.getSound().play(Sound.PUTCHESS);//播放下棋的音效
      }
      
      chessPoint.setState(Enums.chessState.BLACK); // 下子
      chessPoint.setIcon(CursorsAndImg.BLACK_CHESS);
      creatWindow.addTxtTwo("玩家下棋:     " + "坐標("
          + (chessPoint.getPoint().x + 1) + ",    "
          + (chessPoint.getPoint().y + 1) + ");\n ");
      // 加入到路徑中去
      path.offerLast(getchPoint()[chessPoint.getPoint().x][chessPoint
          .getPoint().y]);
      setCursor(CursorsAndImg.UN_CHESS_ABLE);
      // 此處通知電腦下子
      chosePoint();
      if (end) {// 已分出勝負
        return;
      }
      getchessPoint(new Point(i0, j0)).setState(Enums.chessState.WHITE);// 電腦下棋
      getchessPoint(new Point(i0, j0)).setIcon(CursorsAndImg.WHITE_CHESS);
      // 加入路徑
      path.offerLast(getchPoint()[i0][j0]);
      creatWindow.addTxtTwo("電腦下棋:     " + "坐標(" + (i0 + 1) + ",    "
          + (j0 + 1) + ");\n");
      evaluate();
    } else if (propertySet.getModel() == SetDatas.PEOPLE_VS_PEOPLE) {// 人與人下模式
      if (nowPlayer == Enums.chessState.BLACK) {
        if(propertySet.getSound() == SetDatas.SOUND_ON) {
          Sound.getSound().play(Sound.PUTCHESS);//播放下棋的音效
        }
        
        chessPoint.setState(Enums.chessState.BLACK);
        chessPoint.setIcon(CursorsAndImg.BLACK_CHESS);
        nowPlayer = Enums.chessState.WHITE;
        creatWindow.addTxtTwo("黑方下棋:     " + "坐標("
            + (chessPoint.getPoint().x + 1) + ",    "
            + (chessPoint.getPoint().y + 1) + ");\n");
        // 此處加入聲音等設置
      } else if (nowPlayer == Enums.chessState.WHITE) {
        if(propertySet.getSound() == SetDatas.SOUND_ON) {
          Sound.getSound().play(Sound.PUTCHESS);//播放下棋的音效
        }
        
        chessPoint.setState(Enums.chessState.WHITE);
        chessPoint.setIcon(CursorsAndImg.WHITE_CHESS);
        nowPlayer = Enums.chessState.BLACK;
        creatWindow.addTxtTwo("白方下棋:     " + "坐標("
            + (chessPoint.getPoint().x + 1) + ",    "
            + (chessPoint.getPoint().y + 1) + ");\n");
        // 此處加入聲音等設置
      }
      path.offerLast(getchPoint()[chessPoint.getPoint().x][chessPoint
          .getPoint().y]);
      setCursor(CursorsAndImg.UN_CHESS_ABLE);
      evaluate();
    }
  }

  public void mouseReleased(MouseEvent e) {
    // 空實現
    return;
  }

  public void mousePressed(MouseEvent e) {
    // 空實現
    return;
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区日韩一区二区| 日韩电影在线一区| 精品少妇一区二区三区免费观看| 欧美性色综合网| 欧美熟乱第一页| 欧美亚洲综合色| 欧美日韩不卡在线| 宅男在线国产精品| 欧美哺乳videos| 精品粉嫩aⅴ一区二区三区四区| 欧美成人精品二区三区99精品| 欧美xxxx老人做受| 久久久精品国产99久久精品芒果| 精品国产一二三区| 国产日韩亚洲欧美综合| 中文字幕av不卡| ㊣最新国产の精品bt伙计久久| 中文字幕综合网| 亚洲福利视频一区二区| 免费观看久久久4p| 激情综合一区二区三区| 不卡在线视频中文字幕| 色婷婷国产精品久久包臀 | 国产亚洲欧洲997久久综合| 久久嫩草精品久久久久| 中文字幕一区二区在线播放| 亚洲一区日韩精品中文字幕| 人人爽香蕉精品| 成人激情小说乱人伦| 欧美色综合久久| 精品对白一区国产伦| 中文字幕视频一区| 亚洲黄色性网站| 国内欧美视频一区二区| 日本久久一区二区三区| 精品国免费一区二区三区| 亚洲色图制服丝袜| 精品一区免费av| 91网站在线播放| 精品动漫一区二区三区在线观看| 国产精品视频看| 天天影视色香欲综合网老头| 成人18精品视频| 日韩你懂的在线观看| 樱花草国产18久久久久| 国产老妇另类xxxxx| 欧美人伦禁忌dvd放荡欲情| www国产成人免费观看视频 深夜成人网| 中文字幕免费观看一区| 蜜桃精品视频在线观看| 99久久精品国产精品久久| 日韩视频永久免费| 亚洲一区二区精品久久av| 国产一区中文字幕| 欧美一区二区三区公司| 亚洲激情一二三区| 床上的激情91.| 久久在线观看免费| 九色porny丨国产精品| 欧美精品亚洲二区| 亚洲国产另类av| 日本道色综合久久| 亚洲色图都市小说| 成人免费福利片| 国产清纯美女被跳蛋高潮一区二区久久w | 看电影不卡的网站| 欧美久久久久中文字幕| 亚洲成人动漫一区| 欧美天天综合网| 亚洲动漫第一页| 欧美日韩一级二级| 亚洲电影视频在线| 欧美日韩精品欧美日韩精品一| 一区二区三区在线播| 色综合久久综合网97色综合| 亚洲日本va午夜在线影院| 不卡视频一二三四| 亚洲欧美日韩在线播放| 在线观看精品一区| 亚洲国产三级在线| 6080午夜不卡| 久久99久久久欧美国产| 337p粉嫩大胆色噜噜噜噜亚洲| 精品亚洲aⅴ乱码一区二区三区| 欧美r级电影在线观看| 久久99久久精品欧美| 久久久精品免费免费| 本田岬高潮一区二区三区| 国产精品久久99| 欧美性一二三区| 美女免费视频一区二区| 国产亚洲欧美日韩日本| 99久久综合国产精品| 一区二区高清视频在线观看| 91麻豆精品久久久久蜜臀| 老司机精品视频在线| 国产欧美日韩精品一区| 91免费看`日韩一区二区| 亚洲一区二区在线视频| 91精品国产色综合久久ai换脸| 韩国女主播成人在线观看| 国产精品狼人久久影院观看方式| 欧美在线观看视频一区二区 | 国产a久久麻豆| 国产精品久久久久一区| 欧美性大战久久久久久久| 日日摸夜夜添夜夜添精品视频| 精品国产自在久精品国产| 不卡的看片网站| 理论电影国产精品| 亚洲色图欧美在线| 精品粉嫩超白一线天av| 91国产免费观看| 国产成人福利片| 日韩电影一二三区| 亚洲欧洲日韩在线| 日韩免费看的电影| 在线观看网站黄不卡| 激情小说亚洲一区| 午夜精品福利一区二区三区av| 久久亚洲欧美国产精品乐播| 欧美日韩精品一区二区在线播放| 粉嫩av一区二区三区粉嫩| 日韩精品久久久久久| 亚洲欧美电影一区二区| 久久久久久99精品| 欧美一级片在线看| 一本大道综合伊人精品热热| 国产一区二区在线视频| 奇米色777欧美一区二区| 亚洲另类在线一区| 国产精品女同一区二区三区| 欧美精品一区二区三区蜜臀| 欧美日本一区二区| 91精品福利视频| 欧美色欧美亚洲另类二区| 国产999精品久久| 国内久久精品视频| 日韩和欧美一区二区三区| 国产精品护士白丝一区av| 国产日韩欧美一区二区三区综合| 欧美一卡在线观看| 在线不卡免费欧美| 欧美日韩在线直播| 欧美日韩免费观看一区二区三区 | 亚洲一区二区三区四区在线| 中文字幕一区二区三区视频| 国产亚洲美州欧州综合国| 欧美videossexotv100| 欧美一区二区三区视频| 欧美一区日韩一区| 欧美视频一区二区在线观看| 97久久精品人人做人人爽50路| 成人精品国产一区二区4080| 国产成人免费在线视频| 国产大陆a不卡| 成人av综合一区| 成人黄色国产精品网站大全在线免费观看| 国产麻豆视频精品| 成人综合在线网站| 91免费观看在线| 欧美在线一区二区三区| 激情另类小说区图片区视频区| 成人免费在线播放视频| 国产91丝袜在线播放| 色94色欧美sute亚洲13| 欧美女孩性生活视频| 国产最新精品精品你懂的| 美日韩一级片在线观看| 国产综合久久久久久久久久久久| 寂寞少妇一区二区三区| 岛国精品一区二区| 91国产精品成人| 欧美亚洲国产怡红院影院| 欧美乱熟臀69xxxxxx| 久久久久久久精| 亚洲精品欧美二区三区中文字幕| 午夜精品久久久久久久| 国产一区二区三区四区五区入口| 成人一二三区视频| 欧美日韩视频专区在线播放| 欧美日本乱大交xxxxx| 日韩亚洲欧美一区二区三区| 精品国产免费人成在线观看| 自拍偷在线精品自拍偷无码专区| 日韩国产在线一| caoporm超碰国产精品| 欧美日韩高清影院| 国产午夜精品一区二区三区嫩草 | 久久99精品国产麻豆婷婷洗澡| 成人毛片视频在线观看| 91黄视频在线| 久久精品在线观看| 亚洲永久免费av| 99re这里只有精品6| 欧美日韩在线播放一区| 欧美激情艳妇裸体舞| 日韩av一区二区在线影视| 91麻豆精东视频| 久久美女高清视频|