private void MoveChecker(Checker checker, int x, int y)//перемещение шашки и контроль за становлением дамки { board[checker.x, checker.y] = new LogicCell(); notifyDeleteCheckerOrWay(checker.x, checker.y); board[x, y] = checker; checker.x = x; checker.y = y; checker.SetLight(false); if (y == ((int)checker.GetColor()) * 7) //контроль за становлением дамки { checker.SetDamka(); } notifySetChecker(checker); }
//don't look private bool SearchIntermRecursion(Moves m, int c) { for (int i = 0; i < 4; i++) { for (int k = 0; k < eaten.Count; k++) { if ((m.way[i].Count != 0) && (m.GetEatenChecker(m.way[i][0].Item1, m.way[i][0].Item2) == eaten[k]))//нашли шашку, которую можно есть { m.AddPreDelete(m.way[i][0].Item1, m.way[i][0].Item2); int x_ = selectedChecker.x; int y_ = selectedChecker.y;//сохранили координаты; bool f = false; for (int j = 0; j < m.way[i].Count; j++)//перебираем все ходы в том направлении { selectedChecker.x = m.way[i][j].Item1; selectedChecker.y = m.way[i][j].Item2;//двигаем шашку Moves m1 = new Moves(); m1.selectedChecker = selectedChecker; if (selectedChecker.y == ((int)selectedChecker.GetColor()) * 7) //контроль за становлением дамки { selectedChecker.SetDamka(); } selectedChecker.SearchEat(m1); if (SearchIntermRecursion(m1, c + 1)) { f = true; interm.Insert(0, m.way[i][j]);//надо вставлять в обратном порядке break; } } selectedChecker.x = x_;//подвинули обратно selectedChecker.y = y_; m.CancelLastPreDelete(); if (c + 1 == eaten.Count) { return(true); //значит, на следующем шаге оно просто не нашло шашек, которые надо есть - конец } if (f) { return(true); } } } } return(false); }