Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PGN Нотация
 
 автор: Yaroslav   (05.04.2010 в 10:43)   письмо автору
 
 

Добрый день как можно реализовать скрипт просмотра PGN нотации (в шахматах)

Буду благодарен за любое советы.

  Ответить  
 
 автор: Yaroslav   (06.04.2010 в 00:04)   письмо автору
 
   для: Yaroslav   (05.04.2010 в 10:43)
 

Может кто знает подскажите пожалуйста

  Ответить  
 
 автор: Саня   (06.04.2010 в 00:38)   письмо автору
 
   для: Yaroslav   (06.04.2010 в 00:04)
 

Что конкретно у вас не получается?

  Ответить  
 
 автор: Yaroslav   (06.04.2010 в 00:55)   письмо автору
 
   для: Саня   (06.04.2010 в 00:38)
 

Сделать саму перестановку фигур на доске вообще не представляю как это можно

  Ответить  
 
 автор: Саня   (06.04.2010 в 00:59)   письмо автору
 
   для: Yaroslav   (06.04.2010 в 00:55)
 

На GD нарисовать. И давать ссылки на следующий/предыдущий ход.

  Ответить  
 
 автор: Yaroslav   (06.04.2010 в 01:03)   письмо автору
 
   для: Саня   (06.04.2010 в 00:59)
 

Может все таки примерчик или какими функциями возможно такое чуда просто нарисовать то 1 но надо что бы оно привелось в действие

  Ответить  
 
 автор: sim5   (06.04.2010 в 04:42)   письмо автору
 
   для: Yaroslav   (06.04.2010 в 00:55)
 

Перестановку фигуры соответственно записи или игрок берет фигуру, перестанавливает, записывается ход?

  Ответить  
 
 автор: Yaroslav   (06.04.2010 в 11:51)   письмо автору
 
   для: sim5   (06.04.2010 в 04:42)
 

Перестановку фигуры соответственно записи

  Ответить  
 
 автор: sim5   (06.04.2010 в 12:11)   письмо автору
 
   для: Yaroslav   (06.04.2010 в 11:51)
 

Ну сопоставьте тогда нотацию с координатами изображения (по размеру клетки) и рисуйте.

  Ответить  
 
 автор: Yaroslav   (06.04.2010 в 12:32)   письмо автору
 
   для: sim5   (06.04.2010 в 12:11)
 

Я повторюсь, мне бы примерчик или какими функциями это реализовать

  Ответить  
 
 автор: sim5   (06.04.2010 в 12:46)   письмо автору
 
   для: Yaroslav   (06.04.2010 в 12:32)
 

Я не знаю этой нотации, потому примерчика ноу...
Ну она же (эта нотация) надо полагать описывает шахматные фигуры и клетку, на которой она находится. Разве трудно квадрату на доске шахматной сопоставить координаты (верхний левый угол изображения фигуры в квадрате):
верхняя левая (А8), это координата 0,0
следующая справа (В8), это 60,0 - если принять размер квадрата доски 60х60 рх.
Ну и так далее, сверух вниз. Вот и рисуйте соответсвующие квадратики с фигурами 60х60 (белыми, черными), имеющими прозрачность, в соответствующих координатах.
Можно просто умножать размер стороны квадрата на число от 1 до 8, (А - Н, это тоже номера), таким образом и будете получать координаты наложения изображения фигуры.

  Ответить  
 
 автор: Yaroslav   (06.04.2010 в 14:50)   письмо автору
 
   для: Yaroslav   (05.04.2010 в 10:43)
 

Может кто еще чего посоветует

  Ответить  
 
 автор: sim5   (07.04.2010 в 09:19)   письмо автору
21 Кб
 
   для: Yaroslav   (06.04.2010 в 14:50)
 

