五子棋

Victor_Amy 发布于 2012/03/16 17:42
阅读 231
收藏 0

public class FiveChessGame {
  static String[][] chess = new String[16][16];
  static{
   for(int i=0;i<chess.length;i++){
    for(int j=0;j<chess[i].length;j++){
     chess[i][j]="*";
    }
   }
  }
 
  //显示盘面
  static void print(){  
   //显示第一行数字和字母
      System.out.print(" ");  
      for(int i=0;i<16;i++){ 
       //toHexString()  以十六进制的无符号整数形式返回一个整数参数的字符串表示形式
         System.out.print(" "+Integer.toHexString(i)+"");
      }  
         System.out.println(); 
         //显示第一列数字和字母
      for(int i=0;i<chess.length;i++){   
         System.out.print(Integer.toHexString(i)+" "); 
         //显示所以的*
         for(int j=0;j<chess[i].length;j++){
        System.out.print(chess[i][j]+" ");   
         }   
        System.out.println(" ");  
      }  
      System.out.println();
  }
 
 
  public boolean play(int i,int j,String point){
  if("*".equals(chess[i][j])==false){//判断是否有子 
   System.out.println("已有棋,请重新输入!");
      return false;  
         }else{  
             chess[i][j]=point;
      return true;  
         } 
    } 

    public boolean a(int i,int j){  //判断横向是否5子相等  
        int count=1;  
        int k=j-1;  
        while(k>=0&&chess[i][k].equals(chess[i][j])==true){   //判断点(i,j)向左是否有相同的点并且对累计器操作
    count++;   
           k--;
  }  
         k=j+1;
  while(k<=15&&chess[i][k].equals(chess[i][j])==true){   //判断点(i,j)向右是否有相同的点并且对累计器操作   
            count++;   
            k++;  
         }  
        if(count>=5){
    return true;  
        }
    return false;
   }  

    public boolean b(int i,int j){      //判断竖向是否5子相等
        int count=1;  
        int k=i-1;  
        while(k>=0&&chess[k][j].equals(chess[i][j])==true){   //判断点(i,j)向上是否有相同的点并且对累计器操作
    count++;   
           k--;  
        }  
        k=j+1;  
        while(k<=15&&chess[k][j].equals(chess[i][j])==true){  //判断点(i,j)向下是否有相同的点并且对累计器操作
    count++;   
           k++;
        }  
        if(count>=5){   
           return true;  
        }  
           return false;
   }  

    public boolean c(int i,int j){     //判断斜杠是否5子相等  
        int count=1;  
        int k=i-1;  
        int l=j-1;  
        while((k>=0&&l>=0)&&chess[i][k].equals(chess[i][j])==true){      //判断斜杠上点(i,j)向斜上是否有相同的点并且对累计器操作   
             count++;   
             k--;   
             l--;  
        }  
        k=i+1; 
        l=j+1;  
        while((k<=15&&l<=15)&&chess[i][k].equals(chess[i][j])==true){    //判断斜杠上点(i,j)向斜下是否有相同的点并且对累计器操作   
             count++;   
             k++;  
             l++;  
        }  
       if(count>=5){  
     return true;  
       }  
           return false;
   }  

   public boolean d(int i,int j){    //判断反斜杠是否5子相等  
       int count=1;  
       int k=j-1;  
       int l=j+1;  
       while((k>=0&&l<=15)&&chess[i][k].equals(chess[i][j])==true){     //判断反斜杠上点(i,j)向斜上是否有相同的点并且对累计器操作   
          count++;   
          k--;   
          l++; 
       }  
       k=j+1;
       l=j-1;  
       while((k<=15&&l>=0)&&chess[i][k].equals(chess[i][j])==true){     //判断反斜杠上点(i,j)向斜下是否有相同的点并且对累计器操作   
          count++;   
          k++;   
          l--;  
       }  
      if(count>=5){
  return true;  
      }
      return false;
   }
}

 

 

运行部分

public class Gobang {
  public static void main(String[] args){
   Scanner sc = new Scanner(System.in);
     FiveChessGame fcg = new FiveChessGame();
     fcg.print();
     boolean isBlack=true;  
     do{   
         System.out.print("请"+(isBlack?"黑方":"白方")+"下棋,输入要下棋的位置:");    
         String p=sc.next();   
         char c1=p.charAt(0);   
         char c2=p.charAt(1);   
         String m=c1+"";   
         String n=c2+"";   
         int i=Integer.parseInt(m,16);  //parseInt(String x, int radix)使用第二个参数指定的基数,将字符串参数解析为有符号的整数。 
         int j=Integer.parseInt(n,16);   
         String point=isBlack?"X":"O";  
         if(fcg.play(i, j, point)==false){
       continue;
         }   
            fcg.print();     
         if(fcg.a(i, j)||fcg.b(i, j)||fcg.c(i, j)||fcg.d(i, j)){                
         System.out.println((isBlack?"黑方X":"白方O")+"胜利!");
         break;   
         }   
            isBlack=!isBlack;  
    }while(true);
  }
}

加载中
返回顶部
顶部