diff --git a/05week/checkers.js b/05week/checkers.js index 15d9953d1..789d563e6 100644 --- a/05week/checkers.js +++ b/05week/checkers.js @@ -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() { @@ -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 { @@ -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() {