You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

172 lines
3.8 KiB

/*
W = Player one basic piece
V = Player one queen piece
B = Player two basic piece
P = Player two queen piece
*/
pieceList = new Array();
currentPlayer = "white";
function generateDefaultPositions(){
var id = 0;
for (let i = 0; i < 8; i++) {
for (let j = 0; j < 3; j++) {
if((i+j) % 2 == 0){
pieceRecord = {id:id, x:i, y:j, player:"white", type:"basic"};
pieceList.push(pieceRecord);
id++;
}
}
}
for (let i = 0; i < 8; i++) {
for (let j = 5; j < 8; j++) {
if((i+j) % 2 == 0){
pieceRecord = {id:id, x:i, y:j, player:"black", type:"basic"};
pieceList.push(pieceRecord);
id++;
}
}
}
}
function getPieceRecord(x,y){
return pieceList.find(pieceRecord => pieceRecord.x == x && pieceRecord.y == y);
}
function nukePieceRecord(pieceRecord) {
const index = pieceList.findIndex(record => record.id == pieceRecord.id);
pieceList.splice(index, 1);
}
function updatePieceRecord(pieceRecord) {
const index = pieceList.findIndex(record => record.id == pieceRecord.id);
pieceList[index] = pieceRecord;
}
function updatePieceRecordPosition(pieceRecord, x, y) {
pieceRecord.x = x;
pieceRecord.y = y;
updatePieceRecord(pieceRecord);
}
function isMoveValid(pieceRecord, x, y){
if(0 > y > 7 || 0 > x > 7){
return false;
}
if (getPieceRecord(x,y)) {
return false;
}
const currentX = pieceRecord.x;
const currentY = pieceRecord.y;
if (Math.abs(y - currentY) != Math.abs(x - currentX)) {
return false;
}
const player = pieceRecord.player;
const type = pieceRecord.type;
//Check correct Y direction if piece is basic
if (currentY > y && player == "white" && type == "basic") {
return false;
}
const directionY = (y > currentY) ? 1 : -1;
const directionX = (x > currentX) ? 1 : -1;
space = 0;
piecesInWay = 0;
for (let i = 1; i < (Math.abs(y-currentY)+1); i++) {
const nowX = currentX + (i*directionX);
const nowY = currentY + (i*directionY);
if (getPieceRecord(nowX, nowY)) {
space = 0;
piecesInWay++;
}else{
space++;
piecesInWay = 0;
}
if(piecesInWay > 1){
return false;
}
if (space > 1 && type == "basic") {
return false;
}
}
return true;
}
function getCasualties(oldX, oldY, newX, newY) {
const directionX = (newX > oldX) ? 1 : -1;
const directionY = (newY > oldY) ? 1 : -1;
const casualties = new Array();
for (let i = 1; i < (Math.abs(newY - oldY) + 1); i++) {
const x = oldX + (i*directionX);
const y = oldY + (i*directionY);
pieceRecord = getPieceRecord(x,y);
if (pieceRecord) {
casualties.put(pieceRecord);
}
}
return casualties;
}
function canContinue(pieceRecord){
const x = pieceRecord.x;
const y = pieceRecord.y;
const player = pieceRecord.player;
const type = pieceRecord.type;
if((type == "queen" || player == "white") && (getCasualties(x+1, y+1, x+2, y+2).count() == 1 || getCasualties(x-1, y+1, x-2, y+2).count() == 1)){
return true;
}
if((type == "queen" || player == "black") && (getCasualties(x+1, y-1, x+2, y-2).count() == 1 || getCasualties(x-1, y-1, x-2, y-2).count() == 1)){
return true;
}
return false;
}
function swapPlayers() {
}
function makeMove(pieceRecord, x, y){
if (!isMoveValid(pieceRecord, x, y)) {
return false;
}
const casualties = getCasualties();
while (condition) {
}
}
generateDefaultPositions();