vendredi 23 décembre 2016

JavaScript "if" conditions not working

I am currently creating a game with HTML/SCSS and jQuery/JavaScript.

I have a character div that moves around when pressing keyboard arrows with jQuery. This works with an if statement that defines where the player can move around, so it can't get out of a bigger div.

I wanted to create a pure JavaScript version of the game, and the player can move around and all, except if I put the if statements so it doesn't get out of the border.

Here is my CodePen

Here is my game (so far) with jQuery:

var jQueryVersion = function() {
  var game_anim = function() {

    var level = [
      [0, 1, "l", 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, "l", "l", 1],
      [0, 0, 0, 0, 2, 2, 2, 2, 2, 2],
      [0, 0, 0, 0, 0, 3, 3, 0, 3],
    ];

    var $player = $("#player");
    var $game = $("#game");

    for (var i = 0; i < level.length; i++) {
      for (var j = 0; j < level[i].length; j++) {

        var n = level[i][j];

        if (n === 1) {
          $("<div>", {
            "class": "block stone ypos-0 xpos-" + [j]
          }).appendTo("#game");

        }

        if (n === 2) {
          $("<div>", {
            "class": "block stone ypos-1 xpos-" + [j]
          }).appendTo("#game");
        }
        if (n === 3) {
          $("<div>", {
            "class": "block stone ypos-2 xpos-" + [j]
          }).appendTo("#game");

        }

        if (n === 4) {
          $("<div>", {
            "class": "block stone ypos-3 xpos-" + [j]
          }).appendTo("#game");
        }

        if (n === "l") {
          $("<div>", {
            "class": "block lava ypos-" + [i] + " xpos-" + [j]
          }).appendTo("#game");
        }

      }
    }

    $(document).keydown(function(event) { // keycodes: left = 37, right = 39
      if (event.which == 39 || event.which == 68) { // right arrow or D
        if ($player.position().left < $game.width() - $player.width()) {
          $player.css("left", "+=10");
        }
      }
      if (event.which == 37 || event.which == 81 || event.which == 65) { // left arrow or Q on AZERTY or A on QWERTY
        if ($player.position().left > 0) {
          $player.css("left", "-=10");
        }
      }

      if (event.which == 38) {
        if ($player.position().top > 0) {
          $player.css("top", "-=10");
        }
      }
      if (event.which == 40) {
        if ($player.position().top < 500 - $player.height()) {
          $player.css("top", "+=10");
        }
      }

    });


  }

  $(document).ready(function() {

    game_anim();

  });
}
jQueryVersion();
#game {
  position: absolute;
  left: calc((100% - 800px)/2);
  height: 500px;
  width: 800px;
  border: 2px solid black;
}
.block {
  height: 50px;
  width: 50px;
  position: absolute;
}
.stone {
  background-color: black;
}
.lava {
  background-color: red;
}
#player {
  height: 50px;
  width: 50px;
  background-color: #3747C0;
  bottom: 0;
  position: absolute;
}
#player .eyes {
  border-radius: 50%;
  background-color: white;
  position: absolute;
  height: 10px;
  width: 10px;
}
#player .eye_R {
  left: 7px;
  top: 10px;
}
#player .eye_L {
  left: 32px;
  top: 10px;
}
#player .mouth {
  height: 8.5px;
  width: 32px;
  background-color: white;
  border-radius: 5px;
  left: calc((50px - 32px)/2);
  bottom: 10px;
  position: absolute;
}
.ypos-0 {
  bottom: 0px;
  position: absolute;
}
.ypos-1 {
  bottom: 50px;
  position: absolute;
}
.ypos-2 {
  bottom: 100px;
  position: absolute;
}
.ypos-3 {
  bottom: 150px;
  position: absolute;
}
.ypos-4 {
  bottom: 200px;
  position: absolute;
}
.ypos-5 {
  bottom: 250px;
  position: absolute;
}
.ypos-6 {
  bottom: 300px;
  position: absolute;
}
.ypos-7 {
  bottom: 350px;
  position: absolute;
}
.ypos-8 {
  bottom: 400px;
  position: absolute;
}
.xpos-0 {
  left: 0px;
  /*position: absolute;*/
}
.xpos-1 {
  left: 50px;
  /*position: absolute;*/
}
.xpos-2 {
  left: 100px;
  /*position: absolute;*/
}
.xpos-3 {
  left: 150px;
  /*position: absolute;*/
}
.xpos-4 {
  left: 200px;
  /*position: absolute;*/
}
.xpos-5 {
  left: 250px;
  /*position: absolute;*/
}
.xpos-6 {
  left: 300px;
  /*position: absolute;*/
}
.xpos-7 {
  left: 350px;
  /*position: absolute;*/
}
.xpos-8 {
  left: 400px;
  /*position: absolute;*/
}
.xpos-9 {
  left: 450px;
  /*position: absolute;*/
}
.xpos-10 {
  left: 500px;
  /*position: absolute;*/
}
.xpos-11 {
  left: 550px;
  /*position: absolute;*/
}
.xpos-12 {
  left: 600px;
  /*position: absolute;*/
}
.xpos-13 {
  left: 650px;
  /*position: absolute;*/
}
.xpos-14 {
  left: 700px;
  /*position: absolute;*/
}
.xpos-15 {
  left: 750px;
  /*position: absolute;*/
}
.xpos-16 {
  left: 800px;
  /*position: absolute;*/
}
.xpos-17 {
  left: 850px;
  /*position: absolute;*/
}
.xpos-18 {
  left: 900px;
  /*position: absolute;*/
}
<script src="http://ift.tt/1oMJErh"></script>

