Обновление на AJAX стояло,но там не виден HTML код,и анимация не работает Код (Javascript): <script> function show() { $.ajax({ url: "shess_x.php", cache: false, success: function(html){ $("#panec").html(html); } }); } $(document).ready(function(){ show(); setInterval('show()',1000*6); }); </script> Как быть? Функцию еще не искал в интернете,там будет куча примеров
Вам нужно убрать jQuery код, который Вы показали. В Chessboard.js есть функция ProcessingChessMove Она после второго клика по фигуре (ход завершён) отправляет AJAX XLHttpRequest на сервер в processing.php и принемает ответный ход. Получив ответный ход - JSON Response, вызывает функции movePiece(moveInfoObj["hod_shto2"], moveInfoObj["hod_kuda2"]); - выводит на доске ответный ход addInfo(moveInfoObj); дополняет инфо о ходе в инфоблок. Код (Javascript): function ProcessingChessMove(hod_shto1, hod_kuda1, hod_piece ){ var xmlhttp = new XMLHttpRequest(); var url = `processing.php?hod_shto1=${hod_shto1}&hod_kuda1=${hod_kuda1}&hod_piece=${hod_piece}`; xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var moveInfoObj = JSON.parse(this.responseText); movePiece(moveInfoObj["hod_shto2"], moveInfoObj["hod_kuda2"]); addInfo(moveInfoObj); } }; xmlhttp.open("GET", url, true); xmlhttp.send(); } Вам необходимо перенести в processing.php всё, что требуется для ответного хода.
На всякий случай, это может быть не обязательно processing.php Так это можно встроить в index.php PHP: <? if(isset($_GET["hod_shto1"]) AND isset($_GET["hod_kuda1"]) { //Обработчик AJAX Request $hod_shto1 = $_GET["hod_shto1"]; $hod_kuda1 = $_GET["hod_kuda1"]; $hod_piece = $_GET["hod_piece"]; /* здесь ИИ должен регировать на ход игрока и делать свой следущий ход. За неимение ИИ для тестa присвоены случайные столбцы от "A" до "H" */ $letters = range("A","H"); $ind = random_int(0, 7); $col = $letters[random_int(0, 7)]; $hod_shto2 = $col."7"; $hod_kuda2 = $col."5"; $out = [ "hod_shto1" => $hod_shto1, "hod_kuda1" => $hod_kuda1, "hod_piece" => $hod_piece, "hod_shto2" => $hod_shto2, "hod_kuda2" => $hod_kuda2 ]; //Отправляем JSON Response header('Content-Type: application/json; charset=utf-8'); echo json_encode($out); exit; } ?>
Добавил украшение на все варианты: td{ border-radius:4px; } td:hover{ background:#404040; } div{border-radius:4px; } div:hover{ background:#404040; } Доски "ожили" и реагируют на движение мышкой Самое интересное - что за 8 лет никто не подсказал это сделать.Всё самому надо придумывать
Добрый день! Сделал update. Ссылка нa демо и zip: https://www.alto-booking.com/developer/chessPieceAnimation/script https://www.alto-booking.com/developer/chessPieceAnimation/script/chess.zip Изменено и дополненно: 1. ChessboardMaster.php в допонение к файлам blackPayerChessBord.html, whitePayerChessBord.html создаёт файл cellsId.js 2. В index.php опделяется рандомно цвет фигур игрока, определяются переменные сессии $_SESSION["playerPieces"] $_SESSION["playerName"] $_SESSION["pieceImgFiles"]=["patch" => $patch, "ext" => $ext]; затем редирект на chess_play.php 3. После загрузки установливается обработчик события click по id клеток (div). Убрал определение позициий всех клеток и фигур. Отказался от создание объекта cellsPosition. Убрал в СSS position:absolute для элементов img. 4. Изменена реализация анимации. Теперь при клике определятся позиции клеток (top,left) Дочернему элементу img задаются CSS свойства top,left, position:absolute. При клике на клетку "куда" изменяется свойства top,left и анимируется пемещение фигуры. По окончанию, свойства top,left, position:absolute удалются и img вставляется в клетку. Если клетка "куда" не была пустой, запоминается название фигуры, которая в ней была. Это фигура отображается как выигранная в поле справа. 5. Для демонстации ходов противника в processing.php, за неимением ИИ, ходы предопределются в файле demoMoves.txt (задано только 5 ходов) Код (Text): E7,E5 D7,D5 B8,C6 G8,F6 F8,A3 Демо видео 1. Игрок чёрными, игру начинает противник белыми https://www.alto-booking.com/developer/chessPieceAnimation/script/PayerBlackBeginWhite.mp4 Демо видео 2. Игрок белыми начинает игру, противник отвечает. https://www.alto-booking.com/developer/chessPieceAnimation/script/PayerWhiteBegin.mp4 Удачи! P.S. Правила ходов фигур в JS не обрабатываются.
Vladimir Kheifets, Добрый день Я познакомился с чатом GPT ,это искусственный интеллект Он пишет любые программы за 5 секунд, я просил написать шахматную доску, калькулятор, уроки по JS, обработку фигур в шахматах Этот ИИ умнее меня в 100 раз ) Вот ИИ спрограммировал калькулятор: https://кибершахматы.рф/petuh/calc.php Знакомьтесь и тестируйте, в день дается 10 сообщений Просите написать "Калькулятор в 20 математическими функциями и 30 кнопками" Чувствую что теперь программисты буду уволены, ИИ напишет любые программы Чат GPT: https://chat-gpt.org/chat [[[ Я скачал книгу по JS и начал читать, прочитал 43 страницы - я там почти всё знаю ]]]
Лучший метод изучения языков, это программирование на них. Поэтому в хороших учебниках должно быть много примеров. Надеюсь, что то, что я сделал кому-нибудь пригодится. Удачи!
Vladimir Kheifets, Спрограммируйте Морской бой на шахматной доске 20х20: https://кибершахматы.рф/gallery/data/nnn555.jpg Сон приснился как я это программирую,в 6 утра проснулся Начну переделывать ИИ под Морской бой Мою программу легко переделать,ходы будут рандомными,мы в школе в 90е года играли в это на бумаге
ради интереса спросил у ChatGPT, вот что выдал: Код (Text): <?php class BattleshipGame { private $gridSize = 20; private $grid; private $shipRow; private $shipCol; public function __construct() { $this->initializeGrid(); $this->placeShip(); } private function initializeGrid() { $this->grid = array_fill(0, $this->gridSize, array_fill(0, $this->gridSize, ' ')); } private function placeShip() { $this->shipRow = rand(0, $this->gridSize - 1); $this->shipCol = rand(0, $this->gridSize - 1); } public function printBoard() { foreach ($this->grid as $row) { echo implode(' ', $row) . PHP_EOL; } } public function takeTurn($guessRow, $guessCol) { if ($guessRow == $this->shipRow && $guessCol == $this->shipCol) { echo "Congratulations! You sank my battleship!" . PHP_EOL; return true; } else { if ($guessRow >= 0 && $guessRow < $this->gridSize && $guessCol >= 0 && $guessCol < $this->gridSize) { if ($this->grid[$guessRow][$guessCol] == 'X') { echo "You already guessed that one." . PHP_EOL; } else { echo "You missed my battleship!" . PHP_EOL; $this->grid[$guessRow][$guessCol] = 'X'; } } else { echo "Oops, that's not even in the ocean." . PHP_EOL; } return false; } } } function playBattleship() { $game = new BattleshipGame(); echo "Welcome to Battleship!" . PHP_EOL; echo "Try to sink my battleship on a 20x20 grid." . PHP_EOL; $turns = 0; while (true) { $game->printBoard(); $guessRow = (int) readline("Enter guess row (0-19): "); $guessCol = (int) readline("Enter guess column (0-19): "); $turns++; if ($game->takeTurn($guessRow, $guessCol)) { echo "You sank my battleship in $turns turns!" . PHP_EOL; break; } } } playBattleship(); ?>
Примерно тогда, а может и раньше был популярный фильм "Кавказская пленница." Может кто помнит замечальный тост из этого фильма - "Выпьем же за то, чтобы наши желания совпадали с нашими возможностями"
Навалял,весь алгортм шахматный вырезал: https://кибершахматы.рф/gallery/data/nnn777.jpg Подскажите,как "раздавать" корабли компьютеру рандомно? И еще чтобы выстраивались как полагается Спросил у чата GPT - он наковеркал вроде умно,но у меня массив fexo_comp[]; Вот такой: PHP: 40 40 40 40 40 40 40 40 40 40 40 40 4 40 2 2 2 40 40 4 40 40 40 40 40 40 40 40 40 40 40 40 3 3 40 40 2 2 2 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 3 3 40 4 40 40 2 2 2 40 40 40 40 40 40 40 40 40 40 40 40 40 3 3 40 40 4 40 4 40 40 40 40 40 40 40 40 40 40 40 3 3 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 Корабли компьютера потом спрячу,после наладки
Раздал корабли кое как - мне понравилось Буду резаться,как в школе))) https://кибершахматы.рф/gallery/data/yyy777.jpg
Добрый день! Однако, как и в шахматах возникает вопрос: "Как синхорнизировать на сервер ходы хотя бы одной пары игроков?" Интересно, что ответит Вам ИИ. Удачи!
Давно не играл в эту замечательную игру. М.б. поэтому не понял почему массив одномерный. По идее, должен, где-то быть массив с количеством клеток на каждый тип корабля и другой массив, в котором рандом определяется начальная и конечная клетка на поле для каждого корабля.
Ходы двоих игроков записываются нормально,можем сыграть вдвоем онлайн на любом варианте Вот: https://кибершахматы.рф/variant1/archive_d_tip1_uvel.php?namer=Guest880&tip=1&nomer=n5984r --- Добавлено --- Корабли раздаю рамдомно,наладил с 5й попытки,корабли липнут дург к другу: PHP: <? $k1='2'; $d1='0'; $p1='0'; // Заполняем доску рандомными значениями for ($i = 0; $i < 101; $i++) { $r='0'; // Рандомно заполняем клетки значениями 2, 3 или 4 if(!$start[$i]) { $start[$i] = rand(1, 20); $r='1'; } if($start[$i]=='1' && $k1=='1' && $r=='1') { $start[$i]='40'; } if($start[$i]=='1' && $k1!='1') { $k1='1'; $rer=rand(1,2); if($rer=='1') { $start[$i+10]='1'; $start[$i+20]='1'; $start[$i+30]='1'; } if($rer=='2') { $start[$i+1]='1'; $start[$i+2]='1'; $start[$i+3]='1'; } } if($start[$i]=='2' && $d1=='1' && $r=='1') { $start[$i]='40'; } if($start[$i]=='2' && $d1!='1') { $d1='1'; $start[$i+10]='2'; $start[$i+20]='2'; $tet=rand(1,2); if($tet=='1') { $start[$i+24]='2'; $start[$i+25]='2'; $start[$i+26]='2'; } if($tet=='2') { $start[$i+22]='2'; $start[$i+32]='2'; $start[$i+42]='2'; } } if($start[$i]=='3' && $p1=='1' && $r=='1') { $start[$i]='40'; } if($start[$i]=='3' && $p1!='1') { $p1='1'; $start[$i+10]='3'; $start[$i+21]='3'; $start[$i+22]='3'; $start[$i+24]='3'; $start[$i+34]='3'; } if($start[$i]=='5') { $start[$i]='40'; } if($start[$i]=='6') { $start[$i]='40'; } if($start[$i]=='7') { $start[$i]='40'; } if($start[$i]=='8') { $start[$i]='40'; } if($start[$i]=='9') { $start[$i]='40'; } if($start[$i]=='10') { $start[$i]='40'; } if($start[$i]=='11') { $start[$i]='40'; } if($start[$i]=='12') { $start[$i]='40'; } if($start[$i]=='13') { $start[$i]='40'; } if($start[$i]=='14') { $start[$i]='40'; } if($start[$i]=='15') { $start[$i]='40'; } if($start[$i]=='16') { $start[$i]='40'; } if($start[$i]=='17') { $start[$i]='40'; } if($start[$i]=='18') { $start[$i]='40'; } if($start[$i]=='19') { $start[$i]='40'; } if($start[$i]=='20') { $start[$i]='4'; } } ?> Мелкий корабль это =4, 2х клеточный это =3, 3х клеточный это =2, И самый большой это =1 Клетка 40 это пустота Надо еще пару раз улучшить,чтобы корабли не липли. Если сможете - помогите
Вот: https://кибершахматы.рф/variant1/archive_d_tip1_uvel.php?namer=Guest880&tip=1&nomer=n5984r --- Добавлено --- Вот не работает. Это мы уже обсуждали. О перезагрузках страницы после каждого хода. Про корабли ничего не понял. Сколько типов кораблей и сколько клеток в каждом типе? Ориентация кораблей может быть любая? P.S. Если Вы не разберётесь с JS и AJAX, и с этой игрой Вам тоже не справиться, как и с любой другой игровой программой.
https://кибершахматы.рф/variant2/archive_d_tip2_uvel.php?namer=Guest936&tip=2&nomer=n7694h Это просмотр чужой партии,там ниче не должно работать За сегодняшний день добавил 2 чужих ИИ: https://кибершахматы.рф/chess_comp/dosa.php //на мобиле не работает https://кибершахматы.рф/chess_comp2/dosa.php //очень слабо ирает Правила морского боя описывать не буду,в течении месяца сам допишу цикл for и расставлю корабли AJAX успешно работает на всех 8ми вариантах
Ради интереса посмотрел как вы пристроили 2 чужих ИИ. Оба варианта чисто браузерные HTML и JS (чистый без jQuery). Обратие внимание на кодировку страницы и в chess_comp2. Выдаёт так: ����� �� ��� 0.008 ���. ( пишет в utf-8 в кодировке windows-1251) Оба чужих скрипт для игр через сервер не годятся. Смотрел несколько похожих JS скриптов. Очень слабый ИИ. В Ваших вариантах доски перезагружаются после каждого хода, значит, AJAX как не работал так и не работает. Чтобы заработал не достаточно подключить JQuery и вызвать функцию Ajax.
Написал простенькую функцию,чтобы компьютер побеждал в Морской бой.Так вот,компьютер попадает на 100%,если указать в цкиле $dd<100,я убавил "Мозги" компьютера,и указал $dd<30,чтобы компьютер немного промахивался PHP: $zet='1'; for($dd=0;$dd<30;$dd++) { if($zet=='1') { $rr=rand(1,100); if($fexo[$rr]=='98') { if($fexo[$rr+'1']<'5') { $hod_one=$rr+'1'; $zet='2'; } } if($fexo[$rr]=='98') { if($fexo[$rr-'1']<'5') { $hod_one=$rr-'1'; $zet='2'; } } if($fexo[$rr]=='98') { if($fexo[$rr+'10']<'5') { $hod_one=$rr+'10'; $zet='2'; } } if($fexo[$rr]=='98') { if($fexo[$rr-'10']<'5') { $hod_one=$rr-'10'; $zet='2'; } } } }
Про морской бой прокоментировать ничего не могу, а вот про "Мозги" компьютера могу предположить, что если к значению переменной $rr типа integer нужно прибавить или отнять нечто, а она задано в кавычках т.е. как string, то до выполнение арифметической операции string д.б. преобразована в integer. Вопрос зачем? Может быть просто вместо $rr+'1' , написать $rr+1 и так везде?
Так у меня повелось с 2009 года,что любые цифры в php пишу в кавычках,и комплиятор никогда не ругал Давно знаю что $ret=1; это число ,а $ret='1'; это строка,но php меня никогда не ругал Я сыграл по телику в свой Морской бой - И КОМПЬЮТЕР МЕНЯ ВЫИГРАЛ )) Я реализовал логику школьника в этой игре,сначала бьем наугад,ищем попадание,потом от подбитой клетки ищем продолжение корабля Сыграйте) Компьютер снайпер на 50% ,написал в цикле $dd<50; Там и дизайн изменился, https://кибершахматы.рф/sea_battle/dosa.php Кажется мне интереснее поиграть в Морской бой,чем в шахматы)
Советую Вам так не делать. В каждом случае добавляется лишняя операция. Кроме того РНР 8.2 не столь талератен к типам данных, как PHP 5.2, на котором Вы начинали. Сейчас во многих случаях, которые старый интерпретатор "додумывал", теперь возникают фатальные ошибки.