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

📄 chess.java

📁 象棋游戏源码-单个文件编译随处运行. 象棋游戏源码-单个文件编译随处运行.
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
       else if(endJ<=5)  
          {
            if((startJ-endJ==1)&&(xAxle==0)) 
               {
                  可否走棋=true; 
               }
            else if((endJ-startJ==0)&&(xAxle==1))
               {
                  可否走棋=true; 
               }
            else
               {
                  可否走棋=false; 
               }
          }
    }
   else if(piece.getName().equals("卒"))  
    {
      int xAxle=Math.abs(startI-endI);
      int yAxle=Math.abs(startJ-endJ);
      
       if(endJ<=5)  
          {
            if(endJ-startJ==1&&xAxle==0) 
               {
                  可否走棋=true; 
               }
            else
               {
                  可否走棋=false; 
               }
          }
       else if(endJ>=6)  
          {
            if((endJ-startJ==1)&&(xAxle==0))  
               {
                  可否走棋=true; 
               }
            else if((endJ-startJ==0)&&(xAxle==1)) 
               {
                  可否走棋=true; 
               }
            else
               {
                  可否走棋=false; 
               }
          }
    }
  
   else if(piece.getName().equals("士"))  
    { 
      int xAxle=Math.abs(startI-endI);
      int yAxle=Math.abs(startJ-endJ);
      if(endI<=6&&endI>=4&&xAxle==1&&yAxle==1) 
         {
           可否走棋=true; 
         }
      else
         {
           可否走棋=false;
         }
    }
   else if((piece.getName().equals("帅"))||(piece.getName().equals("将")))  
    {
      int xAxle=Math.abs(startI-endI);
      int yAxle=Math.abs(startJ-endJ);
      if(endI<=6&&endI>=4)
          { 
            if((xAxle==1&&yAxle==0)||(xAxle==0&&yAxle==1))
              {
                可否走棋=true; 
              }
            else
              {
                 可否走棋=false;
              }
          } 
       else
          {
            可否走棋=false;
          }
    }

   return 可否走棋;

  }
}
class MoveStep implements java.io.Serializable
{
  public Point pStart,pEnd;
  public MoveStep(Point p1,Point p2)
  {
     pStart=p1;
     pEnd=p2;
  }
}
class MakeChessManual extends JPanel implements ActionListener
{
  JTextArea text=null;
  JScrollPane scroll=null;
  ChessBoard board=null;
  ChessPoint[][] point;
  LinkedList 棋谱=null;
  LinkedList 吃掉的棋子=null;    
  JButton buttonUndo;
  int i=0;
  public MakeChessManual(ChessBoard board,ChessPoint[][] point)   
  {
   this.board=board;
   this.point=point;
   text=new JTextArea();
   scroll=new JScrollPane(text);
   棋谱=new LinkedList();
   吃掉的棋子=new LinkedList();
   buttonUndo=new JButton("悔棋");
   buttonUndo.setFont(new Font("隶书",Font.PLAIN,18));
   setLayout(new BorderLayout());
   add(scroll,BorderLayout.CENTER);
   add(buttonUndo,BorderLayout.SOUTH);
   buttonUndo.addActionListener(this);
  }
  public char numberToLetter(int n)   
  { 
    char c='\0';
    switch(n)
     {
       case 1 : c='A'; break;
       case 2 : c='B'; break;
       case 3 : c='C'; break;
       case 4 : c='D'; break;
       case 5 : c='E'; break;
       case 6 : c='F'; break;
       case 7 : c='G'; break;
       case 8 : c='H'; break;
       case 9 : c='I'; break;
       case 10 : c='J'; break;
     } 
    return c;
  }
  public void 记录棋谱(ChessPiece piece,int startI,int startJ,int endI,int endJ)
  { 
     Point pStart=new Point(startI,startJ);
     Point pEnd=new Point(endI,endJ);
     MoveStep step=new MoveStep(pStart, pEnd);
     棋谱.add(step);
     
     String 棋子类别=piece.棋子类别();
     String name=piece.getName();
     String m="#"+棋子类别+name+": "+
              startI+numberToLetter(startJ)+" 到 "+endI+numberToLetter(endJ);
     text.append(m);
     if(piece.棋子类别().equals(board.黑方颜色))
        text.append("\n");
  }
 public void 记录吃掉的棋子(Object object)
  {
     吃掉的棋子.add(object);
  }
 
