毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

java中国象棋 第2页

更新时间:2008-12-11:  来源:毕业论文

java中国象棋 第2页
    //获得Y坐标
    int y = Integer.parseInt((String)Var.get(Var.size()-2));
    //获得索引
    int M = Integer.parseInt((String)Var.get(Var.size()-1));   
  
    //赋给棋子
    play[M].setVisible(true);   
    play[M].setBounds(x,y,55,55);
    
    if (play[M].getName().charAt(1) == '1'){
     text.setText("               黑棋走棋");
     chessPlayClick = 1;
    }
    else{
     text.setText("               红棋走棋");
     chessPlayClick = 2;
    }
    
    //删除用过的坐标
    Var.remove(Var.size()-4);
    Var.remove(Var.size()-3);
    Var.remove(Var.size()-2);
    Var.remove(Var.size()-1);
    
    //停止旗子闪烁
    chessManClick=false;
   }
   
   catch(Exception e){
   }
  }
 
  //退出
  else if (ae.getSource().equals(exit)){
   int j=JOptionPane.showConfirmDialog(
    this,"真的要退出吗?","退出",
    JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
   
   if (j == JOptionPane.YES_OPTION){
    System.exit(0);
   }
  }
 }

 /*定义中国象棋规则的类*/
 class ChessRule {
  /**卒子的移动规则*/
  public void armsRule(int Man,JLabel play,MouseEvent me){
   //黑卒向下
   if (Man < 21){
    //向下移动、得到终点的坐标模糊成合法的坐标
    if ((me.getY()-play.getY()) > 27 && (me.getY()-play.getY()) < 86 && (me.getX()-play.getX()) < 55 && (me.getX()-play.getX()) > 0){
     
     //当前记录添加到集合(用于悔棋)
     Var.add(String.valueOf(play.isVisible()));
     Var.add(String.valueOf(play.getX()));
     Var.add(String.valueOf(play.getY()));
     Var.add(String.valueOf(Man));
     
     play.setBounds(play.getX(),play.getY()+57,55,55);
    }
    
    //向右移动、得到终点的坐标模糊成合法的坐标、必须过河    
    else if (play.getY() > 284 && (me.getX() - play.getX()) >= 57 && (me.getX() - play.getX()) <= 112){
     play.setBounds(play.getX()+57,play.getY(),55,55); 
    }
    
    //向左移动、得到终点的坐标模糊成合法的坐标、必须过河
    else if (play.getY() > 284 && (play.getX() - me.getX()) >= 2 && (play.getX() - me.getX()) <=58){
     //模糊坐标
     play.setBounds(play.getX()-57,play.getY(),55,55);
    }
   }
   
   //红卒向上
   else{
    //当前记录添加到集合(用于悔棋)
    Var.add(String.valueOf(play.isVisible()));
    Var.add(String.valueOf(play.getX()));
    Var.add(String.valueOf(play.getY()));
    Var.add(String.valueOf(Man));
    
    //向上移动、得到终点的坐标模糊成合法的坐标
    if ((me.getX()-play.getX()) >= 0 && (me.getX()-play.getX()) <= 55 && (play.getY()-me.getY()) >27 && play.getY()-me.getY() < 86){
     play.setBounds(play.getX(),play.getY()-57,55,55);
    }
    
    //向右移动、得到终点的坐标模糊成合法的坐标、必须过河
    else if (play.getY() <= 341 && (me.getX() - play.getX()) >= 57 && (me.getX() - play.getX()) <= 112){
     play.setBounds(play.getX()+57,play.getY(),55,55);
    }    
    
    //向左移动、得到终点的坐标模糊成合法的坐标、必须过河
    else if (play.getY() <= 341 && (play.getX() - me.getX()) >= 3 && (play.getX() - me.getX()) <=58){
     play.setBounds(play.getX()-57,play.getY(),55,55);
    }
   }
  }//卒移动结束

  /**卒吃棋规则*/
  public void armsRule(JLabel play1,JLabel play2){
   //向右走
   if ((play2.getX() - play1.getX()) <= 112 && (play2.getX() - play1.getX()) >= 57 && (play1.getY() - play2.getY()) < 22 && (play1.getY() - play2.getY()) > -22 && play2.isVisible() && play1.getName().charAt(1)!=play2.getName().charAt(1)){
    //黑棋要过河才能右吃棋
    if (play1.getName().charAt(1) == '1' && play1.getY() > 284 && play1.getName().charAt(1) != play2.getName().charAt(1)){

     play2.setVisible(false);
     //把对方的位置给自己
     play1.setBounds(play2.getX(),play2.getY(),55,55);
    }
    
    //红棋要过河才左能吃棋
    else if (play1.getName().charAt(1) == '2' && play1.getY() < 341 && play1.getName().charAt(1) != play2.getName().charAt(1)){
     play2.setVisible(false);
     //把对方的位置给自己
     play1.setBounds(play2.getX(),play2.getY(),55,55);    
    }
   }
   
   //向左走
   else if ((play1.getX() - play2.getX()) <= 112 && (play1.getX() - play2.getX()) >= 57 && (play1.getY() - play2.getY()) < 22 && (play1.getY() - play2.getY()) > -22 && play2.isVisible() && play1.getName().charAt(1)!=play2.getName().charAt(1)){
    //黑棋要过河才能左吃棋
    if (play1.getName().charAt(1) == '1' && play1.getY() > 284 && play1.getName().charAt(1) != play2.getName().charAt(1)){
     play2.setVisible(false);
     //把对方的位置给自己
     play1.setBounds(play2.getX(),play2.getY(),55,55);
    }
    
    //红棋要过河才能右吃棋
    else if (play1.getName().charAt(1) == '2' && play1.getY() < 341 && play1.getName().charAt(1) != play2.getName().charAt(1)){
     play2.setVisible(false);
     //把对方的位置给自己
     play1.setBounds(play2.getX(),play2.getY(),55,55);    
    }
   }
   
   //向上走
   else if (play1.getX() - play2.getX() >= -22 && play1.getX() - play2.getX() <= 22 && play1.getY() - play2.getY() >= -112 && play1.getY() - play2.getY() <= 112){
    //黑棋不能向上吃棋
    if (play1.getName().charAt(1) == '1' && play1.getY() < play2.getY() && play1.getName().charAt(1) != play2.getName().charAt(1)){
     play2.setVisible(false);
     //把对方的位置给自己
     play1.setBounds(play2.getX(),play2.getY(),55,55);
    }
    
    //红棋不能向下吃棋
    else if (play1.getName().charAt(1) == '2' && play1.getY() > play2.getY() && play1.getName().charAt(1) != play2.getName().charAt(1)){
     play2.setVisible(false);
     //把对方的位置给自己
     play1.setBounds(play2.getX(),play2.getY(),55,55);
    }   
   }
   
   //当前记录添加到集合(用于悔棋)
   Var.add(String.valueOf(play1.isVisible()));
   Var.add(String.valueOf(play1.getX()));
   Var.add(String.valueOf(play1.getY()));
   Var.add(String.valueOf(Man));
   
   //当前记录添加到集合(用于悔棋)
   Var.add(String.valueOf(play2.isVisible()));
   Var.add(String.valueOf(play2.getX()));
   Var.add(String.valueOf(play2.getY()));
   Var.add(String.valueOf(i));

  }//卒吃结束
  
  /**炮、车移动规则*/
  public void cannonRule(JLabel play,JLabel playQ[],MouseEvent me){
   //起点和终点之间是否有棋子
   int Count = 0;
   
   //上、下移动
   if (play.getX() - me.getX() <= 0 && play.getX() - me.getX() >= -55){
    //指定所有模糊Y坐标
    for (int i=56;i<=571;i+=57){
     //移动的Y坐标是否有指定坐标相近的
     if (i - me.getY() >= -27 && i - me.getY() <= 27){
      //所有的棋子
      for (int j=0;j<32;j++){
       //找出在同一条竖线的所有棋子、并不包括自己
       if (playQ[j].getX() - play.getX() >= -27 && playQ[j].getX() - play.getX() <= 27 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){
        //从起点到终点(从左到右)
        for (int k=play.getY()+57;k<i;k+=57){
         //大于起点、小于终点的坐标就可以知道中间是否有棋子
         if (playQ[j].getY() < i && playQ[j].getY() > play.getY()){
          //中间有一个棋子就不可以从这条竖线过去
          Count++;
          break;
         }
        }//for
        
        //从起点到终点(从右到左)
        for (int k=i+57;k<play.getY();k+=57){
         //找起点和终点的棋子
         if (playQ[j].getY() < play.getY() && playQ[j].getY() > i){
          Count++;
          break;
         }
        }//for
       }//if
      }//for
      
      //起点和终点没有棋子就可以移动了
      if (Count == 0){
       //当前记录添加到集合(用于悔棋)
       Var.add(String.valueOf(play.isVisible()));
       Var.add(String.valueOf(play.getX()));
       Var.add(String.valueOf(play.getY()));
       Var.add(String.valueOf(Man));
       play.setBounds(play.getX(),i,55,55);
       break;
      }
     }//if
    }//for
   }//if

   //左、右移动
   else if (play.getY() - me.getY() >=-27 && play.getY() - me.getY() <= 27){
    //指定所有模糊X坐标
    for (int i=24;i<=480;i+=57){
     //移动的X坐标是否有指定坐标相近的
     if (i - me.getX() >= -55 && i-me.getX() <= 0){
      //所有的棋子
      for (int j=0;j<32;j++){
       //找出在同一条横线的所有棋子、并不包括自己
       if (playQ[j].getY() - play.getY() >= -27 && playQ[j].getY() - play.getY() <= 27 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){
        //从起点到终点(从上到下)    
        for (int k=play.getX()+57;k<i;k+=57){
         //大于起点、小于终点的坐标就可以知道中间是否有棋子
         if (playQ[j].getX() < i && playQ[j].getX() > play.getX()){
          //中间有一个棋子就不可以从这条横线过去
          Count++;
          break;
         }
        }//for
        
        //从起点到终点(从下到上)
        for (int k=i+57;k<play.getX();k+=57){
         //找起点和终点的棋子
         if (playQ[j].getX() < play.getX() && playQ[j].getX() > i){
          Count++;
          break;
         }
        }//for
       }//if
      }//for
      
      //起点和终点没有棋子
      if (Count == 0){
       //当前记录添加到集合(用于悔棋)
       Var.add(String.valueOf(play.isVisible()));
       Var.add(String.valueOf(play.getX()));
       Var.add(String.valueOf(play.getY()));
       Var.add(String.valueOf(Man));
       
       play.setBounds(i,play.getY(),55,55);
       break;
      }
     }//if
    }//for
   }//else
   
  }//炮、车移动方法结束


  /**炮、车吃棋规则*/
  public void cannonRule(int Chess,JLabel play,JLabel playTake,JLabel playQ[],MouseEvent me){
   //起点和终点之间是否有棋子
   int Count = 0;


   //所有的棋子
   for (int j=0;j<32;j++){
    //找出在同一条竖线的所有棋子、并不包括自己
    if (playQ[j].getX() - play.getX() >= -27 && playQ[j].getX() - play.getX() <= 27 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){

     //自己是起点被吃的是终点(从上到下)
     for (int k=play.getY()+57;k<playTake.getY();k+=57){
      //大于起点、小于终点的坐标就可以知道中间是否有棋子
      if (playQ[j].getY() < playTake.getY() && playQ[j].getY() > play.getY()){
        //计算起点和终点的棋子个数
        Count++;   
        break;       
      }
     }//for
        
     //自己是起点被吃的是终点(从下到上)
     for (int k=playTake.getY();k<play.getY();k+=57){
      //找起点和终点的棋子
      if (playQ[j].getY() < play.getY() && playQ[j].getY() > playTake.getY()){
        Count++; 
        break;
      }
     }//for
    }//if
       
    //找出在同一条竖线的所有棋子、并不包括自己
    else if (playQ[j].getY() - play.getY() >= -10 && playQ[j].getY() - play.getY() <= 10 && playQ[j].getName()!=play.getName() && playQ[j].isVisible()){
     //自己是起点被吃的是终点(从左到右)
     for (int k=play.getX()+50;k<playTake.getX();k+=57){
      //大于起点、小于终点的坐标就可以知道中间是否有棋子      
      if (playQ[j].getX() < playTake.getX() && playQ[j].getX() > play.getX()){
       Count++;   
       break; 
      }
     }//for
        
     //自己是起点被吃的是终点(从右到左)
     for (int k=playTake.getX();k<play.getX();k+=57){
      //找起点和终点的棋子
      if (playQ[j].getX() < play.getX() && playQ[j].getX() > playTake.getX()){
        Count++;
        break;
      }
     }//for
    }//if
   }//for
      
   //起点和终点之间要一个棋子是炮的规则、并不能吃自己的棋子
   if (Count == 1 && Chess == 0 && playTake.getName().charAt(1) != play.getName().charAt(1)){
    //当前记录添加到集合(用于悔棋)
    Var.add(String.valueOf(play.isVisible()));
    Var.add(String.valueOf(play.getX()));
    Var.add(String.valueOf(play.getY()));
    Var.add(String.valueOf(Man));
    
    //当前记录添加到集合(用于悔棋)
    Var.add(String.valueOf(playTake.isVisible()));
    Var.add(String.valueOf(playTake.getX()));         
    Var.add(String.valueOf(playTake.getY()));
    Var.add(String.valueOf(i));
    
    playTake.setVisible(false);
    play.setBounds(playTake.getX(),playTake.getY(),55,55);
   }
   
   //起点和终点之间没有棋子是车的规则、并不能吃自己的棋子   
   else if (Count ==0  && Chess == 1 && playTake.getName().charAt(1) != play.getName().charAt(1)){
    
    //当前记录添加到集合(用于悔棋)
    Var.add(String.valueOf(play.isVisible()));
    Var.add(String.valueOf(play.getX()));         
    Var.add(String.valueOf(play.getY()));
    Var.add(String.valueOf(Man));
    
    //当前记录添加到集合(用于悔棋)
    Var.add(String.valueOf(playTake.isVisible()));
    Var.add(String.valueOf(playTake.getX()));         
    Var.add(String.valueOf(playTake.getY()));
    Var.add(String.valueOf(i));
    
    playTake.setVisible(false);
    play.setBounds(playTake.getX(),playTake.getY(),55,55);
   }
   
  }//炮、车吃棋方法结束
  
  /**马移动规则*/
  public void horseRule(JLabel play,JLabel playQ[],MouseEvent me){
   //保存坐标和障碍
   int Ex=0,Ey=0,Move=0;   
   
   //上移、左边
   if (play.getX() - me.getX() >= 2 && play.getX() - me.getX() <= 57 && play.getY() - me.getY() >= 87 && play.getY() - me.getY() <= 141){
    //合法的Y坐标
    for (int i=56;i<=571;i+=57){
     //移动的Y坐标是否有指定坐标相近的
     if (i - me.getY() >= -27 && i - me.getY() <= 27){
      Ey = i;
      break;
     }
    }
    
    //合法的X坐标
    for (int i=24;i<=480;i+=57){
     //移动的X坐标是否有指定坐标相近的
     if (i - me.getX() >= -55 && i-me.getX() <= 0){
      Ex = i;
      break;
     }
    }
    
    //正前方是否有别的棋子
    for (int i=0;i<32;i++){
     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0  && play.getY() - playQ[i].getY() == 57 ){
      Move = 1;
      break;
     } 
    }
    
    //可以移动该棋子
    if (Move == 0){
     //当前记录添加到集合(用于悔棋)
     Var.add(String.valueOf(play.isVisible()));
     Var.add(String.valueOf(play.getX()));
     Var.add(String.valueOf(play.getY()));
     Var.add(String.valueOf(Man));
         
     play.setBounds(Ex,Ey,55,55);
    }
    
   }//if
   
   //左移、上边
   else if (play.getY() - me.getY() >= 27 && play.getY() - me.getY() <= 86 && play.getX() - me.getX() >= 70 && play.getX() - me.getX() <= 130){
    //Y
    for (int i=56;i<=571;i+=57){
     if (i - me.getY() >= -27 && i - me.getY() <= 27){
      Ey = i;
     }
    }
    
    //X
    for (int i=24;i<=480;i+=57){
     if (i - me.getX() >= -55 && i-me.getX() <= 0){
      Ex = i;
     }
    }
    
    //正左方是否有别的棋子
    for (int i=0;i<32;i++){
     if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && play.getX() - playQ[i].getX() == 57 ){
      Move = 1;
      break;
     }
    }
    
    if (Move == 0){
     //当前记录添加到集合(用于悔棋)
     Var.add(String.valueOf(play.isVisible()));
     Var.add(String.valueOf(play.getX()));
     Var.add(String.valueOf(play.getY()));
     Var.add(String.valueOf(Man));
     
     play.setBounds(Ex,Ey,55,55);
    }
   }//else
   
   //下移、右边
   else if (me.getY() - play.getY() >= 87 && me.getY() - play.getY() <= 141 && me.getX() - play.getX() <= 87 && me.getX() - play.getX() >= 2 ){ 
    //Y  
    for (int i=56;i<=571;i+=57){
     if (i - me.getY() >= -27 && i - me.getY() <= 27){
      Ey = i;
     }
    }
    
    //X
    for (int i=24;i<=480;i+=57){
     if (i - me.getX() >= -55 && i-me.getX() <= 0){
      Ex = i;
     }
    }
    
    //正下方是否有别的棋子
    for (int i=0;i<32;i++){
     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0  && playQ[i].getY() - play.getY() == 57 ){
      Move = 1;
      break;
     }
    }
    
    if (Move == 0){
     //当前记录添加到集合(用于悔棋)
     Var.add(String.valueOf(play.isVisible()));
     Var.add(String.valueOf(play.getX()));
     Var.add(String.valueOf(play.getY()));
     Var.add(String.valueOf(Man));
     
     play.setBounds(Ex,Ey,55,55);
    }
   }//else
   
   //上移、右边
   else if (play.getY() - me.getY() >= 87 && play.getY() - me.getY() <= 141 && me.getX() - play.getX() <= 87 && me.getX() - play.getX() >= 30 ){
    //合法的Y坐标
    for (int i=56;i<=571;i+=57){
     if (i - me.getY() >= -27 && i - me.getY() <= 27){
      Ey = i;
      break;
     }
    }
    
    //合法的X坐标
    for (int i=24;i<=480;i+=57){
     if (i - me.getX() >= -55 && i-me.getX() <= 0){
      Ex = i;
      break;
     }
    }
    
    //正前方是否有别的棋子
    for (int i=0;i<32;i++){
     System.out.println(i+"playQ[i].getX()="+playQ[i].getX());
     //System.out.println("play.getX()="+play.getX());
     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57 ){
      Move = 1;
      //System.out.println("play.getY()="+play.getY());
      //System.out.println("playQ[i].getY()="+playQ[i].getY());
      break;
     }
    }
    
    //可以移动该棋子
    if (Move == 0){
     //当前记录添加到集合(用于悔棋)
     Var.add(String.valueOf(play.isVisible()));
     Var.add(String.valueOf(play.getX())); 
     Var.add(String.valueOf(play.getY()));
     Var.add(String.valueOf(Man));
     
     play.setBounds(Ex,Ey,55,55);
    }
   }//else
   
   //下移、左边
   else if (me.getY() - play.getY() >= 87 && me.getY() - play.getY() <= 141 && play.getX() - me.getX() <= 87 && play.getX() - me.getX() >= 10 ){
    //合法的Y坐标
    for (int i=56;i<=571;i+=57){
     if (i - me.getY() >= -27 && i - me.getY() <= 27){
      Ey = i;
      break;
     }
    }
    
    //合法的X坐标
    for (int i=24;i<=480;i+=57){
     if (i - me.getX() >= -55 && i-me.getX() <= 0){
      Ex = i;
      break;
     }
    }
    
    //正下方是否有别的棋子
    for (int i=0;i<32;i++){
     if (playQ[i].isVisible() && play.getX() - playQ[i].getX() == 0 && play.getY() - playQ[i].getY() == 57 ){
      Move = 1;
      break;
     }
    }
    
    //可以移动该棋子
    if (Move == 0){
     //当前记录添加到集合(用于悔棋)
     Var.add(String.valueOf(play.isVisible()));
     Var.add(String.valueOf(play.getX()));
     Var.add(String.valueOf(play.getY()));
     Var.add(String.valueOf(Man));
     
     play.setBounds(Ex,Ey,55,55);
    }
   }//else
   
   //右移、上边
   else if (play.getY() - me.getY() >= 30 && play.getY() - me.getY() <= 87 && me.getX() - play.getX() <= 141 && me.getX() - play.getX() >= 87 ){
    //Y  
    for (int i=56;i<=571;i+=57){
     if (i - me.getY() >= -27 && i - me.getY() <= 27){
      Ey = i;
     }
    }
    
    //X
    for (int i=24;i<=480;i+=57){
     if (i - me.getX() >= -55 && i-me.getX() <= 0){
      Ex = i;
     }
    }
    
    //正右方是否有别的棋子
    for (int i=0;i<32;i++){
     if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && playQ[i].getX() - play.getX() == 57 ){
      Move = 1;
      break;
     }
    }
    
    if (Move == 0){
     //当前记录添加到集合(用于悔棋)
     Var.add(String.valueOf(play.isVisible()));
     Var.add(String.valueOf(play.getX()));
     Var.add(String.valueOf(play.getY()));
     Var.add(String.valueOf(Man));
     
     play.setBounds(Ex,Ey,55,55);
    }
   }//else
   
   //右移、下边
   else if (me.getY() - play.getY() >= 30 && me.getY() - play.getY() <= 87 && me.getX() - play.getX() <= 141 && me.getX() - play.getX() >= 87 ){
    //Y  
    for (int i=56;i<=571;i+=57){
     if (i - me.getY() >= -27 && i - me.getY() <= 27){
      Ey = i;
     }
    }
    
    //X
    for (int i=24;i<=480;i+=57){
     if (i - me.getX() >= -55 && i-me.getX() <= 0){
      Ex = i;
     }
    }
    
    //正右方是否有别的棋子
    for (int i=0;i<32;i++){
     if (playQ[i].isVisible() && play.getY() - playQ[i].getY() == 0 && playQ[i].getX() - play.getX() == 57 ){
      Move = 1;
      break;
     }
    }
    
    if (Move == 0){
     //当前记录添加到集合(用于悔棋)
     Var.add(String.valueOf(play.isVisible()));
     Var.add(String.valueOf(play.getX()));
     Var.add(String.valueOf(play.getY()));
     Var.add(String.valueOf(Man));
     
     play.setBounds(Ex,Ey,55,55);
    }
   }//else
   
   //左移、下边
   else if (me.getY() - play.getY() >= 30 && me.getY() - play.getY() <= 87 && play.getX() - me.getX() <= 141 && play.getX() - me.getX() >= 87 ){
    //Y  
    for (int i=56;i<=571;i+=57){
     if (i - me.getY() >= -27 && i - me.getY() <= 27){
      Ey = i;
     }
    }
    
    //X
    for (int i=24;i<=480;i+=57){
     if (i - me.getX() >= -55 && i-me.getX() <= 0){

上一页  [1] [2] [3] 下一页

java中国象棋 第2页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。