算法:求五子棋盤是否有獲勝方

<?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;//沒有獲勝方
            }  
        }
    }   
}

?>
 

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