Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2013, 08:55   #1
Яков_Улан-Удэ
 
Регистрация: 18.12.2010
Сообщений: 9
По умолчанию Крестики-нолики. Функция рекурсии.

Уважаемые программисты, помогите разобраться с функцией оценки хода в игре крестики нолики. Вроде все верно, но при работе приложения комп играет очень слабо. Хотя это функция должна перебрать все дерево игры. Может вообще там рекурсия не запускается или что еще? В обще запутался помогите, уперся головой в стену.
Вот она:

Код:
// метод оценки возможного хода
        int Appraisal(bool ShapeType)
        {
            int max=-1;
            // определяем тип фигуры противника
            bool oppShapeType = !ShapeType;
            bool findmove = false; // свободных клеток нет
            // проверяем текущую позицию на проигрыш
            if (GameEnd(Matrix, oppShapeType))
                return -1;

            // генерируем и выбираем лучший ход
            for(int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                {
                    if (Matrix[i, j] == 0)
                    {
                        if (ShapeType)
                            Matrix[i, j] = 2;
                        else Matrix[i, j] = 1;

                        findmove = true;
                        // вот она - рекурсия, оцениваем текущую позицию
                        int tmp = -(Appraisal(oppShapeType));
                        if (tmp > max) // выбираем лучшую оценку варианта (ее и будем возвращать)
                            max = tmp;

                        // восстанавливаем позицию
                        Matrix[i, j] = 0;
                    }
                }
            if (findmove == false)
                return 0;
            else
                return max;
        }


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.




Полный исходник прилагается.
Вложения
Тип файла: zip 3x3.zip (79.4 Кб, 40 просмотров)

Последний раз редактировалось Serge_Bliznykov; 15.06.2013 в 11:34.
Яков_Улан-Удэ вне форума Ответить с цитированием
Старый 16.06.2013, 16:35   #2
Яков_Улан-Удэ
 
Регистрация: 18.12.2010
Сообщений: 9
По умолчанию

Все же жаль, что эта тема - тема логических игр здесь широко не обсуждается. Это ведь и есть истинное программирование, использование известных алгоритмов на практике, а не та зубрежка новых технологий, которая сейчас процветает. А крестики-нолики хотя и кажется с виду простенькой, да не тут-то было сами попробуйте.
Яков_Улан-Удэ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
крестики-нолики (с++) Аnni Помощь студентам 0 13.12.2012 19:28
'Крестики нолики' на Си Олли Помощь студентам 0 13.06.2012 17:51
крестики нолики aesoem Общие вопросы Delphi 11 12.06.2011 11:32
КРЕСТИКИ-НОЛИКИ((( magadan Паскаль, Turbo Pascal, PascalABC.NET 8 02.05.2009 22:16
Крестики нолики Gorbunov Общие вопросы C/C++ 5 22.01.2009 16:04