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; }
/* 石の配置 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; }