Skip to content

Instantly share code, notes, and snippets.

View JeffML's full-sized avatar
🏠
Barely working

Jeff Lowery JeffML

🏠
Barely working
View GitHub Profile
var Ba1 = new ChessPiece('Ba1');
seneca.act({
role: "movement",
cmd: "rawMoves",
piece: Ba1
}, (err, msg) => {...});
module.exports = function specialMovement(options) {
//...
this.add({
role: "movement",
cmd: "rawMoves",
isPawn: true
}, (msg, reply) => {
if (msg.piece.piece !== 'P') {
return ("piece was not a pawn")
}
this.add({
role: "movement",
cmd: "legalSquares",
}, (msg, reply) => {
const isPawn = msg.piece.piece === 'P';
const isKnight = msg.piece.piece === 'N';
this.act({
role: "movement",
cmd: "rawMoves",
@JeffML
JeffML / diagonalMoves.js
Created June 14, 2017 19:16
calculating diagonal moves with friendly blockers
// m: proposed move
// blockers: blocking pieces
// pp: current piece position
function diagonalChecks(m, blockers, pp) {
let isGood = true;
for (const b of blockers) {
if (b.rank > pp.rank && b.file > pp.file) {
if (m.rank > pp.rank && m.file > pp.file) {
isGood = isGood && (m.rank < b.rank && m.file < b.file);
}
@JeffML
JeffML / legalMovesWithBoard.js
Last active July 16, 2017 21:59
Legal moves based on moveVectors
module.exports = function (boardAndPiece, candidateMoves) {
if (!boardAndPiece.board) return candidateMoves;
const rangeChecks = {
B: vectorChecks,
R: vectorChecks,
K: vectorChecks,
Q: vectorChecks,
P: pawnChecks,
N: knightChecks
@JeffML
JeffML / knightMoves.js
Created July 16, 2017 22:33
method used to determine knight moves on a chess board
function knightChecks(boardAndPiece, candidateMoves) {
const newMoves = [];
for (const m of candidateMoves.moves) {
const p = boardAndPiece.board.pieceAt(m)
if (!p) {
newMoves.push(m)
} else if (p.color !== boardAndPiece.piece.color) {
m.hasCaptured = p;
newMoves.push(m)
@JeffML
JeffML / legalMovesUsingMoveVectors.js
Created July 16, 2017 22:41
chess micro service example
const legalMovesWithBoard = require("./helpers/legalMovesWithBoard")
//...
this.add('role:movement,cmd:legalMoves', function (msg, reply) {
this.prior(msg, function (err, result) {
if (msg.board) {
const result2 = legalMovesWithBoard(msg, result);
//...
@JeffML
JeffML / LegalMoves2.js
Created July 16, 2017 23:18
Second legalMoves service
this.add('role:movement,cmd:legalMoves', function (msg, reply) {
this.prior(msg, function (err, result) {
if (msg.board) {
const result2 = legalMovesWithBoard(msg, result);
if (msg.piece.piece === 'K') {
legalMovesWithKing.call(this, msg, result2, reply)
} else {
reply(err, result2);
}
} else {
@JeffML
JeffML / legalMovesWithKing.js
Last active July 16, 2017 23:29
king moves helper method
module.exports = function (boardAndPiece, candidateMoves, reply) {
const opposingColor = boardAndPiece.piece.color === 'W' ? 'black' : 'white';
//temporarily remove the K to avoid cycles
boardAndPiece.board.removePiece(boardAndPiece.piece);
function canCastle(king, rook, intervening, opposing) {
// console.log("canCastle", arguments)
const opposingControlled = [...opposing.controlled]
@JeffML
JeffML / SquareControl.js
Created July 16, 2017 23:33
service to determine chess square controlled by one side
module.exports = function squareControl() {
const getSquaresControlledBy = (board, pieceColor) => {
var pieces = board.boardPieces[pieceColor];
const promises = pieces.map(p =>
new Promise(resolve => {
this.act({
role: "movement",
cmd: "legalMoves",
piece: p,