Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 71 additions & 1 deletion 05week/checkers.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,17 @@ const rl = readline.createInterface({
});


function Checker() {
function Checker( color ) {
// Your code here
// color = 'white' ? this.symbol = String.fromCharCode(0x125CB) : this.symbol = String.fromCharCode(0x125CF);
if( color == 'white' ) this.symbol = String.fromCharCode(0x125CF)
else this.symbol = String.fromCharCode(0x125CB);
}

class Board {
constructor() {
this.grid = []
this.checkers = []
}
// method that creates an 8x8 array, filled with null values
createGrid() {
Expand Down Expand Up @@ -53,6 +57,36 @@ class Board {
}

// Your code here
createCheckers() {
// pieces are either black or white
let whitePosition = [
[0, 1], [0, 3], [0, 5], [0, 7],
[1, 0], [1, 2], [1, 4], [1, 6],
[2, 1], [2, 3], [2, 5], [2, 7]
];

let blackPosition = [
[5, 0], [5, 2], [5, 4], [5, 6],
[6, 1], [6, 3], [6, 5], [6, 7],
[7, 0], [7, 2], [7, 4], [7, 6]
];

for( let i = 0; i < 12; i++ ) {
let whiteChecker = new Checker( 'white' );
let whiteRow = whitePosition[i][0];
let whiteColumn = whitePosition[i][1];
this.checkers.push(whiteChecker);
this.grid[whiteRow][whiteColumn] = whiteChecker;
}

for( let i = 0; i < 12; i++ ) {
let blackChecker = new Checker( 'black' );
let blackRow = blackPosition[i][0];
let blackColumn = blackPosition[i][1];
this.checkers.push(blackChecker);
this.grid[blackRow][blackColumn] = blackChecker;
}
}
}

class Game {
Expand All @@ -61,7 +95,43 @@ class Game {
}
start() {
this.board.createGrid();
this.board.createCheckers();
}

moveChecker( start, end ) {
let startRow = parseInt(start[0]);
let startColumn = parseInt(start[1]);
let endRow = parseInt(end[0]);
let endColumn = parseInt(end[1]);

if( isValidInput(startRow, startColumn, endRow, endColumn) && isLegal(startRow, startColumn, endRow, endColumn) ) {
this.board.grid[endRow][endColumn] = this.board.grid[startRow][startColumn];
this.board.grid[startRow][startColumn] = null;

if( Math.abs(endRow - startRow) == 2 ) {
let killedRow = endRow - startRow > 0 ? startRow + 1 : endRow + 1;
let killedColumn = endColumn - startColumn > 0 ? startColumn + 1 : endColumn + 1;

this.board.grid[killedRow][killedColumn] = null;
let removeChecker = this.board.checkers.indexOf( this.board.grid[killedRow][killedColumn] );
this.board.checkers.splice( removeChecker, 1 );
}
}
else console.log( 'Try again with a legal move.' );
}
}

let isValidInput = function( startRow, startColumn, endRow, endColumn ) {
let validStart = ( startRow >= 0 && startRow <=8 ) && ( startColumn >= 0 && startColumn <= 8 );
let validEnd = ( endRow >= 0 && endRow <= 8 ) && ( endColumn >= 0 && endColumn <= 8 );
return ( validStart && validEnd );
}

let isLegal = function( startRow, startColumn, endRow, endColumn ) {
let rowDifference = Math.abs( endRow - startRow );
let columnDifference = Math.abs( endColumn - startColumn );
if( (rowDifference == 1 && columnDifference == 1) || (rowDifference == 2 && columnDifference == 2) ) return true;
else return false;
}

function getPrompt() {
Expand Down