算法:求五子棋盘是否有获胜方

<?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;//没有获胜方
            }  
        }
    }   
}

?>
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值