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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2014, 17:11   #1
Foxpronet
Пользователь
 
Регистрация: 11.08.2011
Сообщений: 67
По умолчанию Алгоритм поиска лучшего хода в шахматах

Взялся написать шахматы. Виз. оболочка, сеть, генератор верных ходов вроде готовы.. Уперся в то, что не могу сообразить как мне вытащить этот самый лучший ХОД. Использовал рекурсивный алгоритм alpha-beta. Сам перебор вроде работает корректно, но не могу вытянуть инфу из массива сделанных ходов. Понятно, что ее нужно вытаскивать из корня, то есть самого первого рекурсивного вызова по возвращаемому результату всех дочерних, но не получается, ступор видимо какой-то.. )
Вот сам код:


Код:
function search(depth:integer; is_black:boolean; alfa,beta:integer):integer;
var temp:integer; tmp:tfield; idx:tmoves;
  cur_i:integer;
{
Tmvs - назначенный глоб. тип для записи след. вида:
TMOVES=record
  x,y  :byte;  // клетка куда фигура способна переместиться \ нанести удар
  ftype:byte;  // флаг для обозначения того, что клетка, куда фигура пошла не была пуста, т.е. тип побитой вражеской фигуры
  ox,oy:byte;  // координаты для стартовой клетки нашей фигуры, т.е - начальные x и y
end;

TFIELD - глоб. запись для 64-значного массива [1..8,1..8], отвечает за машинные ходы
TFIELD=record
  //EMP - если пустая клетка, COL_BLACK - если черная
  emp,col_black:
     boolean;
  // тип фигуры на ней 1-6
  ftype:byte;
  //расположение самой клетки
  x,y  :byte;
end;
}
  pawn_:   Tmvs;
  knight_: Tmvs;
  king_:   Tmvs;
  qween_:  Tmvs;
  rook_:   Tmvs;
  bishop_: Tmvs;

  begin
     //оценка конеч.точки
     if depth=0 then begin

      {
      //оставил для проверки, сами ходы генерируются нормально
      application.processmessages;
      form1.draw;
      sleep(500);
      }

      // функция для оценки материального состояния фигур на данный момент
      // проверял, но на всякий случай выложу ниже ее код
      result:= evalute(is_black);
      exit
     end;

     //порядковый индекс для start_sel
     cur_i:=0;
     // генерирование всех ходов, с проблем, как будто, нет
     start_sel(is_black);

     // здесь я переопределил глоб.массивы TMVS локальным
     // иначе они будут тупо перезаписаны на каждом новом витке
     rook_:=rook; knight_:=knight; bishop_:=bishop;
     qween_:=qween; king_:=king; pawn_:=pawn;

     // корректность функции get_ix_arr() тоже проверял, работает как надо
     // преобразует общий поряд. номер cur_i в нижний для rook_,knight_ и т.д.
     while (get_ix_arr(idx,cur_i,rook_,knight_,
     bishop_,qween_,king_)=true)and(alfa<beta)
     do begin
       // делаем ход в массиве TFIELD
       tmp:= makemove(idx);
       // ниже все по псевдокоду ALFA-BETA
       temp:= -search(depth-1,not is_black,-beta,-alfa);
       // возвращаем ход назад
       unmakemove(idx,tmp);

     if temp>alfa then alfa:= temp;
     end;
     result:= alfa;
end;
Foxpronet вне форума Ответить с цитированием
Старый 05.04.2014, 22:11   #2
Foxpronet
Пользователь
 
Регистрация: 11.08.2011
Сообщений: 67
По умолчанию

Ну вот.. Тишина.
Foxpronet вне форума Ответить с цитированием
Старый 06.04.2014, 10:44   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Я в шахматах с алгоритмической т.з. соображаю мало. Можно проектом увидеть, чтобы поколупаться?
Плюс объяснение этой фразы
Цитата:
Понятно, что ее нужно вытаскивать из корня, то есть самого первого рекурсивного вызова по возвращаемому результату всех дочерних, но не получается, ступор видимо какой-то.. )
phomm вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм на 4 хода ClMlD Общие вопросы Delphi 4 02.01.2013 14:50
Алгоритм выбора лучшего хода tanyhaftv Помощь студентам 4 09.06.2011 17:55
алгоритм поиска незнайка_на_земле Помощь студентам 4 08.03.2011 10:46
Пузырьки:алгоритм лучшего хода SynEnergizer Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 05.12.2009 16:18
Алгоритм поиска... Johnson Общие вопросы Delphi 1 26.10.2008 08:35