<div id="game">
  <div id="player">
    <div class="eyes eye_R"></div>
    <div class="eyes eye_L"></div>
    <div class="mouth"></div>
  </div>
</div>


As you can see, the character/player can move around, without getting out of the box.

Why won't my pure JavaScript work though?

Here is the same project with JavaScript:

var javascriptVersion = function() {

        var game_anim = function() {

                var level = [
                        [0, 1, "l", 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, "l", "l", 1],
                        [0, 0, 0, 0, 2, 2, 2, 2, 2, 2],
                        [0, 0, 0, 0, 0, 3, 3, 0, 3],
                ];

                var player = document.getElementById('player');
                var game = document.getElementById("game");

                var left = 0;
                var top = 0;

                for (var i = 0; i < level.length; i++) {
                        for (var j = 0; j < level[i].length; j++) {

                                var n = level[i][j];

                                if (n === 1) {

                                        var blocks = document.createElement("div");
                                        blocks.classList.add("block", "stone", "ypos-0", "xpos-" + j);
                                        game.appendChild(blocks);

                                }

                                if (n === 2) {
                                        var blocks = document.createElement("div");
                                        blocks.classList.add("block", "stone", "ypos-1", "xpos-" + j);
                                        game.appendChild(blocks);
                                }
                                if (n === 3) {
                                        var blocks = document.createElement("div");
                                        blocks.classList.add("block", "stone", "ypos-2", "xpos-" + j);
                                        game.appendChild(blocks);
                                }

                                if (n === 4) {
                                        var blocks = document.createElement("div");
                                        blocks.classList.add("block", "stone", "ypos-3", "xpos-" + j);
                                        game.appendChild(blocks);
                                }

                                if (n === "l") {
                                        var blocks = document.createElement("div");
                                        blocks.classList.add("block", "lava", "ypos-0", "xpos-" + j);
                                        game.appendChild(blocks);
                                }

                        }
                }

                document.addEventListener('keydown', function(event) { // keycodes: left = 37, right = 39
                        if (event.keyCode == 39 || event.keyCode == 68) { // right arrow or D
                                if (player.style.left < game.style.width - player.style.width) {
                                        left += 10;
                                        player.style.left = (parseInt(left) + left) + "px";
                                }
                        }
                        if (event.keyCode == 37 || event.keyCode == 81 || event.keyCode == 65) { // left arrow or Q on AZERTY or A on QWERTY
                                if (player.style.left > 0) {
                                        left -= 10;
                                        player.style.left = (parseInt(left) + left) + "px";
                                }
                        }

                        if (event.keyCode == 38) {
                                if (player.style.top > 0) {
                                        top -= 10;
                                        player.style.left = (parseInt(top) + top) + "px";
                                }
                        }
                        if (event.keyCode == 40) {
                                if (player.style.top < (500 - player.style.height)) {
                                        top += 10;
                                        player.style.left = (parseInt(top) + top) + "px";
                                }
                        }

                });

        }
        game_anim();
}

