浅析五子棋的实现——应用程序算法

应用程序的壳(界面、事件驱动)与算法的关系

 

两者是骨骼和肉体的关系,当应用程序的壳创建好了,就需要把相应的算法写入到事件驱动当中去,这样才能实现程序应有的功能。

 

Exp:浅析五子棋

 

1、五子棋的算法包含什么?

      画棋子的算法   判断输赢的算法  人机对战算法

 

2、每个算法怎么用计算机语言实现?

     //画棋子的算法

 

 if(e.getX()>=50 && e.getX()<=770 && e.getY()>=50 && e.getY()<=770){
   //定义单击棋盘所在的点缓冲区大小为20
        
   //定义单击在棋盘上所在的行列数为x,y
   x=(e.getX()+20)/50;
   y=(e.getY()+20)/50;
   //画棋子
   
   //利用白棋:0 黑棋:1
   //判断不为下棋位置不为空时才下棋,否则在已下棋位置重下报错
   if(a[x][y]==null){
       
   if(count==0){
    //画透明的白棋
    g.drawOval(x*50-10, y*50-10, 20, 20);
   
    //建立每次下的白棋子对象
    qiZi m=new qiZi();
    m.type=0;
    m.x=x*50-10;
    m.y=y*50-10;
    //在行列出赋值
    a[x][y]=m;  
    count=1;   
   }     
   else
   { //画黑颜色的黑棋
    g.fillOval(x*50-10, y*50-10, 20,20);
  //  System.out.println("这是黑子"+count);
    //建立每次下的白棋子对象
    count=0;
    qiZi o=new qiZi();
    o.type=1;
    o.x=x*50-10;
    o.y=y*50-10;
    a[x][y]=o;
    
   }
   }
   else{
    //如果在同一点重新下棋报错
    javax.swing.JFrame jf=new javax.swing.JFrame("错误提示");
    jf.setSize(300,300);
    javax.swing.JLabel jl=new javax.swing.JLabel("不能在以下过棋的位置重新下棋");
    jf.add(jl);
    jf.setVisible(true);
    
   }
   
   }

 

 

 

 

     //判断输赢
  for(int i=0;i<a.length;i++){
   for(int j=0;j<a.length;j++){
    //当找到的第一个有子位置的白棋时
    if(a[i][j]!=null && a[i][j].type==0){
    // System.out.println(a[i][j].x+"和"+a[i][j].y);
     //判断搜寻到的白字的周围八个方向为白棋且字数为5点情况
     //开始计数
     
     //上下方计数
     int record1=1;
     //左右方计数
     int record2=1;
     //45度角方向计数
     int record3=1;
     //135度方向计数
     int record4=1;
     //利用for循环不断的判断
     for(int w=1;w<=4;w++){
      //45度方向的判断
      if(i+w<17 && j+w<17){
       
      
      if(a[i+w][j+w]!=null && a[i+w][j+w].type==0){
       record3++;
       //System.out.print(record);
       if(record3==5){
        System.out.print("白棋赢了");
       }
      }
      
      }
      //135度方向判定
      if(i-w>=0 && j+w<17){
       
      
      if(a[i-w][j+w]!=null && a[i-w][j+w].type==0){
       record4++;
       //System.out.print(record);
       if(record4==5){
        System.out.print("白棋赢了");
       }
      }
      
      }
      //判断上方情况
      if(j+w<17){
       
      
      if(a[i][j+w]!=null && a[i][j+w].type==0){
       record1++;
       //System.out.print(record);
       if(record1==5){
        System.out.print("白棋赢了");
       }
      }
      
      }
      
      
      
      //用于判断右方的情况
      if(i+w<17){
       
      
      if(a[i+w][j]!=null && a[i+w][j].type==0){
       record2++;
       //System.out.print(record);
       if(record2==5){
        System.out.print("白棋赢了");
       }
      }
 
      
      }
      
     }
    }
    
    
   // 黑气
    
    
    //当找到的第一个有子位置的黑棋时
    if(a[i][j]!=null && a[i][j].type==1){
    // System.out.println(a[i][j].x+"和"+a[i][j].y);
     //判断搜寻到的白字的周围八个方向为白棋且字数为5点情况
     //开始计数
     
     //上下方计数
     int record1=1;
     //左右方计数
     int record2=1;
     //45度角方向计数
     int record3=1;
     //135度方向计数
     int record4=1;
     //利用for循环不断的判断
     for(int w=1;w<=4;w++){
      //45度方向的判断
      if(i+w<17 && j+w<17){
       
      
      if(a[i+w][j+w]!=null && a[i+w][j+w].type==1){
       record3++;
       //System.out.print(record);
       if(record3==5){
        System.out.print("黑棋赢了");
       }
      }
      
      }
      //135度方向判定
      if(i-w>=0 && j+w<17){
       
      
      if(a[i-w][j+w]!=null && a[i-w][j+w].type==1){
       record4++;
       //System.out.print(record);
       if(record4==5){
        System.out.print("黑棋赢了");
       }
      }
      }
      //判断上方情况
      if(j+w<17)
      {
       
      
      if(a[i][j+w]!=null && a[i][j+w].type==1){
       record1++;
       //System.out.print(record);
       if(record1==5){
        System.out.print("黑棋赢了");
       }
      }
      
      
      }
      
      
      //用于判断右方的情况
      if(i+w<17){
       
      
      if(a[i+w][j]!=null && a[i+w][j].type==1){
       record2++;
       //System.out.print(record);
       if(record2==5){
        System.out.print("黑棋赢了");
       }
      }
      }
                
     }
    }
    }
   
  }
  
//判断输赢结束 

 

3、将相应的代码发到哪里?

 

        画棋子写到鼠标监听器中,利用计数器决定黑白棋

 

 

       判断的输赢的也是写在这里

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章