0

So I'm making a basic tic tac toe app using html/css and javascript, however, I keep getting this error "script.js:13 Uncaught TypeError: Cannot read property 'addEventListener' of null at playBtn (script.js:13) at HTMLDocument. (script.js:8)". Everywhere I search says it is because my javascript is being loaded before my DOM so I wrapped my javascript in the document.addEventListener("DOMContentLoaded", function (event) {} function but I'm still getting this error. Help will be much appreciated. Added html and js code below. ps. still new to html/css/js

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <script type="module" src="https://unpkg.com/ionicons@5.0.0/dist/ionicons/ionicons.esm.js"></script>
    <script nomodule="" src="https://unpkg.com/ionicons@5.0.0/dist/ionicons/ionicons.js"></script>
    <link rel="stylesheet" href="resources/css/style.css">
    <title>Tic Tac Toe</title>

</head>

<body>
    <!--row 1 -->
    <h1>Tic Tac Toe</h1>
    <div class="container">
        <div class="player1-text">
            <h2>Player 1</h2>
        </div>
        <div class="game-container">
            <div class="tile-1">
                <ion-icon name="close-outline"></ion-icon>
                <ion-icon name="ellipse-outline"></ion-icon>
            </div>
            <div class="tile-2">
                <ion-icon name="close-outline"></ion-icon>
                <ion-icon name="ellipse-outline"></ion-icon>
            </div>
            <div class="tile-3">
                <ion-icon name="close-outline"></ion-icon>
                <ion-icon name="ellipse-outline"></ion-icon>
            </div>
            <!--row 2 -->
            <div class="tile-4">
                <ion-icon name="close-outline"></ion-icon>
                <ion-icon name="ellipse-outline"></ion-icon>
            </div>
            <div class="tile-5">
                <ion-icon name="close-outline"></ion-icon>
                <ion-icon name="ellipse-outline"></ion-icon>
            </div>
            <div class="tile-6">
                <ion-icon name="close-outline"></ion-icon>
                <ion-icon name="ellipse-outline"></ion-icon>
            </div>
            <!--row 3 -->
            <div class="tile-7">
                <ion-icon name="close-outline"></ion-icon>
                <ion-icon name="ellipse-outline"></ion-icon>
            </div>
            <div class="tile-8">
                <ion-icon name="close-outline"></ion-icon>
                <ion-icon name="ellipse-outline"></ion-icon>
            </div>
            <div class="tile-9">
                <ion-icon name="close-outline"></ion-icon>
                <ion-icon name="ellipse-outline"></ion-icon>
            </div>
        </div>
        <div class="player2-text">
            <h2>Player 2</h2>
        </div>
    </div>
    <div>
        <button class="play-btn">
            Play game
        </button>
    </div>

    <script src="resources/js/script.js"></script>

</body></html>




document.addEventListener("DOMContentLoaded", function (event) {

    var activePlayer, gamePlaying;
    var p1Checks, p2Checks;
    var playButton = document.querySelector('play-btn');

    init();
    playBtn();


    function playBtn() {

        playButton.addEventListener('click', function () {
            gamePlaying = true;
            activePlayer = 1;

            for (var i = 1; i < 10; i++) {
                clickTiles(i);
            }

        });

    }

    function clickTiles(i) {
        document.querySelector('.tile-' + i).addEventListener('click', function () {

            if (activePlayer === 1) {
                document.querySelector('.tile-' + i).classList.add('p1-t' + i);
                p1Checks[i - 1] = 1;
                checkP1Win();
            } else {
                document.querySelector('.tile-' + i).classList.add('p2-t' + i);
                p2Checks[i - 1] = 1;
                checkP2Win();
            }

            document.querySelector('.tile-' + i).classList.add('clicked');
            nextPlayer();
        });
    }

    function nextPlayer() {
        if (activePlayer === 1) {
            activePlayer = 2;
        } else {
            activePlayer = 1;
        }

        for (var i = 1; i < 10; i++) {
            if (activePlayer === 2) {
                document.querySelector('.tile-' + i).classList.remove('player-1');
                document.querySelector('.tile-' + i).classList.add('player-2');
            } else {
                document.querySelector('.tile-' + i).classList.remove('player-2');
                document.querySelector('.tile-' + i).classList.add('player-1');
            }
        }
    }

    function init() {
        //initialise evrything here 
        gamePlaying = false;
        p1Checks = [0, 0, 0, 0, 0, 0, 0, 0, 0];
        p2Checks = [0, 0, 0, 0, 0, 0, 0, 0, 0];

        for (var i = 1; i < 10; i++) {
            document.querySelector('.tile-' + i).classList.remove('player-1');
            document.querySelector('.tile-' + i).classList.remove('player-2');
            document.querySelector('.tile-' + i).classList.remove('p1-t' + i);
            document.querySelector('.tile-' + i).classList.remove('p2-t' + i);
        }


    }

    function checkP1Win() {
        //all possible win conditions
        if (p1Checks[0] == 1 && p1Checks[1] == 1 && p1Checks[2] == 1) {
            alert("Player 1 wins!");
        } else if (p1Checks[0] === 1 && p1Checks[3] === 1 && p1Checks[6] === 1) {
            alert("Player 1 wins!");
        } else if (p1Checks[0] === 1 && p1Checks[4] === 1 && p1Checks[8] === 1) {
            alert("Player 1 wins!");
        } else if (p1Checks[1] === 1 && p1Checks[4] === 1 && p1Checks[7] === 1) {
            alert("Player 1 wins!");
        } else if (p1Checks[2] === 1 && p1Checks[4] === 1 && p1Checks[6] === 1) {
            alert("Player 1 wins!");
        } else if (p1Checks[2] === 1 && p1Checks[5] === 1 && p1Checks[8] === 1) {
            alert("Player 1 wins!");
        } else if (p1Checks[3] === 1 && p1Checks[4] === 1 && p1Checks[5] === 1) {
            alert("Player 1 wins!");
        } else if (p1Checks[6] === 1 && p1Checks[7] === 1 && p1Checks[8] === 1) {
            alert("Player 1 wins!");
        }
    }

    function checkP2Win() {
        //all possible win conditions
        if (p2Checks[0] == 1 && p2Checks[1] == 1 && p2Checks[2] == 1) {
            alert("Player 2 wins!");
        } else if (p2Checks[0] === 1 && p2Checks[3] === 1 && p2Checks[6] === 1) {
            alert("Player 2 wins!");
        } else if (p2Checks[0] === 1 && p2Checks[4] === 1 && p2Checks[8] === 1) {
            alert("Player 2 wins!");
        } else if (p2Checks[1] === 1 && p2Checks[4] === 1 && p2Checks[7] === 1) {
            alert("Player 2 wins!");
        } else if (p2Checks[2] === 1 && p2Checks[4] === 1 && p2Checks[6] === 1) {
            alert("Player 2 wins!");
        } else if (p2Checks[2] === 1 && p2Checks[5] === 1 && p2Checks[8] === 1) {
            alert("Player 2 wins!");
        } else if (p2Checks[3] === 1 && p2Checks[4] === 1 && p2Checks[5] === 1) {
            alert("Player 2 wins!");
        } else if (p2Checks[6] === 1 && p2Checks[7] === 1 && p2Checks[8] === 1) {
            alert("Player 2 wins!");
        }
    }



    function playerWins() {
        //add code here to make all the tiles unclickable and then display who won 
    }

    function playAgainBtn() {
        //button to initialise evrything when pressed 
    }


});
A.H 36
  • 13
  • 2

0 Answers0