首页 > 编程知识 正文

算法求五子棋盘是否有获胜方式,五子棋输赢判断算法

时间:2023-05-03 08:37:08 阅读:268788 作者:1963

<?php 
//五子棋求是否有赢的一方,在一个30的棋盘内下棋。自觉的烤鸡为1,黑子为0.自觉的烤鸡获胜返回1,黑子获胜返回-1.没有获胜返回0.

    //$xindex 为某个旗子的x位置,yIndex为y的位置
function gobng_win($xIndex,$yIndex){
    $max=0;
    $X = $xIndex;
    $Y = $yIndex;
    $dir = [   //将一个子附近所有相邻的位置都定义出来
    [[-1,0],[1,0]],//左,右
    [[0,-1],[0,1]],//下,上
    [[1,1],[-1,-1]],//右上,左下
    [[1,-1],[-1,1]]//右下,左上
    ];
    
    for($i=0;$<4;$i++){
        $count = 1;
        for($j=0;$j<2;+j++){
            $flag=true;//定义当在循环中未达到五个子一起就改变成false 抛出,并停止循环
             /**
                 while语句中为一直向某一个方向遍历
                 有相同颜色的棋子的时候,Count++
                 否则置flag为false,结束该该方向的遍历
                 **/
            while($flag){
                $X = $X+$dir[$i][$j][0];
                $Y = $Y +$dir[$i][$j][1];
                
                if($X>=0&&$X<=30&&$Y>=0&&$Y<=30){
                    if($a[$X][$Y]==$a[$xIndex][$yIndex]){
                            $count++;
                    }else{
                        $flag = false;
                    }
                }else{
                        $flag = false;
                    }
                }
                $X = $xIndex;
                $Y = $yIndex;
            }
            if($count>=5){
                $max = 1;
                break;
            }else{
                $max = 0;
            }
            if($max==1){
                if($a[$xIndex][$yIndex]==1){
                    return 1;//自觉的烤鸡获胜
                }else{
                    return -1;//黑子获胜
                }
            }else{
                return 0;//没有获胜方
            }  
        }
    }   
}

?>
 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。