<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                QiPan.java ~~~ import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class QiPan extends JPanel implements MouseListener { private int width;//棋盤兩線之間的距離 boolean focus=false;//棋子的狀態 int jiang1_i=4;//"帥"的i坐標 int jiang1_j=0;//"帥"的j坐標 int jiang2_i=4;//"將"的i坐標 int jiang2_j=9;//"將"的j坐標 int startI=-1;//棋子的開始位置 int startJ=-1; int endI=-1;//棋子的終止位置 int endJ=-1; public QiZi qiZi[][];//棋子的數組 XiangQi xq=null;//聲明XiangQi的引用 GuiZe guiZe;//聲明GuiZe的引用 public QiPan(QiZi qiZi[][],int width,XiangQi xq){ this.xq=xq; this.qiZi=qiZi; this.width=width; guiZe=new GuiZe(qiZi); this.addMouseListener(this);//為棋盤添加鼠標事件監聽器 this.setBounds(0,0,700,700);//設置棋盤的大小 this.setLayout(null);//設為空布局 } public void paint(Graphics g1){ Graphics2D g=(Graphics2D)g1;//獲得Graphics2D對象 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//打開抗鋸齒 Color c=g.getColor();//獲得畫筆顏色 g.setColor(XiangQi.bgColor);//將畫筆設為背景色 g.fill3DRect(60,30,580,630,false);//繪制一個矩形棋盤 g.setColor(Color.black);//畫筆顏色設為黑 for(int i=80;i<=620;i=i+60){//繪制棋盤中的橫線 g.drawLine(110,i,590,i); } g.drawLine(110,80,110,620);//繪制左邊線 g.drawLine(590,80,590,620);//繪制右邊線 for(int i=170;i<=530;i=i+60){//繪制中間的豎線 g.drawLine(i,80,i,320); g.drawLine(i,380,i,620); } g.drawLine(290,80,410,200);//繪制兩邊的斜線 g.drawLine(290,200,410,80); g.drawLine(290,500,410,620); g.drawLine(290,620,410,500); this.smallLine(g,1,2);//繪制紅炮所在位置的標志 this.smallLine(g,7,2);//繪制紅炮所在位置的標志 this.smallLine(g,0,3);//繪制兵所在位置的標志 this.smallLine(g,2,3);//繪制兵所在位置的標志 this.smallLine(g,4,3);//繪制兵所在位置的標志 this.smallLine(g,6,3);//繪制兵所在位置的標志 this.smallLine(g,8,3);//繪制兵所在位置的標志 this.smallLine(g,0,6);//繪制卒所在位置的標志 this.smallLine(g,2,6);//繪制卒所在位置的標志 this.smallLine(g,4,6);//繪制卒所在位置的標志 this.smallLine(g,6,6);//繪制卒所在位置的標志 this.smallLine(g,8,6);//繪制卒所在位置的標志 this.smallLine(g,1,7);//繪制白炮所在位置的標志 this.smallLine(g,7,7);//繪制白炮所在位置的標志 g.setColor(Color.black); Font font1=new Font("宋體",Font.BOLD,50);//設置字體 g.setFont(font1); g.drawString("楚 河",170,365);//繪制楚河漢界 g.drawString("漢 界",400,365); Font font=new Font("宋體",Font.BOLD,30); g.setFont(font);//設置字體 for(int i=0;i<9;i++){ for(int j=0;j<10;j++){//繪制棋子 if(qiZi[i][j]!=null){ if(this.qiZi[i][j].getFocus()!=false){//是否被選中 g.setColor(XiangQi.focusbg);//選中后的背景色 g.fillOval(110+i*60-25,80+j*60-25,50,50);//繪制該棋子 g.setColor(XiangQi.focuschar);//字符的顏色 } else{ g.fillOval(110+i*60-25,80+j*60-25,50,50);//繪制該棋子 g.setColor(qiZi[i][j].getColor());//設置畫筆顏色 } g.drawString(qiZi[i][j].getName(),110+i*60-15,80+j*60+10); g.setColor(Color.black);//設為黑色 } } } g.setColor(c);//還原畫筆顏色 } public void smallLine(Graphics2D g,int i,int j){ int x=110+60*i;//計算坐標 int y=80+60*j; if(i>0){//繪制左上方的標志 g.drawLine(x-3,y-3,x-20,y-3);g.drawLine(x-3,y-3,x-3,y-20); } if(i<8){//繪制右上方的標志 g.drawLine(x+3,y-3,x+20,y-3);g.drawLine(x+3,y-3,x+3,y-20); } if(i>0){//繪制左下方的標志 g.drawLine(x-3,y+3,x-20,y+3);g.drawLine(x-3,y+3,x-3,y+20); } if(i<8){//繪制右下方的標志 g.drawLine(x+3,y+3,x+20,y+3);g.drawLine(x+3,y+3,x+3,y+20); } } public int[] getPos(MouseEvent e){ int[] pos=new int[2]; pos[0]=-1; pos[1]=-1; Point p=e.getPoint();//獲得事件發生的坐標點 double x=p.getX(); double y=p.getY(); if(Math.abs((x-110)/1%60)<=25){//獲得對應于數組x下標的位置 pos[0]=Math.round((float)(x-110))/60; } else if(Math.abs((x-110)/1%60)>=35){ pos[0]=Math.round((float)(x-110))/60+1; } if(Math.abs((y-80)/1%60)<=25){//獲得對應于數組y下標的位置 pos[1]=Math.round((float)(y-80))/60; } else if(Math.abs((y-80)/1%60)>=35){ pos[1]=Math.round((float)(y-80))/60+1; } return pos; } public void noFocus(int i,int j){ if(this.qiZi[i][j]!=null)//如果該位置有棋子 { if(this.xq.color==0)//如果是紅方 { if(this.qiZi[i][j].getColor().equals(XiangQi.color1))//如果棋子是紅色 { this.qiZi[i][j].setFocus(true);//將該棋子設為選中狀態 focus=true;//將focus設為true startI=i;//保存該坐標點 startJ=j; } } else//如果是白方 { if(this.qiZi[i][j].getColor().equals(XiangQi.color2))//如果該棋子是白色 { this.qiZi[i][j].setFocus(true);//將該棋子設為選中狀態 focus=true;//將focus設為true startI=i;//保存該坐標點 startJ=j; } } } } public void success(){ qiZi[endI][endJ]=qiZi[startI][startJ];//吃掉該棋子 qiZi[startI][startJ]=null;//將原來的位置設為空 this.xq.repaint();//重繪 JOptionPane.showMessageDialog(this.xq,"恭喜您,您獲勝了","提示", JOptionPane.INFORMATION_MESSAGE);//給出獲勝信息 this.xq.cat.tiaoZhanZhe=null; this.xq.color=0; this.xq.caiPan=false; this.xq.next();//還原棋盤,進入下一盤 this.xq.jtfHost.setEnabled(false); this.xq.jtfPort.setEnabled(false);//設置各控件的狀態 this.xq.jtfNickName.setEnabled(false); this.xq.jbConnect.setEnabled(false); this.xq.jbDisconnect.setEnabled(true); this.xq.jbChallenge.setEnabled(true); this.xq.jbYChallenge.setEnabled(false); this.xq.jbNChallenge.setEnabled(false); this.xq.jbFail.setEnabled(false); startI=-1;//還原保存點 startJ=-1; endI=-1; endJ=-1; jiang1_i=4;//"帥"的i坐標 jiang1_j=0;//"帥"的j坐標 jiang2_i=4;//"將"的i坐標 jiang2_j=9;//"將"的j坐標 focus=false; } public void noJiang(){ qiZi[endI][endJ]=qiZi[startI][startJ]; qiZi[startI][startJ]=null;//走棋 qiZi[endI][endJ].setFocus(false);//將該棋設為非選中狀態 this.xq.repaint();//重繪 if(qiZi[endI][endJ].getName().equals("帥")){//如果移動的是"帥" jiang1_i=endI;//更新"帥"的位置坐標 jiang1_j=endJ; } else if(qiZi[endI][endJ].getName().equals("將")){//如果移動的是"將" jiang2_i=endI;//更新"將"的位置坐標 jiang2_j=endJ; } if(jiang1_i==jiang2_i){//如果"將"和"帥"在一條豎線上 int count=0; for(int jiang_j=jiang1_j+1;jiang_j<jiang2_j;jiang_j++){//遍歷這條豎線 if(qiZi[jiang1_i][jiang_j]!=null){ count++;break; } } if(count==0){//如果等于零則照將 JOptionPane.showMessageDialog(this.xq,"照將!!!你失敗了!!!","提示", JOptionPane.INFORMATION_MESSAGE);//給出失敗信息 this.xq.cat.tiaoZhanZhe=null; this.xq.color=0;//還原棋盤,進入下一盤 this.xq.caiPan=false; this.xq.next();//進入下一盤 this.xq.jtfHost.setEnabled(false); this.xq.jtfPort.setEnabled(false);//設置各控件狀態 this.xq.jtfNickName.setEnabled(false); this.xq.jbConnect.setEnabled(false); this.xq.jbDisconnect.setEnabled(true); this.xq.jbChallenge.setEnabled(true); this.xq.jbYChallenge.setEnabled(false); this.xq.jbNChallenge.setEnabled(false); this.xq.jbFail.setEnabled(false); jiang1_i=4;//"帥"的i坐標 jiang1_j=0;//"帥"的j坐標 jiang2_i=4;//"將"的i坐標 jiang2_j=9;//"將"的j坐標 } } startI=-1; startJ=-1;//還原保存點 endI=-1; endJ=-1; focus=false; } public void noQiZi(){ try{//將該移動信息發送給對方 this.xq.cat.dout.writeUTF("<#MOVE#>"+this.xq.cat.tiaoZhanZhe+startI+startJ+endI+endJ); this.xq.caiPan=false; qiZi[endI][endJ]=qiZi[startI][startJ]; qiZi[startI][startJ]=null;//走棋 qiZi[endI][endJ].setFocus(false);//將該棋設為非選中狀態 this.xq.repaint();//重繪 if(qiZi[endI][endJ].getName().equals("帥")){//如果移動的是"帥" jiang1_i=endI;//更新"帥"的位置坐標 jiang1_j=endJ; } else if(qiZi[endI][endJ].getName().equals("將")){//如果移動的是"將" jiang2_i=endI;//更新"將"的位置坐標 jiang2_j=endJ; } if(jiang1_i==jiang2_i)//如果"將"和"帥"在一條豎線上 { int count=0; for(int jiang_j=jiang1_j+1;jiang_j<jiang2_j;jiang_j++){//遍歷這條豎線 if(qiZi[jiang1_i][jiang_j]!=null){ count++;break; } } if(count==0){//如果等于零則照將 JOptionPane.showMessageDialog(this.xq,"照將!!!你失敗了!!!","提示", JOptionPane.INFORMATION_MESSAGE);//給出失敗信息 this.xq.cat.tiaoZhanZhe=null; this.xq.color=0;//還原棋盤,進入下一盤 this.xq.caiPan=false; this.xq.next();//進入下一盤 this.xq.jtfHost.setEnabled(false); this.xq.jtfPort.setEnabled(false); this.xq.jtfNickName.setEnabled(false);//設置各控件狀態 this.xq.jbConnect.setEnabled(false); this.xq.jbDisconnect.setEnabled(true); this.xq.jbChallenge.setEnabled(true); this.xq.jbYChallenge.setEnabled(false); this.xq.jbNChallenge.setEnabled(false); this.xq.jbFail.setEnabled(false); jiang1_i=4;//"帥"的i坐標 jiang1_j=0;//"帥"的j坐標 jiang2_i=4;//"將"的i坐標 jiang2_j=9;//"將"的j坐標 } } startI=-1; startJ=-1;//還原保存點 endI=-1; endJ=-1; focus=false; } catch(Exception ee){ee.printStackTrace();} } public void move(int startI,int startJ,int endI,int endJ){ if(qiZi[endI][endJ]!=null&&(qiZi[endI][endJ].getName().equals("帥")|| qiZi[endI][endJ].getName().equals("將"))){//如果"將"被吃了 qiZi[endI][endJ]=qiZi[startI][startJ]; qiZi[startI][startJ]=null;//走棋 this.xq.repaint();//重繪 JOptionPane.showMessageDialog(this.xq,"很遺憾,您失敗了!!!","提示", JOptionPane.INFORMATION_MESSAGE);//給出失敗信息 this.xq.cat.tiaoZhanZhe=null; this.xq.color=0;//還原棋盤進入下一盤 this.xq.caiPan=false; this.xq.next(); this.xq.jtfHost.setEnabled(false);//還原各個控件的狀態 this.xq.jtfPort.setEnabled(false); this.xq.jtfNickName.setEnabled(false); this.xq.jbConnect.setEnabled(false); this.xq.jbDisconnect.setEnabled(true); this.xq.jbChallenge.setEnabled(true); this.xq.jbYChallenge.setEnabled(false); this.xq.jbNChallenge.setEnabled(false); this.xq.jbFail.setEnabled(false); jiang1_i=4;//"帥"的i坐標 jiang1_j=0;//"帥"的j坐標 jiang2_i=4;//"將"的i坐標 jiang2_j=9;//"將"的j坐標 } else{//如果不是"將" qiZi[endI][endJ]=qiZi[startI][startJ]; qiZi[startI][startJ]=null;//走棋 this.xq.repaint();//重繪 if(qiZi[endI][endJ].getName().equals("帥")){ jiang1_i=endI;//如果是"帥" jiang1_j=endJ; } else if(qiZi[endI][endJ].getName().equals("將")){ jiang2_i=endI;//如果是"將" jiang2_j=endJ; } if(jiang1_i==jiang2_i){//如果兩將在一條線上 int count=0; for(int jiang_j=jiang1_j+1;jiang_j<jiang2_j;jiang_j++){ if(qiZi[jiang1_i][jiang_j]!=null){//有棋子 count++;break; } } if(count==0){ JOptionPane.showMessageDialog(this.xq,"對方照將!!!你勝利了!!!", "提示",JOptionPane.INFORMATION_MESSAGE);//給出失敗信息 this.xq.cat.tiaoZhanZhe=null; this.xq.color=0;//還原棋盤,進入下一盤 this.xq.caiPan=false; this.xq.next(); this.xq.jtfHost.setEnabled(false); this.xq.jtfPort.setEnabled(false);//設置各空間位置 this.xq.jtfNickName.setEnabled(false); this.xq.jbConnect.setEnabled(false); this.xq.jbDisconnect.setEnabled(true); this.xq.jbChallenge.setEnabled(true); this.xq.jbYChallenge.setEnabled(false); this.xq.jbNChallenge.setEnabled(false); this.xq.jbFail.setEnabled(false); jiang1_i=4;//"帥"的i坐標 jiang1_j=0;//"帥"的j坐標 jiang2_i=4;//"將"的i坐標 jiang2_j=9;//"將"的j坐標 } } } this.xq.repaint();//重繪 } @Override public void mouseClicked(MouseEvent e) { if(this.xq.caiPan==true){//判斷是否輪到該玩家走棋 int i=-1,j=-1; int[] pos=getPos(e); i=pos[0]; j=pos[1]; if(i>=0&&i<=8&&j>=0&&j<=9){//如果在棋盤范圍內 if(focus==false){//如果其面沒有選中棋子 this.noFocus(i,j); } else{//如果以前選中過棋子 if(qiZi[i][j]!=null){//如果該處有棋子 if(qiZi[i][j].getColor()==qiZi[startI][startJ].getColor()) {//如果是自己的棋子 qiZi[startI][startJ].setFocus(false); qiZi[i][j].setFocus(true);//更改選中對象 startI=i;startJ=j;//保存修改 } else{//如果是對方棋子 endI=i;//保存該點 endJ=j; String name=qiZi[startI][startJ].getName();//獲得該棋子的名字 //看是否可以移動 boolean canMove=guiZe.canMove(startI,startJ,endI,endJ,name); if(canMove)//如果可以移動 { try{//將該移動信息發送給對方 this.xq.cat.dout.writeUTF("<#MOVE#>"+ this.xq.cat.tiaoZhanZhe+startI+startJ+endI+endJ); this.xq.caiPan=false; if(qiZi[endI][endJ].getName().equals("帥")|| qiZi[endI][endJ].getName().equals("將")) {//如果終點處是對方的"將" this.success(); } else{//如果終點不是對方的"將" this.noJiang(); } } catch(Exception ee){ee.printStackTrace();} } } } else{//如果沒有棋子 endI=i; endJ=j;//保存終點 String name=qiZi[startI][startJ].getName();//獲得該棋的名字 boolean canMove=guiZe.canMove(startI,startJ,endI,endJ,name);//判斷是否可走 if(canMove){//如果可以移動 this.noQiZi(); } } } } this.xq.repaint();//重繪 } } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看