Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм alpha-beta 
:(
    Опции темы
JAnty
Дата 1.6.2005, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 6.12.2004
Где: Москва

Репутация: 1
Всего: 2



Немогу найти Алгоритм для Х-О.
Может есть у гогонибуть?


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
ManiaK
Дата 1.6.2005, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Можно по-подробней, что за зверь?
PM MAIL WWW   Вверх
JAnty
Дата 1.6.2005, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 6.12.2004
Где: Москва

Репутация: 1
Всего: 2



Алгоритм(рекурсия) просчитывающий варианты ходов и возвращает лучший ход.
Есть код на Pascal но я непонимаю как ОНО работает.


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
ManiaK
Дата 1.6.2005, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Кидай паскалевый вариант.
PM MAIL WWW   Вверх
sergejzr
Дата 1.6.2005, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360





--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
JAnty
Дата 1.6.2005, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 6.12.2004
Где: Москва

Репутация: 1
Всего: 2



Код




{
 Пример игры КРЕСТИКИ-НОЛИКИ
 
 игра идёт на квадратном поле 3*3 клетки.
} 
uses crt; 
  

TYPE 
 SquareType = ( 
               EMPTY , {пусто} 
               CROSS , {крестик} 
               NULL    {нолик} 
             ); 
 {массив игры} 
 PosType = array[0..8] of SquareType; 

 {стартовая позиция} 
const pos:PosType = 
( 
  EMPTY,EMPTY,EMPTY, 
  EMPTY,EMPTY,EMPTY, 
  EMPTY,EMPTY,EMPTY 
); 

{данная функция возвращает true если в массиве
 игры есть замкнутая линия крестиков или ноликов} 
function EndGame( z:SquareType):boolean; 
begin 
{        номера клеток для наглядности 
  0,1,2, 
  3,4,5, 
  6,7,8 
} 
  EndGame := true; 
  if (pos[0] = z) and (pos[1] = z) and (pos[2] = z) then exit; 
  if (pos[3] = z) and (pos[4] = z) and (pos[5] = z) then exit; 
  if (pos[6] = z) and (pos[7] = z) and (pos[8] = z) then exit; 
  if (pos[0] = z) and (pos[3] = z) and (pos[6] = z) then exit; 
  if (pos[1] = z) and (pos[4] = z) and (pos[7] = z) then exit; 
  if (pos[2] = z) and (pos[5] = z) and (pos[8] = z) then exit; 
  if (pos[0] = z) and (pos[4] = z) and (pos[8] = z) then exit; 
  if (pos[6] = z) and (pos[4] = z) and (pos[2] = z) then exit; 
  EndGame := false; 

end; 
  

{сюда вернём лучший ход} 
var retPos:PosType; 

{функция просчота } 
function Search(s:SquareType;        {наши фигуры} 
                alpha,beta:integer;  {минимум и максимум} 
                ply:integer          {глубина просчота} 
               ):integer; 
var 
 n,tmp:integer; 
 f,opS:SquareType; 
 findMove:boolean; 
begin 
  

    {определим цвет фигур противника} 
    if s = NULL then opS := CROSS 
      else opS := NULL; 

    {если конец то вернём оценку} 
    if EndGame(opS) then begin 
        {противник замкнул линию в приузле - это наш проигрыш} 
        Search := -1; 
        exit; 
    end; 
  

    {пока ненашли ни одной свободной клетки} 
    findMove := false; 

    {перебираем все клетки доски} 
    for n := 0 to 8 do 
    begin 
       f := pos[n]; 
       if f = EMPTY then begin 
         findMove := true; 
         {ᤥ« «Ё е®¤} 
         pos[n] := s; 
         {Їа®бзҐв} 
         tmp := -Search(opS,-beta,-alpha,ply+1); 
         if tmp > alpha then 
         begin 
            alpha := tmp; 
            if ply = 0 then 
              Move(pos,retPos,sizeof(PosType)); 
         end; 
         {восстанавливаем позицию} 
         pos[n] := EMPTY; 
         if alpha >= beta then exit;

       end; 
    end; 

    if not findMove then Search := 0 {ничья} 
      else  Search := alpha; 
end; 
  
  

{выводим на экран} 
procedure ShowPos; 
  function Ch(n:integer):char; 
  begin 
   if pos[n] = CROSS then  Ch :='*' 
      else if pos[n] = NULL then Ch := '0' 
      else Ch := ' '; 
  end; 

begin 
   Writeln('   -------'); 
   Write('   |', Ch(0), '|', Ch(1), '|', Ch(2), '|'); Writeln; 
   Writeln('   -------'); 
   Write('   |', Ch(3), '|', Ch(4), '|', Ch(5), '|'); Writeln; 
   Writeln('   -------'); 
   Write('   |', Ch(6), '|', Ch(7), '|', Ch(8), '|'); Writeln; 
   Writeln('   -------'); 
  

end; 
  
  

{true если некуда ходить} 
function GameOver:boolean; 
var 
 n:integer; 
begin 
    GameOver := false; 
    if not (EndGame(CROSS) or EndGame(NULL)) then 
    begin 
        for n := 0 to 8 do 
          if pos[n] = EMPTY then exit; 
    end; 
    GameOver := true; 
end; 
  

VAR 
  ch:integer; 
  tmp:integer; 
  n:integer; 
BEGIN 
HighVideo; 

 repeat 

    Writeln; 
    Writeln('/////////////////////////////////////////'); 
    ShowPos; 
    Writeln; 

    if GameOver then begin 
        for n := 0 to 8 do pos[n] := EMPTY; 
        Writeln('Game Over!!!'); 
        Writeln; 
        ShowPos; 
        Writeln; 
    end; 
  

    repeat 
      Write('Enter move number [0..8] or -1 (exit):'); Read(ch); 
    until  (ch = -1) or 
           ((ch >=0) and (ch <= 8) and (pos[ch] = EMPTY)) ; 
    if ch = -1 then exit;
    pos[ch] := CROSS; 

    if not GameOver then begin 
       tmp := Search(NULL,-2,2,0); 
       pos := retPos; 
    end; 
  

  until ch = -1; 
  

LowVideo; 
Writeln('done'); 
END. 
  
  
  
  
  
  



в консоле
Добавлено @ 12:46
Перепысываю на С++ и не пашет. Тупо играет. А в инете всё на паскале.


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
Бегемот
Дата 4.6.2005, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 26.1.2005
Где: На границе Европы и Азии

Репутация: нет
Всего: 3



JAnty, я закинул тебе на мыло сишные исходники. Игра писана в шестом Бильдере! Можешь откомпилить, всё работает. smile

PM MAIL   Вверх
JAnty
Дата 7.6.2005, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 6.12.2004
Где: Москва

Репутация: 1
Всего: 2



Спасибо .Будут вопросы обращусь.

Это сообщение отредактировал(а) JAnty - 7.6.2005, 20:16


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.