コード例 #1
0
 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);
 }
コード例 #2
0
        //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);
        }