対戦ゲームを作る。 その4


概要

対戦ゲームを作る。
そこに、石が置けるか評価する関数の実装。

考え方

前後左右、9方向に、違う石があって、同じ石があるのか、探索する。

サンプルコード

    function check(put, d) {
        var x = put % 8; 
        var y = Math.floor(put / 8);
        var res = 0;
        if (x == 0 && (d == -9 || d == -1 || d ==  7)) res = 1;
        if (x == 7 && (d == -7 || d ==  1 || d ==  9)) res = 1;
        if (y == 0 && (d == -9 || d == -8 || d == -7)) res = 1;
        if (y == 7 && (d ==  7 || d ==  8 || d ==  9)) res = 1;
        return res;
    }
    function oku(put, iro, ban) {
        var res = 0;
        var turn = 0;
        if (iro == 0) turn = 2;
        var dir = new Array(-9, -8, -7, -1, 1, 7, 8, 9);
        var tugi;
        var i;
        var count;
        if (ban[put] == 1)
        {
            for (i = 0; i < 8; i++)
            {
                count = 0;
                tugi = put;
                do
                {
                    if (check(tugi, dir[i]) == 1) break;
                    count++;
                    tugi += dir[i];
                } 
                while (ban[tugi] == turn);
                if ((count > 1) && (ban[tugi] == iro))
                {
                    res = -1;
                    tugi = put;
                    do
                    {
                        ban[tugi] = iro;
                        tugi += dir[i];
                    }
                    while (ban[tugi] == turn);
                }
            }
        }
        return res;
    }

以上。