Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.06.2017, 06:10
Новичок на форуме
Отправить личное сообщение для Lukashev Посмотреть профиль Найти все сообщения от Lukashev
 
Регистрация: 07.06.2017
Сообщений: 2

Крестики нолики на js
При написании крестиков - ноликов столкнулся с одной очень интересной проблемой. Дело в том , что при попытке "перекрывания" двух ноликов либо крестиков, победа засчитывается в пользу того игрока , который мог выиграть уже на следующий ход. Вот пока не знаю, как исправить ситуацию.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Tic-tac-toe</title>
	<link rel="stylesheet" href="style.css">
</head>
<body>
	<div class="game_container">
		<input type="text" id="print_out" value="">

		<table>
			<tr>
				<td><input type="text" id="cell_1" value=""></td>
				<td><input type="text" id="cell_2" value=""></td>
				<td><input type="text" id="cell_3" value=""></td>
			</tr>
			<tr>
				<td><input type="text" id="cell_4" value=""></td>
				<td><input type="text" id="cell_5" value=""></td>
				<td><input type="text" id="cell_6" value=""></td>
			</tr>
			<tr>
				<td><input type="text" id="cell_7" value=""></td>
				<td><input type="text" id="cell_8" value=""></td>
				<td><input type="text" id="cell_9" value=""></td>
			</tr>
		</table>
		
		<button id="new_game">New Game</button>		
	</div>
		<p id="result"></p>

	<script src="engine.js"></script>
</body>
</html>


https://hostingkartinok.com/show-ima...355a70536d5d3e
var cellPackage = [];
for (var i = 1; i < 10; i++) {
    var cell = "cell_" + i;
    cell = document.getElementById("cell_" + i);
    cellPackage.push(cell);
}

var print_out = document.getElementById("print_out");
var new_game = document.getElementById("new_game");
var result = document.getElementById("result");
var player1 = "Turn: Player 1";
var player2 = "Turn: Player 2";

new_game.addEventListener("click", function() {
    print_out.value = player1;
    result.innerHTML = "";
    window.location.reload();
    for (var i = 0; i < cellPackage.length; i++) {
        cellPackage[i].value = "";
        cellPackage[i].removeAttribute("disabled", "disabled");
    }
});

function PlayerOne(player) {
    print_out.value = player;
    for (var i = 0; i < cellPackage.length; i++) {
        cellPackage[i].addEventListener("click", function() {
            this.value = "X";
            this.setAttribute("disabled", "disabled");
            if ((cellPackage[0].value == "X" && cellPackage[1].value == "X" && cellPackage[2].value == "X") ||
                (cellPackage[3].value == "X" && cellPackage[4].value == "X" && cellPackage[5].value == "X") ||
                (cellPackage[6].value == "X" && cellPackage[7].value == "X" && cellPackage[8].value == "X") ||
                (cellPackage[0].value == "X" && cellPackage[4].value == "X" && cellPackage[8].value == "X") ||
                (cellPackage[2].value == "X" && cellPackage[4].value == "X" && cellPackage[6].value == "X") ||
                (cellPackage[0].value == "X" && cellPackage[3].value == "X" && cellPackage[6].value == "X") ||
                (cellPackage[1].value == "X" && cellPackage[4].value == "X" && cellPackage[7].value == "X") ||
                (cellPackage[2].value == "X" && cellPackage[5].value == "X" && cellPackage[8].value == "X")) {
                result.innerHTML = "Player1 won the game! Click 'New Game' to restart";
                return true;
            } else  {
                PlayerTwo(player2);
            }
        });
    }
}

function PlayerTwo(player) {
    print_out.value = player;
    for (var i = 0; i < cellPackage.length; i++) {
        cellPackage[i].addEventListener("click", function() {
            this.value = "O";
            this.setAttribute("disabled", "disabled");
            if ((cellPackage[0].value == "O" && cellPackage[1].value == "O" && cellPackage[2].value == "O") ||
                (cellPackage[3].value == "O" && cellPackage[4].value == "O" && cellPackage[5].value == "O") ||
                (cellPackage[6].value == "O" && cellPackage[7].value == "O" && cellPackage[8].value == "O") ||
                (cellPackage[0].value == "O" && cellPackage[4].value == "O" && cellPackage[8].value == "O") ||
                (cellPackage[2].value == "O" && cellPackage[4].value == "O" && cellPackage[6].value == "O") ||
                (cellPackage[0].value == "O" && cellPackage[3].value == "O" && cellPackage[6].value == "O") ||
                (cellPackage[1].value == "O" && cellPackage[4].value == "O" && cellPackage[7].value == "O") ||
                (cellPackage[2].value == "O" && cellPackage[5].value == "O" && cellPackage[8].value == "O")) {
                result.innerHTML = "Player2 won the game! Click 'New Game' to restart";
                return true;
            } else {
                 PlayerOne(player1);
            }
        });
    }
}

PlayerOne(player1);

Последний раз редактировалось Lukashev, 19.06.2017 в 06:14.
Ответить с цитированием
  #2 (permalink)  
Старый 19.06.2017, 07:40
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Lukashev, дело в том что addEventListener добавляется, а не заменяется:
<input type="button" id="button" value="Test">
<script>
for (var i = 0; i < 5; i++) {
	button.addEventListener('click', function() {
		alert(i--);
	});
}
</script>

Таким образом число обработчиков события с каждым ходом увеличивается в геометрической прогрессии.

Последний раз редактировалось Rise, 19.06.2017 в 07:49.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Диалог между HTML и внешним JS в контексте расширения GoogleChrome ev1lart Events/DOM/Window 0 26.04.2017 19:25
Крестики нолики DivMan Events/DOM/Window 2 30.09.2016 14:37
JS <-> Server Js. Severtain Общие вопросы Javascript 1 05.11.2011 15:36
JS Coaching для стартапа OlgaAyva Работа 12 27.09.2011 22:18
Картинка обрабатывается js 4yBaK Общие вопросы Javascript 10 11.09.2011 09:28