0

I have recently started responsive web design as part of my course. As a project, I have created a snake game.

To make the page responsive, I have used a media query. This does work when I resize the browser page itself. However, in the inspect function, the page isn't the same. In order to fix this, how should I go about it? Feel free to edit the code. I am still pretty new to coding!

Many thanks

Ray

<!DOCTYPE html>
<head>
    <link rel="stylesheet" href="style.css">
    <meta content="width=device-width, initial-scale=1" name="viewport" />
</head>
<body>
  
<div class='mobile'>
  <h1 id="title">Snake </h1>
  <div class="info">
    <button id="start">Lets go!</button>
    <h2>Score <span id="score"></span></h2>
  </div>
  <div class="grid"></div>
  <div class="nokia"></div>
  
</div>
<div class="controls">
  <h3>Controls</h3>
    <ul><span class="direction">Up</span> - Up arrow key</ul>
    <ul><span class="direction">Right</span> - Right arrow key</ul>
    <ul><span class="direction">Down</span> - Down arrow key</ul>
    <ul><span class="direction">Left</span> - Left arrow key</ul>
  
</div>
<script src="main.js"></script>
</body>
.mobile {
  display: flex;
  justify-content: center;
  background-color: #12c258;
  font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
  font-size: 60%;

}





#title {
  
  color: #fff;
  
}


.nokia {
  position: absolute;
  top: 190px;
  display: block;
  width: 700px;
  height: 983px;
  background-image: url("https://i.imgur.com/3SeVxgS.jpg");
  background-repeat: no-repeat;
  background-size: 100% 100%;
}

.controls {
  
  text-align: center;
    justify-content: space-between;
    padding: 2px;
    height: 125px;
    display: block;
    font-size: 70%;
    background-color: #12c258;
    color: #fff;
    font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
}

.direction {
font-weight: bold;
}

@media only screen and (min-width: 768px) {

  
  .controls {
  justify-content: center;
  display: flex;
  background-color: #12c258;
  height: 70px;
  font-size: 100%;


  .mobile {
    font-size: 100%;
  }
  


}

.grid {
  position: absolute;
  top: 420px;
  z-index: 9999;
  display: flex;
  flex-wrap: wrap;
  width: 200px;
  height: 200px;
  border: 2px solid rgba(0, 0, 0, 0.5);
  background-color: #12c258;
}

.info {
  position: absolute;
  z-index: 9999;
  top: 663px;
  text-align: center;
}


h2 {
  font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
  font-size: 15px;
  position: absolute;
  top: 90px;
  left: -60px;

}

button {
   position: absolute;
  /* top: 663px; */
  left: -92px;
  height: 64px;
  width: 172px;
  border-style: solid;
  border-bottom: 50px;
  border-radius: 50%;
  text-align: center;
  display: inline-block;
  font-size: 20px;
  outline: none;
}

button:active {
transform: translateY(2px);

}



.square {
  width: 20px;
  height: 20px;
}

.snake {
  background-color: #fff;
  border-radius: 50%;
  
}

.apple {
  background-color; red;
  border-radius: 20%;
  height: 20px;
  width: 20px;
  box-shadow: 0 0 0 0 rgba(0, 0, 0, 1);
  transform: scale(1);
  animation: pulse 2s infinite;
}

@keyframes pulse {
  0% {
    transform: scale(0.7);
    box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.7);
  }

  50% {
    transform: scale(1.2);
/*     box-shadow: 0 0 0 10px #12c258; */
  }

  100% {
    transform: scale(0.7);
/*     box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); */
  }
}
const grid = document.querySelector(".grid");
const startButton = document.getElementById("start");
const scoreDisplay = document.getElementById("score");
let squares = [];
let currentSnake = [2, 1, 0];
let direction = 1;
const width = 10;
let appleIndex = 0;
let score = 0;
let intervalTime = 1000;
let speed = 0.9;
let timerId = 0;

