/// <summary> /// Метод определяет следующий ход в игре для ПК /// </summary> /// <param name="value">Массив обьектов текущего состояния игрового поля</param> /// <param name="nextStep">Текущий игрок Х или О</param> /// <returns></returns> public XOObject ПолучитьЯчейкуДляСледующегоХода(XOObject[] value, СостояниеХода nextStep) { XOObject result = null; result = ПроверитьВозможностьСвоегоВыйгрыша(value, nextStep); if (result == null) { result = НедопуститьВыйгрышСоперника(value, nextStep); } if (result == null) { result = ВыбратьОптимальныйХод(value); } return(result); // return ВыбратьОптимальныйХод(value); }
/// <summary> /// Метод оределяет возможно ли на данном этапе завершить игру /// </summary> /// <param name="value">Массив обьектов текущего состояния игрового поля</param> /// <param name="nextStep">Текущий игрок Х или О</param> /// <returns></returns> private XOObject ПроверитьВозможностьСвоегоВыйгрыша(object[] value, СостояниеХода nextStep) { XOObject cell_0 = value[0] as XOObject; XOObject cell_1 = value[1] as XOObject; XOObject cell_2 = value[2] as XOObject; XOObject cell_3 = value[3] as XOObject; XOObject cell_4 = value[4] as XOObject; XOObject cell_5 = value[5] as XOObject; XOObject cell_6 = value[6] as XOObject; XOObject cell_7 = value[7] as XOObject; XOObject cell_8 = value[8] as XOObject; #region 1 if ((cell_0.Ход == nextStep) && (cell_2.Ход == nextStep) && (cell_1.Ход == СостояниеХода.NULL)) { return(cell_1); } if ((cell_3.Ход == nextStep) && (cell_5.Ход == nextStep) && (cell_4.Ход == СостояниеХода.NULL)) { return(cell_4); } if ((cell_6.Ход == nextStep) && (cell_8.Ход == nextStep) && (cell_7.Ход == СостояниеХода.NULL)) { return(cell_7); } if ((cell_0.Ход == nextStep) && (cell_6.Ход == nextStep) && (cell_3.Ход == СостояниеХода.NULL)) { return(cell_3); } if ((cell_1.Ход == nextStep) && (cell_7.Ход == nextStep) && (cell_4.Ход == СостояниеХода.NULL)) { return(cell_4); } if ((cell_2.Ход == nextStep) && (cell_8.Ход == nextStep) && (cell_5.Ход == СостояниеХода.NULL)) { return(cell_5); } if ((cell_0.Ход == nextStep) && (cell_8.Ход == nextStep) && (cell_4.Ход == СостояниеХода.NULL)) { return(cell_4); } if ((cell_2.Ход == nextStep) && (cell_6.Ход == nextStep) && (cell_4.Ход == СостояниеХода.NULL)) { return(cell_4); } #endregion #region 2 if ((cell_1.Ход == nextStep) && (cell_2.Ход == nextStep) && (cell_0.Ход == СостояниеХода.NULL)) { return(cell_0); } if ((cell_4.Ход == nextStep) && (cell_5.Ход == nextStep) && (cell_3.Ход == СостояниеХода.NULL)) { return(cell_3); } if ((cell_7.Ход == nextStep) && (cell_8.Ход == nextStep) && (cell_6.Ход == СостояниеХода.NULL)) { return(cell_6); } if ((cell_3.Ход == nextStep) && (cell_6.Ход == nextStep) && (cell_0.Ход == СостояниеХода.NULL)) { return(cell_0); } if ((cell_4.Ход == nextStep) && (cell_7.Ход == nextStep) && (cell_1.Ход == СостояниеХода.NULL)) { return(cell_1); } if ((cell_5.Ход == nextStep) && (cell_8.Ход == nextStep) && (cell_2.Ход == СостояниеХода.NULL)) { return(cell_2); } if ((cell_4.Ход == nextStep) && (cell_8.Ход == nextStep) && (cell_0.Ход == СостояниеХода.NULL)) { return(cell_0); } if ((cell_4.Ход == nextStep) && (cell_6.Ход == nextStep) && (cell_6.Ход == СостояниеХода.NULL)) { return(cell_2); } #endregion #region 3 if ((cell_0.Ход == nextStep) && (cell_1.Ход == nextStep) && (cell_2.Ход == СостояниеХода.NULL)) { return(cell_2); } if ((cell_3.Ход == nextStep) && (cell_4.Ход == nextStep) && (cell_5.Ход == СостояниеХода.NULL)) { return(cell_5); } if ((cell_6.Ход == nextStep) && (cell_7.Ход == nextStep) && (cell_8.Ход == СостояниеХода.NULL)) { return(cell_8); } if ((cell_0.Ход == nextStep) && (cell_3.Ход == nextStep) && (cell_6.Ход == СостояниеХода.NULL)) { return(cell_6); } if ((cell_1.Ход == nextStep) && (cell_4.Ход == nextStep) && (cell_7.Ход == СостояниеХода.NULL)) { return(cell_7); } if ((cell_2.Ход == nextStep) && (cell_5.Ход == nextStep) && (cell_8.Ход == СостояниеХода.NULL)) { return(cell_8); } if ((cell_0.Ход == nextStep) && (cell_4.Ход == nextStep) && (cell_8.Ход == СостояниеХода.NULL)) { return(cell_8); } if ((cell_2.Ход == nextStep) && (cell_4.Ход == nextStep) && (cell_6.Ход == СостояниеХода.NULL)) { return(cell_6); } #endregion return(null); }