javascriptVersion();
#game {
  position: absolute;
  left: calc((100% - 800px)/2);
  height: 500px;
  width: 800px;
  border: 2px solid black;
}

.block {
  height: 50px;
  width: 50px;
  position: absolute;
}

.stone {
  background-color: black;
}

.lava {
  background-color: red;
}

#player {
  height: 50px;
  width: 50px;
  background-color: #3747C0;
  bottom: 0;
  position: absolute;
}
#player .eyes {
  border-radius: 50%;
  background-color: white;
  position: absolute;
  height: 10px;
  width: 10px;
}
#player .eye_R {
  left: 7px;
  top: 10px;
}
#player .eye_L {
  left: 32px;
  top: 10px;
}
#player .mouth {
  height: 8.5px;
  width: 32px;
  background-color: white;
  border-radius: 5px;
  left: calc((50px - 32px)/2);
  bottom: 10px;
  position: absolute;
}

.ypos-0 {
  bottom: 0px;
  position: absolute;
}

.ypos-1 {
  bottom: 50px;
  position: absolute;
}

.ypos-2 {
  bottom: 100px;
  position: absolute;
}

.ypos-3 {
  bottom: 150px;
  position: absolute;
}

.ypos-4 {
  bottom: 200px;
  position: absolute;
}

.ypos-5 {
  bottom: 250px;
  position: absolute;
}

.ypos-6 {
  bottom: 300px;
  position: absolute;
}

.ypos-7 {
  bottom: 350px;
  position: absolute;
}

.ypos-8 {
  bottom: 400px;
  position: absolute;
}

.xpos-0 {
  left: 0px;
  /*position: absolute;*/
}

.xpos-1 {
  left: 50px;
  /*position: absolute;*/
}

.xpos-2 {
  left: 100px;
  /*position: absolute;*/
}

.xpos-3 {
  left: 150px;
  /*position: absolute;*/
}

.xpos-4 {
  left: 200px;
  /*position: absolute;*/
}

.xpos-5 {
  left: 250px;
  /*position: absolute;*/
}

.xpos-6 {
  left: 300px;
  /*position: absolute;*/
}

.xpos-7 {
  left: 350px;
  /*position: absolute;*/
}

.xpos-8 {
  left: 400px;
  /*position: absolute;*/
}

.xpos-9 {
  left: 450px;
  /*position: absolute;*/
}

.xpos-10 {
  left: 500px;
  /*position: absolute;*/
}

.xpos-11 {
  left: 550px;
  /*position: absolute;*/
}

.xpos-12 {
  left: 600px;
  /*position: absolute;*/
}

.xpos-13 {
  left: 650px;
  /*position: absolute;*/
}

.xpos-14 {
  left: 700px;
  /*position: absolute;*/
}

.xpos-15 {
  left: 750px;
  /*position: absolute;*/
}

.xpos-16 {
  left: 800px;
  /*position: absolute;*/
}

.xpos-17 {
  left: 850px;
  /*position: absolute;*/
}

.xpos-18 {
  left: 900px;
  /*position: absolute;*/
}
<div id = "game">
        <div id = "player">
                <div class = "eyes eye_R"></div>
                <div class = "eyes eye_L"></div>
                <div class = "mouth"></div>
        </div>
</div>

Thank you for your help!

Aucun commentaire:

Enregistrer un commentaire