js_backgammon/func.js

273 lines
6.6 KiB
JavaScript
Raw Normal View History

2018-05-18 18:53:45 +00:00
var prev_board = []
2018-05-17 22:49:54 +00:00
2018-05-18 18:53:45 +00:00
$(function () {
2018-05-19 20:01:27 +00:00
var init_board = [0, 2, 0, 0, 0, 0, -5, 0, -3, 0, 0, 0, 5, -5, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, -2, 0];
2018-05-19 19:05:03 +00:00
// var init_board = [0,2,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
const red = "#E83D04"
const white = "#E8E077"
const brown = "#4C2E00"
2018-05-18 18:53:45 +00:00
var prev_board = []
var color = white;
2018-05-18 14:53:23 +00:00
2018-05-18 15:53:57 +00:00
2018-05-19 20:01:27 +00:00
var quad = false;
// var roll = [Math.floor(Math.random() * 6)+1, Math.floor(Math.random() * 6)+1]
var roll = [1,3];
var total_roll = roll[0] + roll[1];
if (roll[0] == roll[1]) {
total_roll = roll[0] * 4;
roll = [roll[0], roll[0], roll[0], roll[0]];
quad = true;
}
console.log("Initial roll:");
console.log(roll);
// Build pins
2018-05-18 15:53:57 +00:00
for (var i = 0; i < 26; i++) {
2018-05-19 19:05:03 +00:00
if (i < 13 && 0 < i) {
var pos = 'bottom';
} else if (i > 12 && i < 25) {
var pos = 'top';
} else {
var pos = 'bar';
}
2018-05-18 15:53:57 +00:00
2018-05-19 19:05:03 +00:00
if (color == white) {
color = red;
} else {
color = white;
}
2018-05-18 15:53:57 +00:00
2018-05-19 19:05:03 +00:00
if (i == 0 || i == 25) {
color = brown;
}
2018-05-18 14:53:23 +00:00
2018-05-19 19:05:03 +00:00
var div = $("<div style='background-color:"+color+"'/>").addClass("pin").addClass("pin-"+pos).attr('id', 'pin-'+i);
2018-05-18 14:53:23 +00:00
2018-05-19 19:05:03 +00:00
var checkers_div = $("<div />").addClass("checkers").attr('id', 'checkers-'+i);
var checkers_list = $("<ul />").addClass("checkers_list").attr('id', 'checkers_list-'+i).attr('pinId', i);
2018-05-17 22:49:54 +00:00
2018-05-19 19:05:03 +00:00
checkers_div.append(checkers_list);
div.append(checkers_div);
$( "#pins" ).append(div);
}
2018-05-17 22:49:54 +00:00
2018-05-18 18:53:45 +00:00
var div = $("<div style='background-color:black'/>").addClass("pin").addClass("pin-26").attr('id', 'pin-26');
var checkers_div = $("<div />").addClass("checkers").attr('id', 'checkers-26');
2018-05-19 19:05:03 +00:00
var checkers_list = $("<ul />").addClass("checkers_list").attr('id', 'checkers_list-26').attr('pinId', 26);
2018-05-18 18:53:45 +00:00
checkers_div.append(checkers_list);
div.append(checkers_div);
$( "#pins" ).append(div);
convertToPins(init_board);
prev_board = convertToBoard();
2018-05-18 14:53:23 +00:00
$( ".checkers_list" ).sortable({
2018-05-19 19:05:03 +00:00
connectWith: ".checkers_list",
receive: function (event, ui) {
2018-05-19 12:10:31 +00:00
2018-05-19 19:05:03 +00:00
// Handle putting people on the bar correclty and getting off it.
// Something like look at the index you drop the checker at
2018-05-19 12:10:31 +00:00
2018-05-19 19:05:03 +00:00
var toIdx = event.target.attributes.pinId.value;
var fromIdx = ui.sender.attr("pinId");
console.log(fromIdx);
console.log(toIdx);
if (toIdx < 26) {
var cloned_board = prev_board.slice();
var sign = Math.sign(cloned_board[fromIdx]);
// if bar stuff has to be handled
if (cloned_board[toIdx] * sign == -1) {
// Lift checker
cloned_board[fromIdx] += -(sign);
// Check where the opponents bar is
if (sign == -1) {
cloned_board[0] += -(sign);
} else {
cloned_board[25] += -(sign);
}
// flip the piece at target index
cloned_board[toIdx] *= -1
// Load the board into the pins
convertToPins(cloned_board);
}
}
board = convertToBoard();
console.log("board!!!!");
console.log(board);
2018-05-19 20:01:27 +00:00
var data_stuff = handleMove(prev_board, board, roll, total_roll);
prev_board = data_stuff['board'];
roll = data_stuff['roll'];
total_roll = data_stuff['total_roll'];
2018-05-19 19:05:03 +00:00
convertToPins(prev_board);
2018-05-19 20:01:27 +00:00
if (total_roll == 0) {
if (board != convertToBoard()) {
prev_board = getBotMove(prev_board);
convertToPins(prev_board);
roll = [Math.floor(Math.random() * 6)+1, Math.floor(Math.random() * 6)+1]
total_roll = roll[0] + roll[1]
if (roll[0] == roll[1]) {
total_roll = roll[0] * 4;
roll = [roll[0], roll[0], roll[0], roll[0]]
quad = true;
}
}
}
2018-05-19 19:05:03 +00:00
}
});
2018-05-17 22:49:54 +00:00
});
2018-05-19 20:01:27 +00:00
function handleMove(prev_board, board, roll, total_roll) {
var data = postRequest(prev_board, board, roll, total_roll);
var new_board = data['board'];
total_roll = data['total_roll'];
roll = data['roll'];
var test = [];
2018-05-19 19:05:03 +00:00
for (var i = 0; i<26; i++) {
test.push(parseInt(new_board[i]));
}
2018-05-19 20:01:27 +00:00
return {'board': test, 'total_roll': total_roll, 'roll': roll};
2018-05-18 18:53:45 +00:00
};
2018-05-17 22:49:54 +00:00
function convertToBoard() {
2018-05-18 18:53:45 +00:00
var board = []
2018-05-17 22:49:54 +00:00
2018-05-18 18:53:45 +00:00
for (var i = 0; i < 26; i++) {
2018-05-19 19:05:03 +00:00
var amount = $( "#checkers_list-"+i ).children('li').length;
if (amount != 0) {
var sign = ($("#checkers_list-"+i+"> li").attr('class').split(' ')[0]);
if (i == 21) {
console.log(amount)
console.log(sign)
}
board.push(sign*amount);
} else {
board.push(0);
}
2018-05-17 22:49:54 +00:00
2018-05-19 19:05:03 +00:00
}
console.log("The built board");
console.log(board);
2018-05-18 18:53:45 +00:00
return board
2018-05-17 22:49:54 +00:00
}
2018-05-19 12:10:31 +00:00
function emptyLists() {
2018-05-19 19:05:03 +00:00
for (var i=0; i < 27; i++) {
$( '#checkers_list-'+i ).empty();
2018-05-19 12:10:31 +00:00
}
}
2018-05-18 18:53:45 +00:00
function convertToPins(board ) {
2018-05-19 12:10:31 +00:00
console.log(board);
2018-05-18 18:53:45 +00:00
2018-05-19 12:10:31 +00:00
emptyLists();
for (var i = 0; i < 26; i++) {
var tmp = parseInt(board[i]);
for (var amt_at_pin = 0; amt_at_pin < Math.abs(tmp); amt_at_pin++) {
var sign = Math.sign(tmp);
2018-05-17 22:49:54 +00:00
if (sign > 0) {
2018-05-19 12:10:31 +00:00
var list_obj = $( "<li><img src='black.png' width='40'></li>").addClass(Math.sign(tmp).toString());
2018-05-17 22:49:54 +00:00
} else if (sign < 0) {
2018-05-19 12:10:31 +00:00
var list_obj = $( "<li><img src='white.png' width='40'></li>").addClass(Math.sign(tmp).toString());
2018-05-17 22:49:54 +00:00
}
$( '#checkers_list-'+i ).append(list_obj);
}
}
};
function onReceived(data) {
2018-05-19 12:10:31 +00:00
var obj = JSON.parse(JSON.stringify(data));
alert(obj['board']);
};
function getBotMove(board) {
var data = {'board' : board.toString()}
var result = "";
$.ajax({
type : "POST",
async: false,
url : "http://127.0.0.1:5000/bot_move",
data: JSON.stringify(data),
success: function(data) {
result = data;
}
});
return result.split(',');
2018-05-17 22:49:54 +00:00
};
2018-05-19 12:10:31 +00:00
2018-05-18 18:53:45 +00:00
function getRequest() {
2018-05-17 22:49:54 +00:00
$.ajax({
2018-05-18 14:53:23 +00:00
url: 'http://127.0.0.1:5000/get_board',
2018-05-19 12:10:31 +00:00
async: false,
2018-05-17 22:49:54 +00:00
dataType: 'JSONP',
data: {
format: 'json'
},
type: 'GET',
success: onReceived
});
};
function onPost(data) {
console.log(data);
};
2018-05-19 20:01:27 +00:00
function postRequest(prev_board, board, roll, total_roll) {
2018-05-19 12:10:31 +00:00
console.log(prev_board);
var result = "";
2018-05-19 20:01:27 +00:00
var data = {'board' : board.toString(), 'prev_board': prev_board.toString(), 'roll': roll.toString(), 'total_roll': total_roll.toString()}
2018-05-17 22:49:54 +00:00
$.ajax({
type : "POST",
2018-05-19 12:10:31 +00:00
async: false,
2018-05-18 14:53:23 +00:00
url : "http://127.0.0.1:5000/post_board",
2018-05-17 22:49:54 +00:00
data: JSON.stringify(data),
2018-05-19 12:10:31 +00:00
success: function(data) {
result = data;
}
2018-05-17 22:49:54 +00:00
});
2018-05-19 12:10:31 +00:00
console.log(result);
2018-05-19 20:01:27 +00:00
var split_result = result.split("#");
return {'board': split_result[0].split(","),'total_roll': split_result[1], 'roll': split_result[2].split(",")};
2018-05-17 22:49:54 +00:00
};