AccessibleSquares.java~1~
上传用户:liming9091
上传日期:2014-10-27
资源大小:3376k
文件大小:3k
源码类别:

Java编程

开发平台:

Java

  1. package gao;
  2. class AccessibleSquares {
  3.    private static int horizontal[] = {2,1,-1,-2,-2,-1,1,2};
  4.    private static int vertical  [] = {-1,-2,-2,-1,1,2,2,1};
  5.    private int xpos[] ;
  6.    private int ypos[] ;
  7.    private int accessibility [];
  8.    private int ownxpos ,ownypos ;
  9.    private int ownAccessibility ;
  10.    private int arrayPos ;
  11.    private int countAccessibility;
  12.    public AccessibleSquares(int x , int y ){
  13.       int testXPos;
  14.       int testYPos;
  15.       xpos = new int [ 8 ];
  16.       ypos = new int [ 8 ];
  17.       accessibility = new int [ 8 ];
  18.       arrayPos = 0 ;
  19.       ownxpos = x ;
  20.       ownypos = y ;
  21.       ownAccessibility = KnightsTour.access[ x ][ y ];
  22.       for (int i = 0 ; i < horizontal.length ; i++ ){
  23.          testXPos = x + horizontal[ i ];
  24.          testYPos = y + vertical  [ i ];
  25.          if ( (testXPos >= 0 ) & ( testXPos < 8 ) &
  26.               (testYPos >= 0 ) & ( testYPos < 8 ) ) {
  27.             xpos [ arrayPos ] = testXPos ;
  28.             ypos [ arrayPos ] = testYPos ;
  29.             accessibility [ arrayPos ] = KnightsTour.access [testXPos][testYPos];
  30.             //because  accessibility [ arrayPos ] = 0 indicating the square has been occupied
  31.             if (accessibility [ arrayPos ] > 0 )
  32.                arrayPos ++ ;
  33.          }//end of if
  34.       }// end of for
  35.       countAccessibility = arrayPos ;
  36.       if (countAccessibility > 0 )
  37.          {sortAll();}
  38.       arrayPos = -1 ;
  39.    }// end of constructor
  40.    public boolean hasMoreAccessible(){
  41.       // arrayPos + 1 point to the next accessible
  42.       if ( (arrayPos + 1 ) < countAccessibility ){
  43.          return true;
  44.       }else {
  45.          return false;
  46.       }
  47.    }//end of the hasMoreAccessible()
  48.    public AccessibleSquares nextAccessible(){
  49.       arrayPos ++ ;
  50.       return this;
  51.    }
  52.    public AccessibleSquares accessibleAt( int pos){
  53.       if ((pos >= 0) & (pos < countAccessibility ))
  54.       arrayPos = pos ;
  55.       return this;
  56.    }
  57.    public int getXpos(){
  58.       return xpos[ arrayPos ];
  59.    }
  60.    public int getYpos(){
  61.       return ypos[ arrayPos ];
  62.    }
  63.    public int getAccessibility(){
  64.       return accessibility[ arrayPos ];
  65.    }
  66.    public int getTotalAccessible(){
  67.       return countAccessibility;
  68.    }
  69.    //bubble sorting
  70.    private void sortAll (){
  71.       for ( int begin = 0 ; begin < countAccessibility - 1 ; begin ++ ){
  72.          for ( int i = begin + 1; i < countAccessibility ; i ++ ){
  73.             if ( accessibility [ begin ] > accessibility [ i ] ){
  74.                swapAll( begin, i );
  75.             }//end of if
  76.          }// end of inner for
  77.       }// end of outer for
  78.    }// end of sortAll
  79.    private void swapAll ( int i , int j ){
  80.       int temp ;
  81.       temp = xpos [ i ];
  82.       xpos [ i ] = xpos [ j ];
  83.       xpos [ j ] = temp;
  84.       temp = ypos [ i ];
  85.       ypos [ i ] = ypos [ j ];
  86.       ypos [ j ] = temp;
  87.       temp = accessibility [ i ];
  88.       accessibility [ i ] = accessibility [ j ];
  89.       accessibility [ j ] = temp;
  90.    }
  91.    public void domoving(){
  92.       for ( int i = 0 ; i < countAccessibility ; i ++ ){
  93.          KnightsTour.access[ xpos [i] ][ ypos[i] ] -- ;
  94.       }
  95.        KnightsTour.access[ ownxpos ][ ownypos ] = 0 ;
  96.    }
  97.    public void undomoving(){
  98.       for ( int i = 0 ; i < countAccessibility ; i ++ ){
  99.          KnightsTour.access[ xpos [i] ][ ypos[i] ] ++ ;
  100.       }
  101.       KnightsTour.access[ ownxpos ][ ownypos ] = ownAccessibility ;
  102.    }
  103. }