jakub 10 months ago
parent e0c03794bb
commit 8d15bf8bb6
  1. 11
      css/game.scss
  2. 8
      index.html
  3. 67
      javascript/client-only-logic.js
  4. 37
      javascript/game-logic.js

@ -42,6 +42,7 @@
}
}
}
#game{
#playfield{
background: rgb(180, 124, 52);
@ -80,4 +81,12 @@
}
}
}
}
}
@keyframes invalid-move-animation {
0% { transform: translateX(0) }
25% { transform: translateX(5px) }
50% { transform: translateX(-5px) }
75% { transform: translateX(5px) }
100% { transform: translateX(0) }
}

@ -9,13 +9,9 @@
</head>
<body>
<section id="game">
<div id="pieces-area">
</div>
<section id="game" class="invalid-move">
<div id="pieces-area"></div>
<div id="playfield"></div>
</section>
<script src="./javascript/game-logic.js"></script>
<script src="./javascript/client-only-logic.js">

@ -1,8 +1,8 @@
const playField = document.getElementById("playfield");
const piecesArea = document.getElementById("pieces-area");
const player = "black";
var selectedPiece = null;
player = "black";
selectedPiece = null;
moveContinuation = false;
function movePiece(piece, x, y){
@ -65,14 +65,16 @@ function generatePieces(){
piece.setAttribute("x", pieceRecord.x);
piece.setAttribute("y", pieceRecord.y);
piece.id = "piece" + pieceRecord.id;
piecesArea.appendChild(piece);
movePiece(piece, pieceRecord.x, pieceRecord.y)
if(pieceRecord.player == player){
piece.addEventListener("click", pieceClickEvent.bind("null", piece))
}
piece.addEventListener("click", pieceClickEvent.bind("null", piece))
});
}
@ -80,6 +82,27 @@ function getPieceRecordFromPiece(piece) {
return getPieceRecord(piece.getAttribute("x"), piece.getAttribute("y"));
}
function updatePieces() {
const safeList = new Array();
pieceList.forEach(pieceRecord => {
const piece = document.getElementById("piece" + pieceRecord.id);
safeList.push(piece.id);
movePiece(piece, pieceRecord.x, pieceRecord.y)
});
const pieces = piecesArea.childNodes;
pieces.forEach(piece => {
if (!safeList.includes(piece.id)) {
piece.remove();
}
});
}
function resetPieceSelection() {
if(selectedPiece != null){
@ -89,10 +112,13 @@ function resetPieceSelection() {
}
function pieceClickEvent(piece){
resetPieceSelection();
selectedPiece = piece;
selectedPiece.classList.add("selected");
const pieceRecord = getPieceRecordFromPiece(piece);
if(pieceRecord.player == player){
resetPieceSelection();
selectedPiece = piece;
selectedPiece.classList.add("selected");
}
}
@ -102,10 +128,25 @@ function tileClickEvent(x, y){
if(selectedPiece != null){
const pieceRecord = getPieceRecordFromPiece(selectedPiece);
movePiece(selectedPiece, x, y)
const validity = makeMove(pieceRecord, x,y);
alert(isMoveValid(pieceRecord, x,y))
resetPieceSelection();
alert(validity);
switch (validity) {
case 0:
alert("neplatný tah!")
break;
case 1:
resetPieceSelection();
updatePieces();
player = (player == "white") ? "black" : "white";
break;
case 2:
updatePieces();
}
/*movePiece(selectedPiece, x, y);
resetPieceSelection();*/
}
}

@ -54,6 +54,7 @@ function updatePieceRecordPosition(pieceRecord, x, y) {
pieceRecord.x = x;
pieceRecord.y = y;
updatePieceRecord(pieceRecord);
return pieceRecord;
}
function isMoveValid(pieceRecord, x, y){
@ -94,7 +95,12 @@ function isMoveValid(pieceRecord, x, y){
const nowX = currentX + (i*directionX);
const nowY = currentY + (i*directionY);
if (getPieceRecord(nowX, nowY)) {
if (inWayPieceRecord = getPieceRecord(nowX, nowY)) {
if(inWayPieceRecord.player == player){
return false;
}
space = 0;
piecesInWay++;
}else{
@ -128,7 +134,7 @@ function getCasualties(oldX, oldY, newX, newY) {
pieceRecord = getPieceRecord(x,y);
if (pieceRecord) {
casualties.put(pieceRecord);
casualties.push(pieceRecord);
}
@ -136,17 +142,19 @@ function getCasualties(oldX, oldY, newX, newY) {
return casualties;
}
function canContinue(pieceRecord){
function continuable(pieceRecord){
const x = pieceRecord.x;
const y = pieceRecord.y;
const player = pieceRecord.player;
const type = pieceRecord.type;
if((type == "queen" || player == "white") && (getCasualties(x+1, y+1, x+2, y+2).count() == 1 || getCasualties(x-1, y+1, x-2, y+2).count() == 1)){
if((type == "queen" || player == "white") && ((getPieceRecord(x+1, y+1) && !getPieceRecord(x+2, y+2) && (y+2) < 8 && (x+2) < 8) || ((getPieceRecord(x-1, y+1) && !getPieceRecord(x-2, y+2) && (y+2) < 8 && (x-2) > 0)))){
return true;
}
if((type == "queen" || player == "black") && (getCasualties(x+1, y-1, x+2, y-2).count() == 1 || getCasualties(x-1, y-1, x-2, y-2).count() == 1)){
if((type == "queen" || player == "black") && ((getPieceRecord(x+1, y-1) && !getPieceRecord(x+2, y-2) && (y-2) > 0 && (x+2) < 8) || ((getPieceRecord(x-1, y-1) && !getPieceRecord(x-2, y-2) && (y-2) > 0 && (x-2) > 0)))){
alert("bun");
return true;
}
@ -160,13 +168,24 @@ function swapPlayers() {
function makeMove(pieceRecord, x, y){
if (!isMoveValid(pieceRecord, x, y)) {
return false;
return 0;
}
const oldX = pieceRecord.x;
const oldY = pieceRecord.y;
const casualties = getCasualties(oldX, oldY, x, y);
const casualties = getCasualties();
while (condition) {
casualties.forEach(casualty => {
nukePieceRecord(casualty);
});
const updatedPieceRecord = updatePieceRecordPosition(pieceRecord, x, y);
if (continuable(updatedPieceRecord)) {
return 2;
}
return 1;
}
generateDefaultPositions();
Loading…
Cancel
Save