  public LinkedList 获取棋谱()
  {
     return 棋谱;
  }
 public void actionPerformed(ActionEvent e)
  { 
   int position=text.getText().lastIndexOf("#");
   if(position!=-1)
     text.replaceRange("",position,text.getText().length());
   if(棋谱.size()>0)
     {
      MoveStep lastStep=(MoveStep)棋谱.getLast();
      棋谱.removeLast();
      Object qizi=吃掉的棋子.getLast();
      吃掉的棋子.removeLast();
      String temp=qizi.toString();
     if(temp.equals("没吃棋子"))
      {
        int startI=lastStep.pStart.x;
        int startJ=lastStep.pStart.y; 
        int endI=lastStep.pEnd.x;
        int endJ=lastStep.pEnd.y; 
        ChessPiece piece=point[endI][endJ].getPiece();
        
        point[startI][startJ].setPiece(piece,board);
        (point[endI][endJ]).set有棋子(false);
 
        if(piece.棋子类别().equals(board.红方颜色))
         {
           board.红方走棋=true;
           board. 黑方走棋=false;
         }
        if(piece.棋子类别().equals(board.黑方颜色))
         {
           board.黑方走棋=true;
           board.红方走棋=false;
         }
       }
     else
       {
         ChessPiece removedPiece=(ChessPiece)qizi;
         int startI=lastStep.pStart.x;
         int startJ=lastStep.pStart.y; 
         int endI=lastStep.pEnd.x;
         int endJ=lastStep.pEnd.y; 
         ChessPiece piece=point[endI][endJ].getPiece();
         point[startI][startJ].setPiece(piece,board);     
         point[endI][endJ].setPiece(removedPiece,board);  
         (point[endI][endJ]).set有棋子(true);
 
        if(piece.棋子类别().equals(board.红方颜色))
         {
           board.红方走棋=true;
           board. 黑方走棋=false;
         }
        if(piece.棋子类别().equals(board.黑方颜色))
         {
           board.黑方走棋=true;
           board.红方走棋=false;
         }
      }
    }
  }
}
class Demon extends JPanel  implements ActionListener,Runnable
{
   public JButton replay=null,next=null,auto=null,stop=null;
   LinkedList 棋谱=null;
   Thread 自动演示=null;
   int index=-1;
   ChessBoard board=null;
   JTextArea text;
   JTextField 时间间隔=null;
   int time=1000;
   String 演示过程="";
   JSplitPane splitH=null,splitV=null;
   public  Demon(ChessBoard board)
   {    
        this.board=board;
        replay=new JButton("重新演示");
        next=new JButton("下一步");
        auto=new JButton("自动演示");
        stop=new JButton("暂停演示");
        自动演示=new Thread(this);
        replay.addActionListener(this);
        next.addActionListener(this);
        auto.addActionListener(this);
        stop.addActionListener(this); 
        text=new JTextArea(); 
        时间间隔=new JTextField("1");
        setLayout(new BorderLayout());
        JScrollPane pane=new JScrollPane(text);
        JPanel p=new JPanel(new GridLayout(3,2));
        p.add(next);
        p.add(replay);
        p.add(auto);
        p.add(stop);
        p.add(new JLabel("时间间隔(秒)",SwingConstants.CENTER)) ;
        p.add(时间间隔);
        splitV=new JSplitPane(JSplitPane.VERTICAL_SPLIT,pane,p);
        splitH=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,board,splitV);
        splitV.setDividerSize(5);
        splitV.setDividerLocation(400);
        splitH.setDividerSize(5);
        splitH.setDividerLocation(460);
        add(splitH,BorderLayout.CENTER); 
        validate();
    }   
 public void set棋谱(LinkedList 棋谱)
   { 
    this.棋谱=棋谱;
   }
 public char numberToLetter(int n)   
  { 
    char c='\0';
    switch(n)
     {
       case 1 : c='A'; break;
       case 2 : c='B'; break;
       case 3 : c='C'; break;
       case 4 : c='D'; break;
       case 5 : c='E'; break;
       case 6 : c='F'; break;
       case 7 : c='G'; break;
       case 8 : c='H'; break;
       case 9 : c='I'; break;
       case 10 : c='J'; break;
     } 
    return c;
  }
 public void actionPerformed(ActionEvent e)
  {
    if(e.getSource()==next)
      {
         index++;
         if(index<棋谱.size())
           { 
              演示一步(index);
           }
         else
           {
             演示结束("棋谱演示完毕");
           } 
       }
     if(e.getSource()==replay)
       {
          board=new ChessBoard(45,45,9,10);
          splitH.remove(board);
          splitH.setDividerSize(5);
          splitH.setDividerLocation(460);
          splitH.setLeftComponent(board);
          splitH.validate();
          index=-1;
          text.setText(null);
       }
     if(e.getSource()==auto)
       {
           next.setEnabled(false);
           replay.setEnabled(false); 
           try
              {
                time=1000*Integer.parseInt(时间间隔.getText().trim());
              }
           catch(NumberFormatException ee)
              {
                time=1000;
              } 
 
           if(!(自动演示.isAlive()))          
             {
                自动演示=new Thread(this);
                board=new ChessBoard(45,45,9,10);
                splitH.remove(board);
                splitH.setDividerSize(5);
                splitH.setDividerLocation(460);
                splitH.setLeftComponent(board);
                splitH.validate();
                text.setText(null);
                自动演示.start();
             }
   
       }
     if(e.getSource()==stop)
       {
          if(e.getActionCommand().equals("暂停演示"))
               {
                 演示过程="暂停演示";
                 stop.setText("继续演示");
                 stop.repaint();
               }
          if(e.getActionCommand().equals("继续演示"))
               {
                 演示过程="继续演示";
                 自动演示.interrupt();   
                 stop.setText("暂停演示");
                 stop.repaint();
               }
       }
  }
  public synchronized void run()
  {
    for(index=0;index<棋谱.size();index++)
       {
         try{
              Thread.sleep(time);
            }
         catch(InterruptedException e)
            {
            }  
         while(演示过程.equals("暂停演示"))
            {  
                 try{
                      wait();  
                    }
                  catch(InterruptedException e)
                    {
                      notifyAll();  
                    }  
            }
         演示一步(index);
       }
     if(index>=棋谱.size())
       {
         演示结束("棋谱演示完毕");
         next.setEnabled(true);
         replay.setEnabled(true);  
       } 
  }
  public void 演示一步(int index)
  {
     MoveStep step=(MoveStep)棋谱.get(index);
          Point pStart=step.pStart;
          Point pEnd  =step.pEnd;
          int startI  =pStart.x;
          int startJ  =pStart.y;
          int endI    =pEnd.x;
          int endJ    =pEnd.y;
          ChessPiece piece=(board.point)[startI][startJ].getPiece();
      if((board.point)[endI][endJ].isPiece()==true)
          {
            ChessPiece pieceRemoved=(board.point)[endI][endJ].getPiece();
            (board.point)[endI][endJ].reMovePiece(pieceRemoved,board);
            board.repaint();
            (board.point)[endI][endJ].setPiece(piece,board);
            (board.point)[startI][startJ].set有棋子(false);
            board.repaint();
          }
      else
          {
            (board.point)[endI][endJ].setPiece(piece,board);
            (board.point)[startI][startJ].set有棋子(false);
                  
          }
      String 棋子类别=piece.棋子类别();
      String name=piece.getName();
      String m="#"+棋子类别+name+": "+
                   startI+numberToLetter(startJ)+" 到 "+endI+numberToLetter(endJ);
      text.append(m);
      if(piece.棋子类别().equals(board.黑方颜色))
            text.append("\n");
  }
 public void 演示结束(String message)
  {
    splitH.remove(board);
    splitH.setDividerSize(5);
    splitH.setDividerLocation(460);
    JLabel label=new JLabel(message);
    label.setFont(new Font("隶书",Font.BOLD,40));
    label.setForeground(Color.blue); 
    label.setHorizontalAlignment(SwingConstants.CENTER);
    splitH.setLeftComponent(label);
    splitH.validate();
  }
}

⌨️ 快捷键说明

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