function createGrid() {
  //create 100 of these elements with a for loop
  for (let i = 0; i < width * width; i++) {
    //create element
    const square = document.createElement("div");
    //add styling to the element
    square.classList.add("square");
    //put the element into our grid
    grid.appendChild(square);
    //push it into a new squares array
    squares.push(square);
  }
}
createGrid();

currentSnake.forEach(index => squares[index].classList.add("snake"));

function startGame() {
  //remove the snake
  currentSnake.forEach(index => squares[index].classList.remove("snake"));
  //remove the apple
  squares[appleIndex].classList.remove("apple");
  clearInterval(timerId);
  currentSnake = [2, 1, 0];
  score = 0;
  //re add new score to browser
  scoreDisplay.textContent = score;
  direction = 1;
  intervalTime = 1000;
  generateApple();
  //readd the class of snake to our new currentSnake
  currentSnake.forEach(index => squares[index].classList.add("snake"));
  timerId = setInterval(move, intervalTime);
}

function move() {
  if (
    (currentSnake[0] + width >= width * width && direction === width) || //if snake has hit bottom
    (currentSnake[0] % width === width - 1 && direction === 1) || //if snake has hit right wall
    (currentSnake[0] % width === 0 && direction === -1) || //if snake has hit left wall
    (currentSnake[0] - width < 0 && direction === -width) || //if snake has hit top
    squares[currentSnake[0] + direction].classList.contains("snake")
  )
    return clearInterval(timerId);

  //remove last element from our currentSnake array
  const tail = currentSnake.pop();
  //remove styling from last element
  squares[tail].classList.remove("snake");
  //add square in direction we are heading
  currentSnake.unshift(currentSnake[0] + direction);
  //add styling so we can see it

  //deal with snake head gets apple
  if (squares[currentSnake[0]].classList.contains("apple")) {
    //remove the class of apple
    squares[currentSnake[0]].classList.remove("apple");
    //grow our snake by adding class of snake to it
    squares[tail].classList.add("snake");
    console.log(tail);
    //grow our snake array
    currentSnake.push(tail);
    console.log(currentSnake);
    //generate new apple
    generateApple();
    //add one to the score
    score++;
    //display our score
    scoreDisplay.textContent = score;
    //speed up our snake
    clearInterval(timerId);
    console.log(intervalTime);
    intervalTime = intervalTime * speed;
    console.log(intervalTime);
    timerId = setInterval(move, intervalTime);
  }

  squares[currentSnake[0]].classList.add("snake");
}

function generateApple() {
  do {
    appleIndex = Math.floor(Math.random() * squares.length);
  } while (squares[appleIndex].classList.contains("snake"));
  squares[appleIndex].classList.add("apple");
}
generateApple();

// 39 is right arrow
// 38 is for the up arrow
// 37 is for the left arrow
// 40 is for the down arrow

function control(e) {
  if (e.keyCode === 39) {
    console.log("right pressed");
    direction = 1;
  } else if (e.keyCode === 38) {
    console.log("up pressed");
    direction = -width;
  } else if (e.keyCode === 37) {
    console.log("left pressed");
    direction = -1;
  } else if (e.keyCode === 40) {
    console.log("down pressed");
    direction = +width;
  }
}
document.addEventListener("keyup", control);
startButton.addEventListener("click", startGame);
  • _"However, in the inspect function, the page isn't the same."_ What do you mean by "isn't the same?" – kmoser Apr 27 '21 at 16:22
  • In the inspect tool, the page becomes out of place when the media query kicks in. When I resixe the page in the browser itself, it is working fine – Rayhaan Ugharadar Apr 28 '21 at 10:28
  • Depending on where/how it is docked, the web developer tool panel can cause the size of the browser to change, which would affect your media queries. Try [undocking](https://stackoverflow.com/questions/20220090/undock-chrome-developer-tools) the panel if you are using Chrome. – kmoser Apr 28 '21 at 18:28

0 Answers0