private int[] rev(AGI_Stones agiSt)
 {
     int[] ret = new int[agiSt.GetXSize() * agiSt.GetYSize()];
     for (int i = 0; i < agiSt.GetYSize(); i++)
     {
         int[] array = new int[agiSt.GetXSize()];
         for (int j = 0; j < agiSt.GetXSize(); j++)
         {
             array[j] = agiSt.GetNum(i * agiSt.GetXSize() + j);
         }
         Array.Reverse(array);
         for (int j = 0; j < agiSt.GetXSize(); j++)
         {
             ret[i * agiSt.GetXSize() + j] = array[j];
         }
     }
     return ret;
 }
Exemple #2
0
        /* 石の配置 NG:null */
        private AGI_CalcFields placement(AGI_CalcFields agicOrgF, int stoneId, int kinds, int placeIdx, bool connectCheck)
        {
            AGI_CalcFields retAgicF = new AGI_CalcFields(agicOrgF, commonMap);

            AGI_Stones setStone = new AGI_Stones(agi.GetAgiStoneList().GetAgiStoneKindsList(stoneId).GetAGIStones(kinds));
            /* 石の加算処理 */
            for (int i = 0; i < setStone.GetSize(); i++)
            {
                int idx = agiST2agiF(retAgicF.GetMaxX(), retAgicF.GetMaxY(), setStone.GetXSize(), setStone.GetYSize(), placeIdx, i);
                retAgicF.SetAgiCalcNum
                    (idx,
                    retAgicF.GetAgiCalcFieldNum(idx) + setStone.GetNum(i));
            }
            /* 判定 */
            bool connectFlg = false;    /* 自陣と接続するか判定 */

            for (int i = 0; i < retAgicF.GetAgiCalcFieldsSize(); i++)
            {
                int tmp = retAgicF.GetAgiCalcFieldNum(i);
                if ((tmp > 0) && ((tmp % 2) == 0))
                {
                    /* 正の偶数値があった場合、自・壁・障のいずれかと重なる */
                    return null;
                }
                if ((connectFlg == false) && (tmp == -6)) /* 近傍(-7) + 自陣(1) */
                {
                    connectFlg = true;
                }
            }

            if ((connectCheck == true) && (connectFlg != true))
            {
                return null;
            }

            /* 加算前(石設置済み)に戻す */
            retAgicF.GetReturnCalcFld();

            return retAgicF;
        }
        private int[] r90(AGI_Stones agiSt)
        {
            int[] ret = new int[agiSt.GetXSize() * agiSt.GetYSize()];

            for (int i = 0; i < agiSt.GetXSize(); i++)
            {
                for (int j = 0; j < agiSt.GetYSize(); j++)
                {
                    ret[((agiSt.GetYSize() - 1) - j) + i * agiSt.GetYSize()] = agiSt.GetNum(j * agiSt.GetXSize() + i);
                }
            }

            return ret;
        }