// TODO: Make this configurable.
var practice_top_moves_limit = 5;
var practice_minimum_move_fraction_start = 0.05;
-var practice_minimum_move_fraction_move10 = 0.30;
+var practice_minimum_move_fraction_move5 = 0.30;
var entity_map = {
"&": "&",
";includetransp=0"
}).done(function(data, textstatus, xhr) {
var moves = data['moves'];
- var root_move = sort_moves_by_common(moves, data);
+ var root_move = sort_move_by_frequency(moves, data);
var your_move, your_index;
for (var i = 0; i < moves.length; ++i) {
your_index = i;
}
}
- moves.sort(function(a, b) { return b['num'] - a['num'] });
if (your_move) {
$("#yourfraction").text(format_fraction(your_move['fraction']));
});
}
+var candidate_moves = [];
+var chosen_index = null;
+
var find_computer_move = function() {
var fen = current_display_fen();
$.ajax({
url: "/opening-stats.pl?fen=" + encodeURIComponent(fen) + ";includetransp=0"
}).done(function(data, textstatus, xhr) {
- var candidate_moves = [];
+ candidate_moves = [];
var moves = data['moves'];
- var root_move = sort_moves_by_common(moves, data);
+ var root_move = sort_move_by_frequency(moves, data);
var practice_minimum_move_fraction;
if (move_override > 20) {
- practice_minimum_move_fraction = practice_minimum_move_fraction_move10;
+ practice_minimum_move_fraction = practice_minimum_move_fraction_move5;
} else {
practice_minimum_move_fraction = practice_minimum_move_fraction_start +
- ((move_override-1)/20.0) * (practice_minimum_move_fraction_move10 - practice_minimum_move_fraction_start);
+ ((move_override-1)/10.0) * (practice_minimum_move_fraction_move5 - practice_minimum_move_fraction_start);
}
console.log(practice_minimum_move_fraction);
}
// Pick one at random.
- var chosen_index = Math.floor(Math.random() * candidate_moves.length);
- var chosen = candidate_moves[chosen_index];
- $("#compmove").text(chosen['move']);
- $("#compfraction").text((100.0 * chosen['fraction']).toFixed(1) + "%");
- if (candidate_moves.length == 1) {
- $("#comprank").text("only candidate move");
- } else {
- $("#comprank").text(format_ordinal(chosen_index + 1) + " out of " + candidate_moves.length + " candidate moves");
- }
- make_move(chosen['move']);
+ choose_move(Math.floor(Math.random() * candidate_moves.length));
});
}
+var choose_move = function(idx) {
+ chosen_index = idx;
+ var chosen = candidate_moves[chosen_index];
+ $("#compmove").text(chosen['move']);
+ $("#compfraction").text((100.0 * chosen['fraction']).toFixed(1) + "%");
+ if (candidate_moves.length == 1) {
+ $("#comprank").text("only candidate move");
+ } else {
+ $("#comprank").text(format_ordinal(chosen_index + 1) + " out of " + candidate_moves.length + " candidate moves, j/k to switch");
+ }
+ make_move(chosen['move']);
+}
+
+var prev_variant = function() {
+ if (chosen_index !== null) {
+ --move_override;
+ choose_move((chosen_index + candidate_moves.length - 1) % candidate_moves.length);
+ }
+}
+
+var next_variant = function() {
+ if (chosen_index !== null) {
+ --move_override;
+ choose_move((chosen_index + 1) % candidate_moves.length);
+ }
+}
+
// Add deried data and then sort moves to get the most common ones (in-place).
// Remove the root mode and return it. Currently usable for practice mode only!
-var sort_moves_by_common = function(moves, data)
+var sort_move_by_frequency = function(moves, data)
{
var total_num = find_total_games(moves);
var root_move;
$("#stats").hide();
$("#practiceoutput").show();
document.getElementById("includetransp").checked = false;
+ set_includetransp(false);
} else {
$("#stats").show();
$("#practiceoutput").hide();
next_move();
} else if (event.which == 37) {
prev_move();
+ } else if (event.which == 74) { // j
+ if (practice_mode) next_variant();
+ } else if (event.which == 75) { // k
+ if (practice_mode) prev_variant();
}
});