13.01.2016, 18:11
|
Аспирант
|
|
Регистрация: 13.01.2016
Сообщений: 57
|
|
Сообщение от laimas
|
Не так, если обрамлять тегом, должно быть так:
<span id="pgn"><span>1. <a>Ход 1 игрока</a> <a>Ход 2 игрока</a></span></span>
тогда
$('#pgn span').click(function() {
var a = $(this).children();
a.first().text() - ход первого игрока
a.last().text() - ход второго игрока
})
|
хотел посмотреть как работает, сделал так:
$('#pgn span').on('click', function(){
var a = $(this).children();
a.first().text();
a.last().text();
console.log(a.first().text());
});
ничего консоль не показывает
обромление:
<span id="pgn"><span>1. <a href="#">e3</a> <a href="#">c6</a> </span><span>2. <a href="#">b4</a> <a href="#">a6</a></span></span>
|
|
13.01.2016, 18:18
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
a.first().text();
a.last().text();
Это я написал как получить
а передавать:
board.move(a.first().text(), a.last().text());
если правильно помнится имя функции.
Без обрамления типа такого:
var plH = $('#pgn a').click(function() {
var a = $(this), i = plH.index(a) & 1, f = i ? a.prev() : a, s = i ? a : a.next();
board.move(f.text()+' '+s.text())
})
Но как быть, если второй игрок не сделал хода, делать ход по истории или нет, в документации почитать или просто проверить поведение board.move() в этом случае.
Ну и к тому же нужно не только этот ход восстановить, но и те что сделаны за ним. Тоже в документации поискать, может это уже решаемо методами, иначе по индексу определять шаг истории и воспроизвести нотацию начиная с этого шага.
Последний раз редактировалось laimas, 13.01.2016 в 18:32.
|
|
13.01.2016, 18:21
|
Аспирант
|
|
Регистрация: 13.01.2016
Сообщений: 57
|
|
это понятно, но разве то что он получил, не должен был выводить в консоль?
|
|
13.01.2016, 18:30
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
$(function() {
$('#pgn span').on('click', function(){
var a = $(this).children();
alert(a.first().text() +' '+ a.last().text());
});
});
</script>
</head>
<body>
<span id="pgn"><span>1. <a href="#">e3</a> <a href="#">c6</a> </span><span>2. <a href="#">b4</a> <a href="#">a6</a></span></span>
</body>
</html>
И не должно быть проблем, если ошибок не допущено.
|
|
13.01.2016, 19:12
|
Аспирант
|
|
Регистрация: 13.01.2016
Сообщений: 57
|
|
Сообщение от laimas
|
[HTML run]<html>
И не должно быть проблем, если ошибок не допущено.
|
дело в том, что когда я запускаю ничего не происходит, возможно из-за динамического добавления этих ходов, если как вы показали, заранее "просто прописать" эти ходы, то все работает
|
|
13.01.2016, 19:31
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
diga,
мысли вслух
добавить заменить файл chess.js функция pgn
строки 1, 2, 3 добавить строку 4 изменить
var dt_move = [make_pretty(move).from + '-' + make_pretty(move).to];
var temp = reversed_history.slice(-1);
if(temp.length) dt_move.push(make_pretty(temp[0]).from + '-' + make_pretty(temp[0]).to);
move_string = '</a>'+pgn_move_number + '.'+'<a href="#" data-move="'+dt_move+'">';
файл common.js строки 7-11 добавить
//--- start ---
var board,
game = new Chess(),
statusEl = $('#status'),
fenEl = $('#fen'),
pgnEl = $('#pgn');
pgnEl.on('click', 'a',function(event) {
event.preventDefault();
var data = $(this).data('move').split(',')
board.move.apply(null,data);
})
сделать несколько ходов - нажать New game
нажимать последовательно ходы с 1 .
Последний раз редактировалось рони, 13.01.2016 в 19:34.
|
|
13.01.2016, 19:47
|
Аспирант
|
|
Регистрация: 13.01.2016
Сообщений: 57
|
|
Сообщение от рони
|
diga,
добавить заменить файл chess.js
|
не мог бы ты залить chess.js? я заменил как ты сказал, но вышло не как у тебя
|
|
13.01.2016, 19:50
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
diga,
изменения только тут
/* build the list of moves. a move_string looks like: "3. e3 e6" */
while (reversed_history.length > 0) {
var move = reversed_history.pop();
/* if the position started with black to move, start PGN with 1. ... */
if (pgn_move_number === 1 && move.color === 'b') {
move_string = '1. ...';
pgn_move_number++;
} else if (move.color === 'w') {
/* store the previous generated move_string if we have one */
if (move_string.length) {
moves.push(move_string);
}
//move_string = pgn_move_number + '.';
//move_string = '</li><li>' + pgn_move_number + ')';
var dt_move = [make_pretty(move).from + '-' + make_pretty(move).to];
var temp = reversed_history.slice(-1);
if(temp.length) dt_move.push(make_pretty(temp[0]).from + '-' + make_pretty(temp[0]).to);
move_string = '</a>'+pgn_move_number + '.'+'<a href="#" data-move="'+dt_move+'">';
pgn_move_number++;
}
move_string = move_string + ' ' + move_to_san(move);
make_move(move);
}
/* are there any other leftover moves? */
|
|
13.01.2016, 19:57
|
Аспирант
|
|
Регистрация: 13.01.2016
Сообщений: 57
|
|
ты гений , почти то, что надо, за исключением того, что желательно отображения хода в любой момент нажатия, не именно с начальной позиции и с учетом всех предыдущих ходов сделанных до хода на которую нажали. Т.е. если нажму на ход который находится где то в середине всех ходов, отображались все хода сделанные до данного, но не отображались которые сделаны после )
|
|
13.01.2016, 20:00
|
Аспирант
|
|
Регистрация: 13.01.2016
Сообщений: 57
|
|
Сообщение от рони
|
diga,
изменения только тут
|
ты однако интересно сделал, я бы не додумался, я уж думал можно нибудь типо такого:
завести массив где будут хранится все нотации для каждого хода.
при нажатии из истории ходов находить какой ход по номеру сделан, т.е. индекс
по данному индексу смотреть какая нотация соответствует и вызывать функцию с данной нотацией которая показывает расположение фигур
|
|
|
|