JSFiddle - React, Tailwind, and code Playground
by Svetlana Kovba
HTML
<script src="http://premium-api.com/jscourse/rb_plain.js"></script>
<div>Turn: <span id="whoseTurn"></span>
Game score: <span id="score"></span>
</div>
CSS
span#whoseTurn {
width: 100px;
display: inline-block;
}
JavaScript
// global namespace
var Reversi = Reversi || {
EMPTY_TYPE: 'e',
BLACK_TYPE: 'b',
WHITE_TYPE: 'w',
BOARD_SIZE: 8
};
Reversi.Game = {
blackPlayer: "John",
whitePlayer: "James",
isMoveBlack: true,
start: function () {
// catch user moves
Reversi.Board.cbClick = this.moveCallback;
// draw board start position
Reversi.Board.init();
Reversi.Board.drawBoard();
Reversi.Board.drawAllDisks();
this.updateIndicators();
},
getIndexesColRow: function (index) {
return {
iCol: index % Reversi.BOARD_SIZE,
iRow: Math.floor(index / Reversi.BOARD_SIZE)
}
},
findDiskToFlip: function (moveIndex, type) {
var flipDisks = [];
var startPosition = this.getIndexesColRow(moveIndex);
// find to left, to right, to top, to bottom, to left-top, to right-top, to left-bottom and to right-bottom
for (var h = -1; h <= 1; h++) {
for (var v = -1; v <= 1; v++) {
if (h == 0 && v == 0) {
continue;
}
var iCol = startPosition.iCol;
var iRow = startPosition.iRow;
//console.log(startPosition);
var tryNext = true;
var lineFlips = [];
while (tryNext) {
iCol += h;
iRow += v;
// check limits
if (iCol < 0 || iCol > Reversi.BOARD_SIZE - 1 || iRow < 0 || iRow > Reversi.BOARD_SIZE - 1) {
break;
}
var index = iRow * Reversi.BOARD_SIZE + iCol;
var cell = Reversi.Board.getCell(index);
if (cell.isOpposite(type)) {
lineFlips.push(cell);
} else {
if (!cell.isEmpty() && lineFlips.length > 0) {
// we have found disks...