За последние 24 часа нас посетили 18735 программистов и 1593 робота. Сейчас ищут 1153 программиста ...

шахматы на рнр

Тема в разделе "PHP для новичков", создана пользователем kokon, 17 мар 2016.

  1. kokon

    kokon Новичок

    С нами с:
    17 мар 2016
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте!! Я не так давно начал учить рнр, и решил для начала написать шахматы. Проблема в том, что я не могу правильно вывести фигуры на шахматную доску, так чтобы уusera1 были белые, а у usera2 черные. Я вывел так на белой клеточке черная фигура, а на черной белая. Нужна ваша помощь, очень((((
    Вот мой код с выводом:
    Код (PHP):
    1. <?php
    2.                        elseif(($i+$j)%2 !== 0) 
    3.             {
    4.                 $sk=$pp.$j;
    5.                 $s=$array[$sk];
    6.                     print "<td class='black' id='" . $id . "'>";
    7.                             
    8.                     if ($s!='' and $user=1)   
    9.                        print "<a href='#' class='figura'><img src='images/".$array[$sk]."_white.png'></a>";
    10.                        print "</td>";
    11.             } 
    12.             else 
    13.             {
    14.                 $sk=$pp.$j;
    15.                 $s=$array[$sk];
    16.                     print "<td class='white' id='" . $id . "'>";
    17.                            
    18.                     if($s!='' and $user=2)   
    19.                         print "<a href='#' class='figura'><img src='images/".$array[$sk]."_black.png'></a>";
    20.                         print "</td>";
    21.             } 
    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    может что по-проще для начала?
     
  3. Anhk

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

    С нами с:
    13 дек 2015
    Сообщения:
    219
    Симпатии:
    11
    сам давно думал об этом, но потом понял, что это не просто...
    алгоритм просчета ходов нужен, + возможность подсоединения в игру двум игрокам сразу и куча других моментов.

    Добавлено спустя 1 минуту 3 секунды:
    и на одном только пыхе далеко и красиво не поедешь.
     
  4. kokon

    kokon Новичок

    С нами с:
    17 мар 2016
    Сообщения:
    3
    Симпатии:
    0
    На данный момент у меня стоит задача правильно расставить фигуры, а дальше уже посмотрим, я же не только рнр учить буду
     
  5. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Первоначальные позиции же всегда известны.
    Создай массив с расположением фигур а дальше в цикле выводи.

    Добавлено спустя 36 секунд:
    а вообще зря с шахмат начал
     
  6. kokon

    kokon Новичок

    С нами с:
    17 мар 2016
    Сообщения:
    3
    Симпатии:
    0
    координаты фигур я задал в БД, массив уже создал

    Добавлено спустя 1 минуту 30 секунд:
    вот весь код:
    Код (PHP):
    1. <body>
    2. <head>
    3.     <meta charset="utf-8">
    4. </head>    
    5. <style>
    6. .user{
    7.     margin-left: 250px;
    8. }
    9. .figura:hover {
    10.     background-color:#0088cc;
    11.     height: 40px;
    12. }
    13. .white {
    14.     background-color: white;
    15. }
    16. .black {
    17.     background-color: black;
    18. }
    19. .number {
    20.     height: 40px;
    21. }
    22.  
    23. td{
    24.     width: 40px;
    25.     background-position: center;
    26.     background-repeat: no-repeat;
    27. }
    28. .table1{
    29.     margin: auto;
    30. }
    31. </style>
    32. <p align="center">user1</p>
    33.  
    34. <table border="1px" width="500" height="500" cellpadding="0" cellspacing="0" class="table1">
    35. <?php
    36.  
    37.  
    38. ini_set('error_reporting', 1);
    39. ini_set('display_errors', 1);
    40. ini_set('display_startup_errors', 1);
    41.  
    42.                     $dblocation = "localhost";
    43.                     $dbname = "chess";
    44.                     $dbuser = "root1";
    45.                     $dbpasswd = "123456";
    46.                     $dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd);
    47.                     if (!$dbcnx)
    48.                       {
    49.                         echo "<p>Приносим свои извенения. Сервер баз данных временно недоступен. В ближайшее время мы постараемся исправить эту проблему. </p>";  
    50.                         exit();
    51.                       }
    52.                     if (!mysql_select_db($dbname,$dbcnx))
    53.                       {
    54.                         echo "<p>К сожалению, не доступна база данных</p>";
    55.                         exit();
    56.                       }
    57.                     mysql_query('SET NAMES utf-8');
    58.  
    59.  
    60.     $sql1="SELECT p1,p2,figure,user FROM `chessphp` ";
    61.     $result1 = mysql_query($sql1, $dbcnx);
    62.     $rows1= mysql_fetch_array($result1,MYSQL_ASSOC);
    63.     $array=array();
    64.     $user=array();
    65.     $dbt='';
    66.         do {
    67.             $user=$rows1['user'];
    68.             $array[$rows1['p2'].$rows1['p1']]=$rows1['figure'];
    69.         }
    70.         while ($rows1= mysql_fetch_array($result1,MYSQL_ASSOC));        
    71.     $id=1;
    72.     $char = 'A';
    73.     print "<tr>";
    74.     for ($i=0; $i<9; $i++) {
    75.         if ($i>0) {
    76.             print "<td class= number>" . $i . "</td>";
    77.         } else {
    78.             print "<td class= number></td>";
    79.         }
    80.     } 
    81.     print "</tr>";
    82.     for($i=1; $i<9; $i++) {
    83.         print "<tr>";
    84.         for($j=0; $j<9; $j++) 
    85.         {
    86.              if ($j == 0) 
    87.              {
    88.                  print "<td class='number'>" . $char .  "</td>";
    89.                  $pp=$char;
    90.                  $char++;
    91.  
    92.              }
    93.             elseif(($i+$j)%2 !== 0) 
    94.             {
    95.                 $sk=$pp.$j;
    96.                 $s=$array[$sk];
    97.                     print "<td class='black' id='" . $id . "'>";
    98.                             
    99.                     if ($s!='' and $user=1)
    100.                        print "<a href='#' class='figura'><img src='images/".$array[$sk]."_white.png'></a>";
    101.                        print "</td>";
    102.             } 
    103.             else 
    104.             {
    105.                 $sk=$pp.$j;
    106.                 $s=$array[$sk];
    107.                     print "<td class='white' id='" . $id . "'>";
    108.                            
    109.                     if($s!='' and $user=2)   
    110.                         print "<a href='#' class='figura'><img src='images/".$array[$sk]."_black.png'></a>";
    111.                         print "</td>";
    112.             }
    113.             $id++;
    114.         }
    115.         print "</tr>";
    116.     }
    117. ?>
    118. </table>
    119.     <p align="center">user2</p>
    120. </body>
    121. </html>
     
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А зачем в бд хранишь? o_O
    А вообще нафиг это все. Ни каких тебе базы и циклов.
    Первоначальное положение известно и оно не изменится. Создай таблицу с уже заданным положением.
     
  8. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    хвастаешься?
     
  9. Anhk

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

    С нами с:
    13 дек 2015
    Сообщения:
    219
    Симпатии:
    11
    и учись использовать сразу mysqli / pdo
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.760
    Шахматы на php... Это же сколько он над ходами думать будет? А вообще, ты хоть представляешь какой алгоритм нужен, чтобы сделать ход? А ты не можешь 16 фигур нарисовать...
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    дорогу осилит идущий
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Если простенького бота нужно написать хватит глубины просчета не более 1 хода на фигуру. С логикой полезности хода на уровне "потерять фигуру, съесть фигуру, нейтрально, ближе к королю, дальше от короля". Без точной оценки ситуации на поле. Он же не DeepBlue для турнира пишет :)
    Пускай пускай.

    Если ему это интересно, если есть шило в одном месте на эту тему - то справится. Хотя лично я бы полностью делал это на JS. Для сервера хоть убей не вижу тут ни капли работы. Все для клиента. Сервер разве что для связи между двумя клиентами можно юзать, чтобы ходы одного прокидывать другому. И для чатика.
     
  13. Serg197211

    Serg197211 Новичок

    С нами с:
    23 фев 2024
    Сообщения:
    4
    Симпатии:
    1
    А что такого... Вот мои шахматы на php: https://initit.ru/chess_programming - с объяснениями, "с нуля". В текущей последней статье добавлен грубый перебор - он делает ПОЛНЫЙ просмотр дерева на три полухода вперёд, и тратит на ход в большинстве случаев до 30 секунд. 10-20. Изредка - 40. Это без всяких оптимизаций. и с полным перебором на три полухода.

    Готовлю к публикации следующую статью, там добавил альфа-бета отсечение, и при глубине 3 полухода программа отвечает почти мгновенно! 4 полухода - пара-тройка секунд. 5 полуходов - так-же, как при полном переборе на полухода - до 30 секунд
     
    don.bidon нравится это.
  14. Dremax

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

    С нами с:
    13 фев 2015
    Сообщения:
    154
    Симпатии:
    4
    Тебе надо в корне переделать код,рисуй доску через <table> или через <div> а не через print
    Не храни фигуры в базе данных
    Храни фигуры для каждой игры в файле .тхт
    Сделай уникальные логины для каждого игрока
    Сделай файл регистрации партии
    Если настроен серьезно - то тебе предстоит очень долгая работа
    Я свою шахматную программу разрабатывал 8 лет
    Могу проконсультировать ,помочь и дать простейший исходник для доски 8х8
    На новой чистой странице php я создам доску за 1 час,и могу тебе показать код
    Заглядывай на https://кибершахматы.рф

    Допустим ты расставишь фигуры,но потом будешь думать как сделать простейший ход пешкой
    Ходы делаются на JS,могу тебе код подкинуть
    Потом надо писать "матрицы" для каждой фигуры,чтобы пешка не ходила как попало

    Если ты новичек - то зря начинаешь с шахмат
    Начинать надо с написания гостевой книги,или мини чата с админкой и банами

    Фигуры назначаешь здесь:
    PHP:
    1.  $arImages = array(
    2.    // перечисляешь все фигуры
    3. // .....
    4.    1 => 'picture/peshka_black.png',
    5.    2 => 'picture/tura_black.png',
    6.    3 => 'picture/kon_black.png',
    7.    4 => 'picture/slon_black.png',
    8.    5 => 'picture/ferz_black.png',
    9.    6 => 'picture/korol_black.png',
    10.    11 => 'picture/peshka.png',
    11.    12 => 'picture/tura.png',
    12.    13 => 'picture/kon.png',
    13.    14 => 'picture/slon.png',
    14.    15 => 'picture/ferz.png',
    15.    16 => 'picture/korol.png',
    16.    40 => 'picture/kletka-0.png',
    17.   7 => 'picture/black_princess.png',
    18.    17 => 'picture/princess.png',
    19.    18 => 'picture/kon2.png',
    20.    8 => 'picture/kon_black2.png',
    21.    19 => 'picture/peshka3.png',
    22.    9 => 'picture/peshka_black3.png',
    23. 83 => 'picture/ogon.gif',
    24.   81 => 'picture/kletka-2.png',
    25.   //.....
    26. );
    Клетки рисуешь так:
    PHP:
    1.  <div id="table">
    2.          
    3.       <div class="cell2" id="">8</div>
    4.  
    5.    <div class="cell" id="A8" style="background-color:<? echo $color_b[$x]; ?>"><img src="<?echo $arImages[$sh[0]]?>" <? echo 'width='.$width; echo 'height='.$height; ?>></div>
    6.             <? $x=$x+'1'; ?> <div class="cell dark" id="B8" style="background-color:<? echo $color_b[$x]; ?>"><img src="<?echo $arImages[$sh[1]]?>" <? echo 'width='.$width; echo 'height='.$height; ?>></div>
    7.             <? $x=$x+'1'; ?> <div class="cell" id="C8" style="background-color:<? echo $color_b[$x]; ?>"><img src="<?echo $arImages[$sh[2]]?>" <? echo 'width='.$width; echo 'height='.$height; ?>></div>
    8.             <? $x=$x+'1'; ?> <div class="cell dark" id="D8" style="background-color:<? echo $color_b[$x]; ?>"><img src="<?echo $arImages[$sh[3]]?>" <? echo 'width='.$width; echo 'height='.$height; ?>></div>
    9.             <? $x=$x+'1'; ?> <div class="cell" id="E8" style="background-color:<? echo $color_b[$x]; ?>"><img src="<?echo $arImages[$sh[4]]?>" <? echo 'width='.$width; echo 'height='.$height; ?>></div>
    10.             <? $x=$x+'1'; ?> <div class="cell dark" id="F8" style="background-color:<? echo $color_b[$x]; ?>"><img src="<?echo $arImages[$sh[5]]?>" <? echo 'width='.$width; echo 'height='.$height; ?>></div>
    11.             <? $x=$x+'1'; ?> <div class="cell" id="G8" style="background-color:<? echo $color_b[$x]; ?>"><img src="<?echo $arImages[$sh[6]]?>" <? echo 'width='.$width; echo 'height='.$height; ?>></div>
    12.             <? $x=$x+'1'; ?> <div class="cell dark" id="H8" style="background-color:<? echo $color_b[$x]; ?>"><img src="<?echo $arImages[$sh[7]]?>" <? echo 'width='.$width; echo 'height='.$height; ?>></div>
     
  15. Dremax

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

    С нами с:
    13 фев 2015
    Сообщения:
    154
    Симпатии:
    4
    Мне в 4 утра делать было нечего,я выполнил твою задачу на основе моих исходников
    Файл doska.php не умещается,не дают разместить код

    Посмотреть на работу файла doska.php: https://кибершахматы.рф/lessons/doska.php
    Скачать готовую папку с фигурами и с файлом doska.php: https://кибершахматы.рф/lessons.zip

    Для игрока 2 просто надо переворачивать доску вверх ногами

    Бери этот пример,переделывай,оптимизируй,разукрашивай и ВПЕРЕД