Еще можно посоветовать Фотошоп.
А что еще можно, кроме как узнавать по клетке ее координаты на доске и рисовать? По щучьему велению только в сказке.
Я просто заглянул в Вики, посмотрел краткую инфу об этом. Мне этого не надо (по крайней мере сейчас), поэтому я не вникал что к чему, кто там за белых, а кто за красных, почему вторая запись (Nc3 Nbd7) имеет четыре символа, и т.п... Вам это надо, вы изучайте и разбирайтесь, а может уже и разобрались, значит вам и карты (пешки) в руки. Я же, для примера, сделал просто:
<?
$H1     
15;  //Х-координата первой клетки
$Y1     311//Y-координата первой клетки
$side   37;  //сторона клетки
$wch    326//сторона шахматной доски
//фигуры: индекс 0 - белые, индекс 1 - черные
$figure = array(
  array(
'w_pawn.gif','R'=>'w_castl.gif','N'=>'w_hors.gif',
         
'B'=>'w_elef.gif','Q'=>'w_queen.gif','K'=>'w_king.gif'),
  array(
'b_pawn.gif','R'=>'b_castl.gif','N'=>'b_hors.gif',
         
'B'=>'b_elef.gif','Q'=>'b_queen.gif','K'=>'b_king.gif')
);
//цвета шахматных клеток
$clear = array('ffffff','7f7f7f');
//отобразим четыре состояния партии
$ims imagecreatetruecolor($wch$wch*4);
//исходное состояние
$im imagecreatefromgif('chess.gif');
imagecopy($ims$im0000$wch$wch);
//партия
$part = array('c3 c5','Nb3 a5','Bb2 d4');
//выводим партию
$play 0//условно играют белые
for($i=0$i<count($part); $i++) {
  
$cour explode(' ',$part[$i]); //ход
  //получаем фигуру
  
$fig strlen($cour[0]) == $cour[0][0] : 0;
  
//получаем исходную клетку
  
$cour[0] = strlen($cour[0]) == substr($cour[0], 1) : $cour[0];
  
//номер клетки по Х, по маске младших разрядов
  
$Nx ord($cour[0][0])&15;
  
//номер клетки по Y
  
$Ny $cour[0][1];
  
//закрасим исходную клетку ее цветом,
  //для чего получим индекс цвета по номеру клетки,
  //получая таким образом четные и нечетные клетки доски
  
$cidx = ($Nx+$Ny-1)&1;
  
//получаем цвет клетки доски
  
$color imagecolorsforindex($imshexdec($clear[$cidx]));
  
$color imagecolorallocate ($im$color['red'], $color['green'], $color['blue']);
  
//получаем координаты клетки на доске
  
$X $H1 $side * ($Nx-1);
  
$Y $Y1 $side $Ny;
  
//закрашиваем исходную клетку на доске
  
imagefilledrectangle($im$X$Y$X+$side-1$Y+$side-1$color);
  
//получаем номера клетки хода и ее координаты
  
$Nx ord($cour[1][0])&15;
  
$Ny $cour[1][1];
  
$X $H1 $side * ($Nx-1);
  
$Y $Y1 $side $Ny;
  
//рисуем фигуру на доске
  
$imf imagecreatefromgif($figure[$play][$fig]);
  
imagecopy($im$imf$X$Y00$side$side);
  
imagecopy($ims$im0, ($i+1)*$wch00$wch$wch);
}
imagetruecolortopalette($imsfalse16);
header ("Content-type: image/gif");
imagegif($ims);
imagedestroy($ims);
imagedestroy($imf);
imagedestroy($im);

В примере используется доска размером 326х326рх с шириной бордюра 15рх. Размер клетки на доске 37х37рх. Изображения фигур, это gif-изображения под размер клетки (37х37) с прозрачностью. Имена изображений описывает массив фигур, в котором условно принято, что нулевой его индекс содержит белые фигуры. Ходы партий находятся в массиве, который обрабатываем и рисуем.

