let table = document.getElementById("table"); let param = document.getElementById("param"); let score = document.getElementById("score"); const pass = document.getElementById("pass"); const sur = document.getElementById("sur"); const revo = document.getElementById("revo"); let yellow = 0; let blue = 0; let surdone = false; let revodone = false; let htable = ""; //[left, botleft, bottom, botright, right, topright, top, topleft] //0->nill, 1->yellow, 2->blue const movec = [[0,-1],[1,-1],[1,0],[1,1],[0,1],[-1,1],[-1,0],[-1,-1]]; let turn = 1 //make table let stone = new Array(8); for(let i = 0; i < 8; i++) { stone[i] = new Array(8).fill(0); } for (let i = 0; i < 8; ++i){ htable += ``; for (let j = 0; j < 8; ++j){ htable += ``; } htable += ""; } table.innerHTML = htable; //set default-stone function def(){ turn = 1; yellow = 0; blue = 0; surdone = false; revodone = false; param.innerText = "Yellowman's turn"; score.innerText = "" sur.innerText = "SURRENDER"; stone[3][3] = 1; stone[4][4] = 1; stone[4][3] = 2; stone[3][4] = 2; document.getElementById("td-3-3").innerHTML = "
"; document.getElementById("td-4-4").innerHTML = "
"; document.getElementById("td-4-3").innerHTML = "
"; document.getElementById("td-3-4").innerHTML = "
"; } def(); //event to place stones table.addEventListener('click', e =>{ let coord = document.elementFromPoint(e.clientX, e.clientY); if(coord.tagName != "TD")return; if(surdone)return; if(revodone)return; const stonegen = coord.id.split("-"); //position of the stone to put right now let x = Number(stonegen[1]); let y = Number(stonegen[2]); if(stone[x][y] == 0/*nill stone*/){ let canPlace = false; for(let i = 0; i < 8; i++){ let moved = 0; let doFlip = new Array(); while(true){ ++moved //stone[x-position + x-move (<- x-move-amount * x-move-counter)] const nowX = x + movec[i][0] * moved; const nowY = y + movec[i][1] * moved; if(nowX < 0 || nowX > 7 || nowY < 0 || nowY > 7) break;//change vector because there's wall! let nowStone = stone[nowX][nowY]; if(nowStone !=turn && nowStone != 0){ doFlip.push([x + movec[i][0] * moved, y + movec[i][1] * moved]); }else if(nowStone == turn && moved > 1){ canPlace = true; for(let i = 0; i < doFlip.length; i++){ stone[doFlip[i][0]][doFlip[i][1]] = turn; const doFlipCell = document.getElementById(`td-${doFlip[i][0]}-${doFlip[i][1]}`).children[0]; doFlipCell.classList.remove(turn != 1 ? "yellow" : "blue"); doFlipCell.classList.add(turn == 1 ? "yellow" : "blue"); } break; }else{ break; } } } if(!canPlace)return; stone[x][y] = turn; coord.innerHTML = `
`; change(1); } }); //event to pass a turn pass.addEventListener('click', e=>{ if(surdone){ return; }else if(revodone){ change(2) }else{ change(1) }; }); //event to end and reset a game sur.addEventListener('click', e=>{ if(surdone){ search(reset); def(); }else if(revodone){ surdone = true; param.innerText = "Communists' victory" score.innerText = "10000-0"; sur.innerText = "RESET"; }else{ surdone = true; search(surrender); sur.innerText = "RESET"; }; }); //event to cause a revolution revo.addEventListener('click', e=>{ if(revodone)return; revodone = true; surdone = false; score.innerText = "" sur.innerText = "SURRENDER"; search(revolution); } ); function change(man){ turn = (turn == 1 ? 2 : 1); param.innerText = (turn == 1 ? (man == 1 ? "Yellowman" : "Stalin") : (man == 1 ? "Blueman" : "Lenin")) + "'s turn"; } function search(fx){ for(let i = 0; i < 8; i++){ for(let j = 0; j < 8; j++){ fx(i,j); } } } function reset(i,j){ stone[i][j] = 0; document.getElementById(`td-${i}-${j}`).innerHTML = ""; } function revolution(i,j){ stone[i][j] = 0; document.getElementById(`td-${i}-${j}`).innerHTML = `
`; turn = 2; param.innerText = "Lenin's turn"; } function surrender(i,j){ switch(stone[i][j]){ case 1: yellow++; break; case 2: blue++; break; } if(yellow > blue){ param.innerText = "Yellowman's victory:"; score.innerText = `${yellow}-${blue}`; }else if(yellow < blue){ param.innerText = "Blueman's victory:"; score.innerText = `${blue}-${yellow}`; }else if(yellow == blue){ param.innerText = "Draw:"; score.innerText = `${yellow}-${blue}`; }else{ param.innerText = "HOW DARE YOU!!!"; score.innerText = "THIS iS ERROR MESSAGE!!!"; } } /* 2D-array reminder stone = stone.map(line=>{ return line.map(cell=>{ return 0; }); }); */