За последние 24 часа нас посетили 19837 программистов и 1106 роботов. Сейчас ищут 536 программистов ...

ИИ в шахматах на PHP

Тема в разделе "Решения, алгоритмы", создана пользователем Dremax, 28 июл 2023.

  1. Dremax

    Dremax Активный пользователь

    С нами с:
    13 фев 2015
    Сообщения:
    141
    Симпатии:
    3
    ИИ в шахматах,компьютер играет черными как 3 классник
    Ходы делает по правилам,уходит из под шаха,снимает шах,видит шах
    Анализирует вокруг на 1 клетку
    Жрет фигуры в пределах 1 клетки,видит угрозу вокруг на 1 клетку

    Чтобы дописать до конца с анализом 8 клеток вокруг - то придертся писать десятки метров кода

    Папка zip с исходником https://chess-rmx.net/studiere.zip ,вроде все наладил,стили внутри,ссылки на папку studiere

    Пойдет для детей до 12 лет,чтобы обучаться и прикалываться

    Метод поиска хода придумал как умел,всё прописал через IF

    Знаю от вас никаких советов не будет,тема будет пустая пол года,придется дальше самому придумывать дополнения

    ( можно высвечивать шах красным цветом,но кому это надо?? )
     
    Survivor нравится это.
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    829
    Симпатии:
    129
    Сударь, почитайте уже, как пишутся такие игры, особой тайны нет.
    Максимум, в написании чего сам принимал участие -- преферанс, но мы его на Прологе ваяли, там не на столько классический подход был.
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.727
    Симпатии:
    1.314
    Адрес:
    Лень
  4. Dremax

    Dremax Активный пользователь

    С нами с:
    13 фев 2015
    Сообщения:
    141
    Симпатии:
    3
    Компьютер жрет пешкой,видит шах и снимает шах,это уже ИИ на уровне 3 класса
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.727
    Симпатии:
    1.314
    Адрес:
    Лень
    Это называется не ИИ, а говнокод.

    2023-07-28_23-13-20.png


    2023-07-28_23-14-17.png


    2023-07-28_23-15-15.png

    2023-07-28_23-16-28.png

    2023-07-28_23-17-03.png
    Стал искать то заветное место которое ты якобы называешь ИИ. Я нашел :)

    https://onlinephp.io/c/02ed3

    Судя по стилю кода, этот класс единственный нормально оформленный, был просто слизан с форума.
    Чекер координат и вывод координат. Браво - это ИИ нет
    --- Добавлено ---
    Большой вопрос назревает, ты в белом Windows блокноте кодишь ?
     
  6. Dremax

    Dremax Активный пользователь

    С нами с:
    13 фев 2015
    Сообщения:
    141
    Симпатии:
    3
    Я классы никогда не программировал,код на скриншотах считаю нормальным кодом.
    Класс взят от SimpleChess со старой переписки 2016 года.С этим мужиком профессионалом и переписываюсь по почте,сайт va-soft.ru

    В программе я просто манипулирую цифрами,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19

    Все достигнуто за счет самообразования,институтов не заканчивал,дипломов не имею

    Файл include_voral.php это непонятная каша,я там сделал дополнения про новые фигуры

    Он изначально не учитывал рокировку и была ошибка про пешки
     
  7. Dremax

    Dremax Активный пользователь

    С нами с:
    13 фев 2015
    Сообщения:
    141
    Симпатии:
    3
    Думал 30 минут над последним замечанием...
    Я не представляю как переписать мою самодельную матрицу ,чтобы код был в 3 строчки

    Вывод: переделать код профи Александра Воробьева: SampleChess/chess.php at master · Voral/SampleChess · GitHub

    Вы можете изменить пару строчек внизу,чтобы эта матрица проверяла "перепрыгивания фигуры"?
    Например со стартовой позиции,чтобы не перепрыгивала ладья через пешку?

    Код (Text):
    1. public static function checkMove($from,$to,$figure,$isBlack)
    2.     {
    3.         $posFrom = self::getPosition($from);
    4.         if ($posFrom === false) return false;
    5.         $posTo = self::getPosition($to);
    6.         if ($posTo === false) return false;
    7.         $deltaX = $posTo['x'] - $posFrom['x'];
    8.         $deltaY = $posTo['y'] - $posFrom['y'];
    9.         $matrixX = ($isBlack) ? 7 + $deltaX : 7 - $deltaX;
    10.         $matrixY = ($isBlack) ? 7 + $deltaY : 7 - $deltaY;
    11.         return (self::$matrix[$figure][$matrixX][$matrixY] == 1);
    12.     }
    13.     /**
    14.     * Преобразование координат в цифровые и проверка на границы доски
    15.     * @param string $coord координаты ячейки в формате буква+цифра (например "a2")
    16.     * @return mixed  Если координата валидная array('x'=>...,'y'=>...); иначе false
    17.     */
    18.     private static function getPosition($coord)
    19.     {
    20.         if (strlen($coord) != 2) return false;
    21.         $y=$coord[0];
    22.         $x=intval($coord[1]) - 1;
    23.         if (!array_key_exists($y,self::$proxy) || $x < 0 || $x > 7) return false;
    24.         return array('x' => $x, 'y' => self::$proxy[$y]);
    25.     }
    Это очень профессиональный код,я попытался поменять цифры для доски 10х8 и 12х8,не сработало

    Этот VORAL оказался единственным вменяемым в 2016 году,кто мне реально помог на форуме

    Теперь он пишет на почте,что гигански занят работой и не может отвлечься на этот код,даже на письмо некогда ответить

    Прошу помощи,могу выделить 2000р за эту работу.Voral пишет что его работа стоит 2000р в час
     
  8. Dremax

    Dremax Активный пользователь

    С нами с:
    13 фев 2015
    Сообщения:
    141
    Симпатии:
    3
    Кайф,уже 236 просмотров

    Я сейчас исправлю легкую ошибку про мертвую ладью А8,эта клетка =0,поэтому она не ходит

    И обновлю папку zip
     
  9. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    829
    Симпатии:
    129
    статистику по загрузке кода считать надо, а лучше внутри стукачка установить, чтобы вести подсчёт запусков кода )
     
  10. Dremax

    Dremax Активный пользователь

    С нами с:
    13 фев 2015
    Сообщения:
    141
    Симпатии:
    3
    Поставил на первое открытие страницы ,письмо на почту будет приходить 1 раз от каждого человека

    Можно поставить стукача на каждый сделанный ход,но не хочу борзеть

    Более сложного стукача тоже не хочу делать,это будет нагло с моей стороны

    Код (Text):
    1. <html><head><title>ИИ в шахматах</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    2.  
    3. <? if(!isset($_COOKIE['style_s'])) {
    4.  
    5. echo '<link rel="stylesheet" type="text/css" href="../studiere/style/style4.css">' ;
    6. $style_s='4'; setcookie ("style_s", $style_s, time() + 3600*24*7);
    7. mail("unlater2@mail.ru", "Запущен исходник ИИ", "EXFOR");
    8.  
    9.  
    10. } else if(isset($_COOKIE['style_s'])) {
    11.  
    12. $style=$style_run;
    13.  
    14. if($style_s=='4') { echo '<link rel="stylesheet" type="text/css" href="../studiere/style/style4.css">' ; }
    15. if($style_s=='6') { echo '<link rel="stylesheet" type="text/css" href="../studiere/style/style6.css">' ; }
    16. if($style_s=='11') { echo '<link rel="stylesheet" type="text/css" href="../studiere/style/style11.css">' ; }
    17. if($style_s=='12') { echo '<link rel="stylesheet" type="text/css" href="../studiere/style/style12.css">' ; }
    18. if($style_s=='16') { echo '<link rel="stylesheet" type="text/css" href="../studiere/style/style16.css">' ; }
    19. }
    20.  
    21. //echo '='.$style_run;
    22. ?>
     
  11. Dremax

    Dremax Активный пользователь

    С нами с:
    13 фев 2015
    Сообщения:
    141
    Симпатии:
    3
    Подумал 20 минут ... Можно записывать файл .txt с двумя цифрами:

    12 - количество нажатий "Новая игра"
    6 - количество сделанных ходов человеком

    И при каждом изменении отправлять email,прикольно будет
     
  12. Dremax

    Dremax Активный пользователь

    С нами с:
    13 фев 2015
    Сообщения:
    141
    Симпатии:
    3
    Мне сейчас один умник написал,что ИИ пишут тысячи людей,и пишут годами большими компаниями

    Я зацепился за 1 фразу: Мой компьютер обрабатывает за 1 заход 6000 ходов,и через умную фильтрацию одобряется только 1 ход

    Так вот,анализ в 6000 ходов это нормально или мало?? Слышал на днях по радио,что компьютер от ученых обрабатывал 3 млн ходов

    Тогда в моей программе цикл for поставить 2000 и комп будет в 5 раз сильнее
     
  13. Dremax

    Dremax Активный пользователь

    С нами с:
    13 фев 2015
    Сообщения:
    141
    Симпатии:
    3
    Подскажите ,подключил новый файл include в цикле,и всё обломалось:

    Код (Text):
    1. for($r=0;$r<400;$r++) {
    2.  
    3.  
    4. include ('variant2/matrix/ataka_nomer.php');                                
    5. include ('variant2/matrix/hod_pod_udar/pod_udar_chernye.php');
    6. include ('variant2/matrix/uhod_s_udara/uhod_s_udara_8_kletok.php');
    7. include ('variant2/matrix/uhod_s_udara/uhod_s_udara.php');
    8. include ('variant2/matrix/udar/udar_chernye.php');                              
    9.  
    10. // include ('variant2/matrix/class_voral.php');                              
    11. include ('variant2/matrix/pravila/class_matrix2.php');                                
    12.                            
    13. include ('variant2/matrix/pravila/class_matrix_tura2.php');                                
    14. include ('variant2/matrix/pravila/class_matrix_ferz2.php');                              
    15. include ('variant2/matrix/pravila/class_matrix_slon2.php');                              
    16. include ('variant2/matrix/shah/class_shah_kon8.php');                              
    17. include ('variant2/matrix/shah/class_shah_tura8.php');                              
    18. include ('variant2/matrix/shah/class_shah_ferz8.php');                              
    19. include ('variant2/matrix/shah/class_shah_slon8.php');                                
    20. include ('variant2/matrix/shah/class_otkrytie_shaha8.php');
    21.                            
    22.  
    23. }
    24.  
    25. echo 'end';
    В конце слово end не пишется,файл\цикл просто обрывается
    Это из-за большого кода в include??

    Временно отключил этот файл,и вся логика ИИ опять восстановилась