diff --git a/web/css/styles.css b/web/css/styles.css index d139ed5..74ae2fe 100644 --- a/web/css/styles.css +++ b/web/css/styles.css @@ -8,7 +8,17 @@ text-align: center; } -#gamePanel {} +.game { + display: flex; + flex-wrap: wrap; +} +.game #gamePanel { + flex: 0 50%; +} +.game .overview { + flex: 0 50%; +} + #gamePanel .field { display:inline-block; } @@ -58,4 +68,10 @@ } #gamePanel .field.field.possibleMove:hover { background-color: rgba(100, 170,20, 0.8); +} +#gamePanel .field.possibleMove.match { + background-color: rgba(255, 37, 37, 0.6); +} +#gamePanel .field.possibleMove.match:hover { + background-color: rgba(255, 0, 0, 0.6); } \ No newline at end of file diff --git a/web/index.html b/web/index.html index 2ca4a33..5c9c674 100644 --- a/web/index.html +++ b/web/index.html @@ -1,5 +1,6 @@ - + + Shogun @@ -7,14 +8,24 @@

S H O G U N

-
- +
+
+ +
+
+
+
    +
    +
    +
      +
      +
      diff --git a/web/js/game.js b/web/js/game.js index 99c8329..bfe0bb7 100644 --- a/web/js/game.js +++ b/web/js/game.js @@ -18,22 +18,37 @@ class Figure { getPosition() { return new Array(parseInt(this.x), parseInt(this.y)); } + reset() { + this.x = 0; + this.y = 0; + } +} + +class Field { + constructor(x,y) { + this.x = x; + this.y = y; + } } class Game { constructor() { this.whitePlayer = new Player('white'); this.blackPlayer = new Player('black'); this.chosenFigure = new Figure(0,0); + this.fields = []; } drawGamePanel(x,y, widthAndHeight) { var boxes = new Array(); for(var i=0; i 8 || y < 1 || y > 8) { + return false; + } + return true; + } switch(possibleMoves) { case 1: - possibleTargets[1] = new Array(x+possibleMoves, y); - possibleTargets[2] = new Array(x, y+possibleMoves); - possibleTargets[3] = new Array(x-possibleMoves, y); - possibleTargets[4] = new Array(x, y-1); + possibleTargets.add([x+possibleMoves, y]); + possibleTargets.add(new Array(x, y+possibleMoves)); + possibleTargets.add(new Array(x-possibleMoves, y)); + possibleTargets.add(new Array(x, y-1)); break; case 2: - possibleTargets[1] = new Array(x+possibleMoves, y); - possibleTargets[2] = new Array(x, y+possibleMoves); - possibleTargets[3] = new Array(x-possibleMoves, y); - possibleTargets[4] = new Array(x, y-possibleMoves); + possibleTargets.add(new Array(x+possibleMoves, y)); + possibleTargets.add(new Array(x, y+possibleMoves)); + possibleTargets.add(new Array(x-possibleMoves, y)); + possibleTargets.add(new Array(x, y-possibleMoves)); - possibleTargets[5] = new Array(x+1, y+1); - possibleTargets[6] = new Array(x-1,y-1); - possibleTargets[7] = new Array(x+1,y-1); - possibleTargets[8] = new Array(x-1, y+1); + possibleTargets.add(new Array(x+1, y+1)); + possibleTargets.add(new Array(x-1,y-1)); + possibleTargets.add(new Array(x+1,y-1)); + possibleTargets.add(new Array(x-1, y+1)); break; case 3: - possibleTargets[1] = new Array(x+possibleMoves, y); - possibleTargets[2] = new Array(x, y+possibleMoves); - possibleTargets[3] = new Array(x-possibleMoves, y); - possibleTargets[4] = new Array(x, y-possibleMoves); + possibleTargets.add(new Array(x+possibleMoves, y)); + possibleTargets.add(new Array(x, y+possibleMoves)); + possibleTargets.add(new Array(x-possibleMoves, y)); + possibleTargets.add(new Array(x, y-possibleMoves)); - possibleTargets[5] = new Array(x-1, y-2); - possibleTargets[6] = new Array(x+1, y-2); - possibleTargets[7] = new Array(x+1, y+2); - possibleTargets[8] = new Array(x-1, y+2); - possibleTargets[9] = new Array(x-2, y+1); - possibleTargets[10] = new Array(x-2, y-1); - possibleTargets[11] = new Array(x+2, y-1); - possibleTargets[12] = new Array(x+2, y+1); + possibleTargets.add(new Array(x-1, y-2)); + possibleTargets.add(new Array(x+1, y-2)); + possibleTargets.add(new Array(x+1, y+2)); + possibleTargets.add(new Array(x-1, y+2)); + possibleTargets.add(new Array(x-2, y+1)); + possibleTargets.add(new Array(x-2, y-1)); + possibleTargets.add(new Array(x+2, y-1)); + possibleTargets.add(new Array(x+2, y+1)); break; case 4: - possibleTargets[1] = new Array(x-possibleMoves, y); - possibleTargets[2] = new Array(x+possibleMoves, y); - possibleTargets[3] = new Array(x, y+possibleMoves); - possibleTargets[4] = new Array(x, y-possibleMoves); + possibleTargets.add(new Array(x-possibleMoves, y)); + possibleTargets.add(new Array(x+possibleMoves, y)); + possibleTargets.add(new Array(x, y+possibleMoves)); + possibleTargets.add(new Array(x, y-possibleMoves)); - possibleTargets[5] = new Array(x+1, y-3); - possibleTargets[6] = new Array(x-1, y-3); - possibleTargets[7] = new Array(x+3, y+1); - possibleTargets[8] = new Array(x+3, y-1); - possibleTargets[9] = new Array(x+1, y+3); - possibleTargets[10] = new Array(x-1, y+3); - possibleTargets[11] = new Array(x-3, y-1); - possibleTargets[12] = new Array(x-3, y+1); + possibleTargets.add(new Array(x+1, y-3)); + possibleTargets.add(new Array(x-1, y-3)); + possibleTargets.add(new Array(x+3, y+1)); + possibleTargets.add(new Array(x+3, y-1)); + possibleTargets.add(new Array(x+1, y+3)); + possibleTargets.add(new Array(x-1, y+3)); + possibleTargets.add(new Array(x-3, y-1)); + possibleTargets.add(new Array(x-3, y+1)); - possibleTargets[13] = new Array(x+2, y-2); - possibleTargets[14] = new Array(x+2, y+2); - possibleTargets[15] = new Array(x-2, y+2); - possibleTargets[16] = new Array(x-2, y-2); + possibleTargets.add(new Array(x+2, y-2)); + possibleTargets.add(new Array(x+2, y+2)); + possibleTargets.add(new Array(x-2, y+2)); + possibleTargets.add(new Array(x-2, y-2)); break; } - for(var target in possibleTargets) { - if(possibleTargets[target][0] > 0 && possibleTargets[target][0] < 9 && possibleTargets[target][1] > 0 && possibleTargets[target][1] < 9) { - possibleTargets[target]["fieldsBetween"] = new Array(); - var fieldsBetween = this.calcFieldsBetween(possibleTargets[target], possibleMoves); - var field = document.querySelector('[data-x="'+possibleTargets[target][0]+'"][data-y="'+possibleTargets[target][1]+'"]'); - if(field.classList.contains('farmer') || field.classList.contains('shogun')) { - delete possibleTargets[target]; - } - } else { - delete possibleTargets[target]; + // remove out of bounds + for(var possibleTarget of possibleTargets) { + if(!isInField(possibleTarget)) { + possibleTargets.delete(possibleTarget) } } - var allFields = document.querySelectorAll('.field'); - allFields.forEach(function(item, index) { - item.classList.remove('possibleMove'); - item.classList.remove('active'); - }) + + // get possible ways var that = this; - for (var target in possibleTargets) { - var way1 = true; - var way2 = true; - var that = this; - if(possibleTargets[target]["fieldsBetween"].hasOwnProperty("way1")) { - possibleTargets[target]["fieldsBetween"]["way1"].forEach(function(item) { - var field = document.querySelector('[data-x="'+item[0]+'"][data-y="'+item[1]+'"]'); - if(!that.isFree(field)) { - way1 = false + for(var possibleTarget of possibleTargets) { + possibleTarget["ways"] = this.getPossibleWays(possibleTarget); + } + for(var possibleTarget of possibleTargets) { + for(var way of possibleTarget["ways"]) { + for(var field of way) { + var chosenField = document.querySelector('[data-x="'+that.chosenFigure.getX()+'"][data-y="'+that.chosenFigure.getY()+'"]'); + var currentField = document.querySelector('[data-x="'+field.x+'"][data-y="'+field.y+'"]'); + var oppositeColor = chosenField.classList.contains('white') ? 'black' : 'white'; + var sameColor = chosenField.classList.contains('white') ? 'white' : 'black'; + var targetField = document.querySelector('[data-x="'+possibleTarget[0]+'"][data-y="'+possibleTarget[1]+'"]'); + var targetX = parseInt(targetField.getAttribute('data-x')); + var targetY = parseInt(targetField.getAttribute('data-y')); + //Startfeld überspringen + if( (( field.x === that.chosenFigure.getX() ) && (field.y === that.chosenFigure.getY() ))) { + continue; } - }); - } - if(possibleTargets[target]["fieldsBetween"].hasOwnProperty("way2")) { - possibleTargets[target]["fieldsBetween"]["way2"].forEach(function(item) { - var field = document.querySelector('[data-x="'+item[0]+'"][data-y="'+item[1]+'"]'); - if(!that.isFree(field)) { - way2 = false; + // Zielfeld prüfen + if( (( field.x === targetX ) && (field.y === targetY ))) { + if(currentField.classList.contains(sameColor)) { + const ways = possibleTarget["ways"].filter(w => w !== way); + possibleTarget["ways"] = ways; + if(possibleTarget["ways"].length == 0) { + possibleTargets.delete(possibleTarget); + } + } + } else { + if(currentField.classList.contains('shogun') || currentField.classList.contains('farmer')) { + const ways = possibleTarget["ways"].filter(w => w !== way); + possibleTarget["ways"] = ways; + if(possibleTarget["ways"].length == 0) { + possibleTargets.delete(possibleTarget); + } + } } - }); - } else { - way2 = false; - } - console.log(way1); - console.log(way2); - if(!way2 && !way1) { - delete possibleTargets[target]; + } } } - for(var target in possibleTargets) { - var x = possibleTargets[target][0]; - var y = possibleTargets[target][1]; - document.querySelector('[data-x="'+x+'"][data-y="'+y+'"]').classList.add('possibleMove') + for(var possibleTarget of possibleTargets) { + document.querySelector('[data-x="'+possibleTarget[0]+'"][data-y="'+possibleTarget[1]+'"]').classList.add('possibleMove'); } } + getPossibleWays(to) { + const x1 = this.chosenFigure.getX(); + const y1 = this.chosenFigure.getY(); + const [x2,y2] = to; + + const directionX = x1 < x2 ? 1 : -1; + const directionY = y1 < y2 ? 1 : -1; + const way1 = new Set(); + for (let x = x1; directionX == 1 ? x <= x2 : x >= x2; x = x + directionX) { + way1.add(this.getField(x, y1)); + } + for (let y = y1; directionY == 1 ? y <= y2 : y >= y2; y = y + directionY) { + way1.add(this.getField(x2, y)); + } + + const way2 = new Set(); + for (let y = y1; directionY == 1 ? y <= y2 : y >= y2; y = y + directionY) { + way2.add(this.getField(x1, y)); + } + for (let x = x1; directionX == 1 ? x <= x2 : x >= x2; x = x + directionX) { + way2.add(this.getField(x, y2)); + } + + const setsEqual = (a,b) => a.size === b.size && [...a].every(value => b.has(value)); + + if(setsEqual(way1, way2)) { + return [way1]; + } + + return [way1, way2]; + } + + getField(x,y) { + return this.fields[x][y]; + } isFree(field) { if(field.classList.contains('farmer') || field.classList.contains('shogun')) { return false; @@ -282,386 +337,10 @@ class Game { return true; } - calcFieldsBetween(target, moves) { - var sourceX = this.chosenFigure.getX(); - var sourceY = this.chosenFigure.getY(); - //console.log('SOURCE: '+sourceX+', '+sourceY+' TARGET: '+target[0], ', '+target[1]); - switch(moves) { - case 2: - //T - if( (target[0] == sourceX) && (target[1] == (sourceY-moves) ) ) { - //console.log("T") - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-1)); - } - //TR - else if((target[0] == (sourceX+1)) && (target[1] == (sourceY-1))) { - //console.log("TR") - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY)); - } - //R - else if((target[0] == (sourceX+moves)) && (target[1] == sourceY)) { - //console.log("R") - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX+1, sourceY)); - } - //BR - else if((target[0] == (sourceX+1)) && (target[1] == (sourceY+1))) { - //console.log("BR") - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY+1)); - } - //B - else if((target[0] == sourceX) && (target[1] == (sourceY+moves)) ) { - //console.log("B") - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+1)); - } - //BL - else if( (target[0] == (sourceX-1) ) && (target[1] == (sourceY+1) ) ) { - //console.log("BL") - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY)); - } - //L - else if( (target[0] == (sourceX-moves) && (target[1] == sourceY) ) ) { - //console.log("L") - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY)); - } - //TL - else if( (target[0] == (sourceX-1) && (target[1] == (sourceY-1) ) ) ) { - //console.log("TL") - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY-1)); - } - else { - console.log('2 moves - condition not found'); - } - break; - case 3: - //T - if( (target[0] == sourceX) && (target[1] == (sourceY-moves) ) ) { - //console.log("T") - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-2)); - } - //TR - 2 Wege möglich - else if( (target[0] == (sourceX+1)) && (target[1] == (sourceY-2) ) ) { - //console.log("TR"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-2)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY-1)); - } - // RL - 2 Wege möglich - else if( (target[0] == (sourceX+2)) && (target[1] == (sourceY-1) ) ) { - //console.log("RL"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX+1, sourceY-1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+2, sourceY)); - } - // R - else if( (target[0] == (sourceX+moves) ) && (target[1] == sourceY) ) { - //console.log("R"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX+2, sourceY)); - } - // RR - 2 Wege möglich - else if( (target[0] == (sourceX+2) ) && (target[1] == (sourceY+1) ) ) { - //console.log("RR") - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX+2, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY+1)); - } - //BR - 2 Wege möglich - else if( (target[0] == (sourceX+1) ) && (target[1] == (sourceY +2) ) ) { - //console.log("BR"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX+1, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY+2)); - } - // B - else if( (target[0] == sourceX ) && (target[1] == (sourceY+moves) ) ) { - //console.log("B"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+2)); - } - // BL - 2 Wege möglich - else if( (target[0] == (sourceX-1) ) && ( target[1] == (sourceY+2) ) ) { - //console.log("BL"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY+2)); - } - // LL - 2 Wege möglich - else if( (target[0] == (sourceX-2) ) && (target[1] == (sourceY+1) ) ) { - //console.log("LL"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-2, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY+1)); - } - // L - else if( (target[0] == (sourceX - moves) ) && (target[1] == sourceY) ) { - //console.log("L"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-2, sourceY)); - } - // LR - 2 Wege möglich - else if( (target[0] == ( sourceX-2) ) && (target[1] == (sourceY-1) ) ) { - //console.log("LR"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-2, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY-1)); - } - // TL - 2 Wege möglich - else if ( (target[0] == (sourceX-1) ) && (target[1] == (sourceY-2) ) ) { - //console.log("TL"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY-1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY-2)); - } else { - //console.log(" 3 moves - condition not met"); - } - break; - case 4: - // T - if( (target[0] == sourceX) && (target[1] == (sourceY-moves) ) ) { - //console.log("T"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-2)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-3)); - } - // TR - 2 Wege möglich - else if( (target[0] == (sourceX+1) ) && (target[1] == (sourceY-3) ) ) { - //console.log("TR"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-2)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-3)); - - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY-1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY-2)); - } - // TL - 2 Wege möglich - else if( (target[0] == (sourceX-1) ) && (target[1] == (sourceY-3) ) ) { - //console.log("TL"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-2)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-3)); - - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY-1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY-2)); - } - // L - else if( (target[0] == (sourceX-moves) ) && (target[1] == sourceY) ) { - //console.log("L"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-2, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-3, sourceY)); - } - // LR - 2 Wege möglich - else if( (target[0] == (sourceX-3) ) && (target[1] == (sourceY-1) ) ) { - //console.log("LR"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-2, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-3, sourceY)); - - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY-1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-2, sourceY-1)); - } - // LL - 2 Wege möglich - else if( (target[0] == (sourceX-3) ) && (target[1] == (sourceY+1) ) ) { - //console.log("LL"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-2, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-3, sourceY)); - - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-2, sourceY+1)); - } - // B - else if( (target[0] == sourceX ) && (target[1] == (sourceY+moves) ) ) { - //console.log("B"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+2)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+3)); - } - // BL - 2 Wege möglich - else if ( (target[0] == (sourceX-1) ) && (target[1] == (sourceY+3) ) ) { - //console.log("BL"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+2)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+3)); - - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY+2)); - } - // BR - 2 Wege möglich - else if ( (target[0] == (sourceX+1) ) && (target[1] == (sourceY+3) ) ) { - //console.log("BR"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+2)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+3)); - - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY+2)); - } - // R - else if ( (target[0] == (sourceX+moves) ) && (target[1] == sourceY) ) { - //console.log("R"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX+2, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX+3, sourceY)); - } - //RR - 2 Wege möglich - else if ( (target[0] == (sourceX+3) ) && (target[1] == (sourceY+1) ) ) { - //console.log("RR"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX+2, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX+3, sourceY)); - - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY+1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+2, sourceY+2)); - } - //RL - else if( (target[0] == (sourceX+3) ) && (target[1] == (sourceY-1) ) ) { - //console.log("RL"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX+2, sourceY)); - target["fieldsBetween"]["way1"].push(new Array(sourceX+3, sourceY)); - - target["fieldsBetween"]["way2"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY-1)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+2, sourceY-1)); - } - //TRC - else if( (target[0] == (sourceX+2) ) && (target[1] == (sourceY-2) ) ) { - //console.log("TRC"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-2)); - target["fieldsBetween"]["way1"].push(new Array(sourceX+1, sourceY-2)); - - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+2, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+2, sourceY-1)); - } - //TLC - else if( (target[0] == (sourceX-2) ) && (target[1] == (sourceY-2) ) ) { - //console.log("TLC"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY-2)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY-2)); - - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-2, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-2, sourceY-1)); - } - // BRC - else if( (target[0] == (sourceX+2) ) && (target[1] == (sourceY+2) ) ) { - //console.log("BRC"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+2)); - target["fieldsBetween"]["way1"].push(new Array(sourceX+1, sourceY+2)); - - target["fieldsBetween"]["way2"].push(new Array(sourceX+1, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+2, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX+2, sourceY+1)); - } - // BLC - else if( (target[0] == (sourceX-2) ) && (target[1] == (sourceY+2) ) ) { - //console.log("BLC"); - target["fieldsBetween"]["way1"] = new Array(); - target["fieldsBetween"]["way2"] = new Array(); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+1)); - target["fieldsBetween"]["way1"].push(new Array(sourceX, sourceY+2)); - target["fieldsBetween"]["way1"].push(new Array(sourceX-1, sourceY+2)); - - target["fieldsBetween"]["way2"].push(new Array(sourceX-1, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-2, sourceY)); - target["fieldsBetween"]["way2"].push(new Array(sourceX-2, sourceY+1)); - } else { - //console.log("4 moves - condition not met"); - } - break; - default: - //console.log('not implemented yet') - } - } - - releaseFigure(targetField, fromField) { - var source = document.querySelector('[data-x="'+fromField.getX()+'"][data-y="'+fromField.getY()+'"]'); - // klassen die übergeben werden müssen, bzw. vom alten feld runter müssen - // farbe, figur + releaseFigure(targetField) { + var source = document.querySelector('[data-x="'+this.chosenFigure.getX()+'"][data-y="'+this.chosenFigure.getY()+'"]'); var colorClass = source.classList.contains('white') ? 'white' : 'black'; + var oppositeColorClass = source.classList.contains('white') ? 'black' : 'white'; var figureClass = source.classList.contains('farmer') ? 'farmer' : 'shogun'; var figureData = source.getAttribute('data-figure'); source.removeChild(source.childNodes[0]); @@ -672,9 +351,8 @@ class Game { targetField.setAttribute('data-figure', figureData); this.removeIndicator(); this.showPossibleMoves(); - this.chosenFigure.setX(0); - this.chosenFigure.setY(0); - + this.chosenFigure.reset(); + game.updateLists(); } removeIndicator() { @@ -683,6 +361,12 @@ class Game { item.classList.remove('possibleMove') }) } + updateLists() { + var whiteList = document.querySelector('.whitePlayer'); + var blackList = document.querySelector('.blackPlayer'); + console.log(whiteList) + console.log(blackList) + } } class Player {