Что чему принадлежит в нотации, я не знаю, но если нужна реакция на один ход, значит и массива не надо, если же описать полностью состояние на доске, значит получить массив из нотации и... В общем суть в примере, а более точно, это уже конкретно по правилам нотации.

Результат примера в приложении (верхняя доска, это исходное положение).

  Ответить  
 
 автор: Trianon   (07.04.2010 в 11:05)   письмо автору
 
   для: sim5   (07.04.2010 в 09:19)
 

>Я просто заглянул в Вики, посмотрел краткую инфу об этом. Мне этого не надо (по крайней мере сейчас), поэтому я не вникал что к чему, кто там за белых, а кто за красных, почему вторая запись (Nc3 Nbd7) имеет четыре символа, и т.п...

Там же записи не статического размещения приводятся, а записи ходов.
Хотя и с учетом этого всё решается. Нужно только прогнать всю партию до требуемого хода.

  Ответить  
 
 автор: sim5   (07.04.2010 в 11:11)   письмо автору
 
   для: Trianon   (07.04.2010 в 11:05)
 

Суть проста - из записи извлечь фигуру и описание клетки, по описанию клетки получить ее номер, координаты. А уже конкретно что там к чему, это уже следуя правилам нотации, но это уже другой вопрос и меня он не касается.
Я понимаю, что это записи ходов, но что к чему и почему иногда так... в общем кому надо, пусть разбирается. ;-)

  Ответить  
 
 автор: root   (07.04.2010 в 18:29)   письмо автору
 
   для: sim5   (07.04.2010 в 11:11)
 

Nbd7 имеет четыре символа т.к. на клетку d7 могут прыгнуть оба черных коня, например с b8 и f6, а Nb просто говорит откуда конь :-)

  Ответить  
 
 автор: Trianon   (07.04.2010 в 21:17)   письмо автору
 
   для: root   (07.04.2010 в 18:29)
 

Что-то как-то неубедительно.
По-моему, на клетку d7 могут прыгнуть до восьми черных лошадей, две из которых могут стартовать с линии b (b8 и b6). И где тут раскрытие неоднозначности?

  Ответить  
 
 автор: root   (07.04.2010 в 23:37)   письмо автору
 
   для: Trianon   (07.04.2010 в 21:17)
 

>Что-то как-то неубедительно.
>По-моему, на клетку d7 могут прыгнуть до восьми черных лошадей, две из которых могут стартовать с линии b (b8 и b6). И где тут раскрытие неоднозначности?

На клетку d7 могут прыгнуть максимум 6 коней, хотя обычно коней одного цвета на доске не больше двух.
В случае если кони стояли бы на b8 и b6, запись имела бы вид Nb8d7, во всяком случае, я бы так записал ход.
Дополнительные координаты добавляются по мере необходимости.
А вообще такой такой нотацией пользуются чаще на турнирах, в книгах обычно нотация полная т.е - Nb8-d7

  Ответить  
 
 автор: Trianon   (08.04.2010 в 00:31)   письмо автору
 
   для: root   (07.04.2010 в 23:37)
 

ну да. с 9 горизонталью это я увлекся. :)

  Ответить  
 
 автор: sim5   (08.04.2010 в 02:32)   письмо автору
 
   для: root   (07.04.2010 в 18:29)
 

Странная какая-то нотация тогда получается, если описывает не ход, а возможности доски шахматной. Конь имеет обозначение N, клетка нумерацию по литере и цифре, шахматист делает ход одной фигурой (конем), получается или Nb7 -> куда-то или....

  Ответить  
 
 автор: Yaroslav   (07.04.2010 в 17:17)   письмо автору
 
   для: sim5   (07.04.2010 в 09:19)
 

Большое спасибо за труд и т.д и всем кто отписался в этой теме

  Ответить  
 
 автор: Loki   (07.04.2010 в 16:33)   письмо автору
 
   для: Yaroslav   (05.04.2010 в 10:43)
 

на css?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования