{"id":679,"date":"2024-10-07T17:26:44","date_gmt":"2024-10-07T20:26:44","guid":{"rendered":"https:\/\/urutaudev.com.br\/?p=679"},"modified":"2024-10-07T18:34:43","modified_gmt":"2024-10-07T21:34:43","slug":"como-fazer-arkanoid-game-em-javascript","status":"publish","type":"post","link":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/","title":{"rendered":"Como fazer Arkanoid Game em Javascript"},"content":{"rendered":"<h1><\/h1>\n<figure id=\"attachment_680\" aria-describedby=\"caption-attachment-680\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-680 size-medium\" title=\"Como fazer Arkanoid Game em Javascript\" src=\"https:\/\/urutaudev.com.br\/wp-content\/uploads\/2024\/10\/Como-fazer-Arkanoid-Game-em-Javascript-300x300.jpeg\" alt=\"Como fazer Arkanoid Game em Javascript\" width=\"300\" height=\"300\" \/><figcaption id=\"caption-attachment-680\" class=\"wp-caption-text\">Como fazer Arkanoid Game em Javascript<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-family: arial, helvetica, sans-serif;\">Introdu\u00e7\u00e3o<\/span><\/h2>\n<div>\n<div><span style=\"font-size: 14pt; font-family: arial, helvetica, sans-serif;\">Neste post, vamos explorar passo a passo como criar uma vers\u00e3o simples do Arkanoid, um game cl\u00e1ssico dos anos 80. Durante este tutorial irei abordar a implementa\u00e7\u00e3o das principais funcionalidades, como o movimento da bola e a colis\u00e3o com os blocos.<\/span><\/div>\n<div><span style=\"font-size: 14pt; font-family: arial, helvetica, sans-serif;\">Prepare-se para mergulhar no mundo dos jogos retro e descobrir como trazer um toque de nostalgia a seu aprendizado em programa\u00e7\u00e3o, construindo um game utilizando apenas <a href=\"https:\/\/urutaudev.com.br\/index.php\/category\/tutorias\/javascript\/\">Javascript<\/a>, css e html.<\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-family: arial, helvetica, sans-serif;\"><strong><span style=\"font-size: 14pt;\">Primeiro passo voc\u00ea dever\u00e1 criar a estrutura da p\u00e1gina, para isso crie um arquivo html contendo\u00a0 o c\u00f3digo conforme mostrado abaixo:<\/span><\/strong><\/span><\/p>\n<p>&nbsp;<\/p>\n<div>\n<div><code>&lt;!DOCTYPE html&gt;<\/code><\/div>\n<div><code>&lt;html lang=\"pt-BR\"&gt;<\/code><\/div>\n<div><code>&lt;head&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 &lt;meta charset=\"UTF-8\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 &lt;title&gt;Arkanoid Game&lt;\/title&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 &lt;link rel=\"stylesheet\" href=\"style.css\"&gt;<\/code><\/div>\n<div><code>&lt;\/head&gt;<\/code><\/div>\n<div><code>&lt;body&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 &lt;div class=\"container\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 &lt;div class=\"scenes\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div id=\"menu\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;img src=\"logo-arkanoid.jpeg\" alt=\"\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;button id=\"startButton\"&gt;Start Game&lt;\/button&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;\/div&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div id=\"levelUp\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;h2&gt;Level Completed!&lt;\/h2&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;button id=\"nextLevelButton\"&gt;Next Level&lt;\/button&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;\/div&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div id=\"gameOver\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;h1&gt;Game Over&lt;\/h1&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;button id=\"restartButton\"&gt;Restart Game&lt;\/button&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div id=\"gameOverScore\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;h2&gt;Your Score: 100&lt;\/h2&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;h2&gt;Best Score: 100&lt;\/h2&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;\/div&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;\/div&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;canvas id=\"gameCanvas\" width=\"480\" height=\"320\"&gt;&lt;\/canvas&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 &lt;\/div&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 &lt;div class=\"game-info\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div id=\"controls\" class=\"controls\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div class=\"sound-control\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;label&gt;Sound:&lt;\/label&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;button id=\"toggleSound\"&gt;TURN OFF&lt;\/button&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;\/div&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div class=\"volume-control\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;label for=\"volumeControl\" id=\"volumeControlLabel\"&gt;Music Volume:&lt;\/label&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;input type=\"range\" id=\"volumeControl\" min=\"0\" max=\"1\" step=\"0.1\" value=\"0.3\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;\/div&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;\/div&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div class=\"score\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;h3&gt;Records&lt;\/h3&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;ul id=\"recordsList\"&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;li&gt;1\u00ba - 000 Points&lt;\/li&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;li&gt;2\u00ba - 000 Points&lt;\/li&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;li&gt;3\u00ba - 000 Points&lt;\/li&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;li&gt;4\u00ba - 000 Points&lt;\/li&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;li&gt;5\u00ba - 000 Points&lt;\/li&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;\/ul&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;\/div&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 &lt;\/div&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 &lt;\/div&gt;<\/code><\/div>\n<div><code>\u00a0 \u00a0 &lt;script src=\"main.js\"&gt;&lt;\/script&gt;<\/code><\/div>\n<div><code>&lt;\/body&gt;<\/code><\/div>\n<div><code>&lt;\/html&gt;<\/code><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p><span style=\"font-family: arial, helvetica, sans-serif;\"><strong><span style=\"font-size: 14pt;\">Depois adiciono o css respons\u00e1vel pela estiliza\u00e7\u00e3o da p\u00e1gina :<\/span><\/strong><\/span><\/p>\n<p>&nbsp;<\/p>\n<div>\n<div><code>@font-face {<\/code><\/div>\n<div><code>\u00a0 font-family: \"Poppins\";<\/code><\/div>\n<div><code>\u00a0 src: url(\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@500;800&amp;display=swap\");<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>*,<\/code><\/div>\n<div><code>*:after,<\/code><\/div>\n<div><code>*:before {<\/code><\/div>\n<div><code>\u00a0 margin: 0;<\/code><\/div>\n<div><code>\u00a0 padding: 0;<\/code><\/div>\n<div><code>\u00a0 border: 0;<\/code><\/div>\n<div><code>\u00a0 font-size: 100%;<\/code><\/div>\n<div><code>\u00a0 vertical-align: baseline;<\/code><\/div>\n<div><code>\u00a0 text-decoration: none;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>ul {<\/code><\/div>\n<div><code>\u00a0 list-style: none;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>button:focus {<\/code><\/div>\n<div><code>\u00a0 outline: 0;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>:root {<\/code><\/div>\n<div><code>\u00a0 --green: rgb(166, 247, 80);<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>html,<\/code><\/div>\n<div><code>body {<\/code><\/div>\n<div><code>\u00a0 height: 100%;<\/code><\/div>\n<div><code>\u00a0 font-family: \"Poppins\", sans-serif;<\/code><\/div>\n<div><code>\u00a0 color: #6e7888;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>body {<\/code><\/div>\n<div><code>\u00a0 height: 100vh;<\/code><\/div>\n<div><code>\u00a0 width: 100vw;<\/code><\/div>\n<div><code>\u00a0 display: flex;<\/code><\/div>\n<div><code>\u00a0 justify-content: center;<\/code><\/div>\n<div><code>\u00a0 align-items: center;<\/code><\/div>\n<div><code>\u00a0 background-color: #222738;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>.container {<\/code><\/div>\n<div><code>\u00a0 width: 100%;<\/code><\/div>\n<div><code>\u00a0 height: 100%;<\/code><\/div>\n<div><code>\u00a0 display: flex;<\/code><\/div>\n<div><code>\u00a0 flex-direction: row;<\/code><\/div>\n<div><code>\u00a0 justify-content: center;<\/code><\/div>\n<div><code>\u00a0 align-items: center;<\/code><\/div>\n<div><code>\u00a0 gap: 1rem;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>.scenes {<\/code><\/div>\n<div><code>\u00a0 display: flex;<\/code><\/div>\n<div><code>\u00a0 flex-direction: column;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>canvas {<\/code><\/div>\n<div><code>\u00a0 border: 1px solid var(--green);<\/code><\/div>\n<div><code>\u00a0 background-color: #181825;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>#menu,<\/code><\/div>\n<div><code>#gameOver,<\/code><\/div>\n<div><code>#levelUp {<\/code><\/div>\n<div><code>\u00a0 min-width: 400px;<\/code><\/div>\n<div><code>\u00a0 min-height: 300px;<\/code><\/div>\n<div><code>\u00a0 display: none;<\/code><\/div>\n<div><code>\u00a0 flex-direction: column;<\/code><\/div>\n<div><code>\u00a0 justify-content: center;<\/code><\/div>\n<div><code>\u00a0 align-items: center;<\/code><\/div>\n<div><code>\u00a0 background: rgba(255, 255, 255, 0.95);<\/code><\/div>\n<div><code>\u00a0 background-color: #181825;<\/code><\/div>\n<div><code>\u00a0 padding: 30px;<\/code><\/div>\n<div><code>\u00a0 border: 2px solid #0095dd;<\/code><\/div>\n<div><code>\u00a0 text-align: center;<\/code><\/div>\n<div><code>\u00a0 border-radius: 10px;<\/code><\/div>\n<div><code>\u00a0 gap: 1rem;<\/code><\/div>\n<div><code>\u00a0 box-shadow: rgba(6, 24, 44, 0.4) 0px 0px 0px 2px,<\/code><\/div>\n<div><code>\u00a0 \u00a0 rgba(6, 24, 44, 0.65) 0px 4px 6px -1px,<\/code><\/div>\n<div><code>\u00a0 \u00a0 rgba(255, 255, 255, 0.08) 0px 1px 0px inset;<\/code><\/div>\n<div><code>\u00a0 font-size: 2rem;<\/code><\/div>\n<div><code>\u00a0 font-weight: 900;<\/code><\/div>\n<div><code>\u00a0 color: var(--green);<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>#menu &gt; img{<\/code><\/div>\n<div><code>\u00a0 width: 250px;<\/code><\/div>\n<div><code>\u00a0 max-height: 30%;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>#gameOver h1 {<\/code><\/div>\n<div><code>\u00a0 color: #f22c3d;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>.game-info {<\/code><\/div>\n<div><code>\u00a0 display: flex;<\/code><\/div>\n<div><code>\u00a0 flex-direction: column;<\/code><\/div>\n<div><code>\u00a0 justify-content: center;<\/code><\/div>\n<div><code>\u00a0 align-items: flex-start;<\/code><\/div>\n<div><code>\u00a0 padding: 1rem;<\/code><\/div>\n<div><code>\u00a0 gap: 1rem;<\/code><\/div>\n<div><code>\u00a0 font-size: 1rem;<\/code><\/div>\n<div><code>\u00a0 font-weight: 800;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>.controls {<\/code><\/div>\n<div><code>\u00a0 display: flex;<\/code><\/div>\n<div><code>\u00a0 flex-direction: column;<\/code><\/div>\n<div><code>\u00a0 justify-content: center;<\/code><\/div>\n<div><code>\u00a0 align-items: start;<\/code><\/div>\n<div><code>\u00a0 gap: 0.5rem;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>button {<\/code><\/div>\n<div><code>\u00a0 padding: 0.4rem 0.5rem;<\/code><\/div>\n<div><code>\u00a0 background: #0095dd;<\/code><\/div>\n<div><code>\u00a0 color: white;<\/code><\/div>\n<div><code>\u00a0 cursor: pointer;<\/code><\/div>\n<div><code>\u00a0 border: none;<\/code><\/div>\n<div><code>\u00a0 border-radius: 4px;<\/code><\/div>\n<div><code>\u00a0 font-size: 0.7rem;<\/code><\/div>\n<div><code>\u00a0 line-height: 0.7rem;<\/code><\/div>\n<div><code>\u00a0 font-weight: 800;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>button:hover {<\/code><\/div>\n<div><code>\u00a0 background: #007bb5;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>#controls label {<\/code><\/div>\n<div><code>\u00a0 font-size: 1rem;<\/code><\/div>\n<div><code>\u00a0 color: var(--green);<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>.sound-control {<\/code><\/div>\n<div><code>\u00a0 display: flex;<\/code><\/div>\n<div><code>\u00a0 flex-direction: column;<\/code><\/div>\n<div><code>\u00a0 gap: 0.2rem;<\/code><\/div>\n<div><code>\u00a0 border-radius: 4px;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>.volume-control {<\/code><\/div>\n<div><code>\u00a0 display: flex;<\/code><\/div>\n<div><code>\u00a0 flex-direction: column;<\/code><\/div>\n<div><code>\u00a0 gap: 0.8rem;<\/code><\/div>\n<div><code>\u00a0 border-radius: 4px;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>.volume-control input {<\/code><\/div>\n<div><code>\u00a0 width: calc(80% -20px);<\/code><\/div>\n<div><code>\u00a0 height: 10px;<\/code><\/div>\n<div><code>\u00a0 appearance: none;<\/code><\/div>\n<div><code>\u00a0 outline: none;<\/code><\/div>\n<div><code>\u00a0 background: #6e7888;<\/code><\/div>\n<div><code>\u00a0 border-radius: 5px;<\/code><\/div>\n<div><code>\u00a0 box-shadow: rgba(6, 24, 44, 0.4) 0px 0px 0px 2px,<\/code><\/div>\n<div><code>\u00a0 \u00a0 rgba(6, 24, 44, 0.65) 0px 4px 6px -1px,<\/code><\/div>\n<div><code>\u00a0 \u00a0 rgba(255, 255, 255, 0.08) 0px 1px 0px inset;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>.volume-control input::-webkit-slider-thumb {<\/code><\/div>\n<div><code>\u00a0 appearance: none;<\/code><\/div>\n<div><code>\u00a0 width: 18px;<\/code><\/div>\n<div><code>\u00a0 height: 18px;<\/code><\/div>\n<div><code>\u00a0 background: #0095dd;<\/code><\/div>\n<div><code>\u00a0 border: solid 2px white;<\/code><\/div>\n<div><code>\u00a0 border-radius: 50%;<\/code><\/div>\n<div><code>\u00a0 cursor: grab;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>.score h3 {<\/code><\/div>\n<div><code>\u00a0 font-weight: 900;<\/code><\/div>\n<div><code>\u00a0 color: var(--green);<\/code><\/div>\n<div><code>}<\/code><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p><span style=\"font-family: arial, helvetica, sans-serif;\"><strong><span style=\"font-size: 14pt;\">Por ultimo adiciono o script respons\u00e1vel por adicionar a l\u00f3gica do <a href=\"https:\/\/urutaudev.com.br\/games\/\">jogo<\/a>:<\/span><\/strong><\/span><\/p>\n<p>&nbsp;<\/p>\n<div>\n<div><code>\/\/ Constantes de configura\u00e7\u00e3o<\/code><\/div>\n<div><code>const BALL_SPEED_MULTIPLIER = 1.2;<\/code><\/div>\n<div><code>const INITIAL_LIVES = 1;<\/code><\/div>\n<div><code>const MAX_LEVELS = 5;<\/code><\/div>\n<div><code>const PADDLE_SPEED = 7;<\/code><\/div>\n<div><code>const PARTICLE_COUNT = 15;<\/code><\/div>\n<div><code>\/\/ Elementos do DOM<\/code><\/div>\n<div><code>const canvas = document.getElementById(\"gameCanvas\");<\/code><\/div>\n<div><code>const ctx = canvas.getContext(\"2d\");<\/code><\/div>\n<div><code>const menu = document.getElementById(\"menu\");<\/code><\/div>\n<div><code>const startButton = document.getElementById(\"startButton\");<\/code><\/div>\n<div><code>const gameOverMenu = document.getElementById(\"gameOver\");<\/code><\/div>\n<div><code>const gameOverScore = document.getElementById(\"gameOverScore\");<\/code><\/div>\n<div><code>const restartButton = document.getElementById(\"restartButton\");<\/code><\/div>\n<div><code>const levelUpMenu = document.getElementById(\"levelUp\");<\/code><\/div>\n<div><code>const nextLevelButton = document.getElementById(\"nextLevelButton\");<\/code><\/div>\n<div><code>const toggleSoundButton = document.getElementById(\"toggleSound\");<\/code><\/div>\n<div><code>const volumeControl = document.getElementById(\"volumeControl\");<\/code><\/div>\n<div><code>const volumeControlLabel = document.getElementById(\"volumeControlLabel\");<\/code><\/div>\n<div><code>const recordsList = document.getElementById(\"recordsList\");<\/code><\/div>\n<div><code>\/\/ Controle de som<\/code><\/div>\n<div><code>let soundOn = true;<\/code><\/div>\n<div><code>\/\/ Sons do jogo<\/code><\/div>\n<div><code>const music = new Audio(\"sounds\/background.mp3\");<\/code><\/div>\n<div><code>music.loop = true;<\/code><\/div>\n<div><code>music.volume = 0.3;<\/code><\/div>\n<div><code>class Ball {<\/code><\/div>\n<div><code>\u00a0 constructor(x, y, radius, dx, dy, color = \"#0095DD\") {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.x = x;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.y = y;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.radius = radius;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.dx = dx;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.dy = dy;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.color = color;<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 draw(ctx) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.beginPath();<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2);<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.fillStyle = this.color;<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.fill();<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.closePath();<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 move() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.x += this.dx;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.y += this.dy;<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 reset(x, y, dx, dy) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.x = x;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.y = y;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.dx = dx;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.dy = dy;<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>class Paddle {<\/code><\/div>\n<div><code>\u00a0 constructor(width, height, canvasWidth, color = \"#0095DD\") {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.width = width;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.height = height;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.canvasWidth = canvasWidth;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.x = (canvasWidth - width) \/ 2;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.color = color;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.speed = PADDLE_SPEED;<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 draw(ctx) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.beginPath();<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.rect(this.x, canvas.height - this.height, this.width, this.height);<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.fillStyle = this.color;<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.fill();<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.closePath();<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 move(direction) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 if (direction === \"right\" &amp;&amp; this.x &lt; this.canvasWidth - this.width) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.x += this.speed;<\/code><\/div>\n<div><code>\u00a0 \u00a0 } else if (direction === \"left\" &amp;&amp; this.x &gt; 0) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.x -= this.speed;<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 reset() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.x = (this.canvasWidth - this.width) \/ 2;<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>class Brick {<\/code><\/div>\n<div><code>\u00a0 constructor(x, y, width, height, status = 1, color = \"rgb(166, 247, 80)\") {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.x = x;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.y = y;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.width = width;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.height = height;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.status = status;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.color = color;<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 draw(ctx) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 if (this.status === 1) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 ctx.beginPath();<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 ctx.rect(this.x, this.y, this.width, this.height);<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 ctx.fillStyle = this.color;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 ctx.fill();<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 ctx.closePath();<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>class Particle {<\/code><\/div>\n<div><code>\u00a0 constructor(x, y, color) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.x = x;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.y = y;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.color = color;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.size = Math.random() * 3 + 1;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.speedX = Math.random() * 2 - 1;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.speedY = Math.random() * 2 - 1;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.alpha = 1;<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 draw(ctx) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.save();<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.globalAlpha = this.alpha;<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.beginPath();<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.fillStyle = this.color;<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.fill();<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.closePath();<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.restore();<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 update() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.x += this.speedX;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.y += this.speedY;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.alpha -= 0.02;<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>class SoundManager {<\/code><\/div>\n<div><code>\u00a0 constructor() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.sounds = {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 bounce: new Audio(\"sounds\/bounce.wav\"),<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 brick: new Audio(\"sounds\/brick.wav\"),<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 gameOver: new Audio(\"sounds\/gameover.wav\"),<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 levelUp: new Audio(\"sounds\/levelup.wav\"),<\/code><\/div>\n<div><code>\u00a0 \u00a0 };<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.soundOn = true;<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 playSound(soundName) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 const sound = this.sounds[soundName];<\/code><\/div>\n<div><code>\u00a0 \u00a0 sound.volume = 0.1;<\/code><\/div>\n<div><code>\u00a0 \u00a0 if (this.soundOn &amp;&amp; sound) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 sound.currentTime = 0;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 sound<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 .play()<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 .catch((error) =&gt; console.error(\"Erro ao reproduzir som:\", error));<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 toggleSound() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.soundOn = !this.soundOn; \/\/ Alterna entre ativar\/desativar o som<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>\/\/ Classe principal do jogo<\/code><\/div>\n<div><code>class Game {<\/code><\/div>\n<div><code>\u00a0 constructor() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.ball = new Ball(canvas.width \/ 2, canvas.height - 30, 10, 2, -2);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.paddle = new Paddle(75, 10, canvas.width);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.bricks = [];<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.particles = [];<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.score = 0;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.lives = INITIAL_LIVES;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.level = 1;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.maxLevels = MAX_LEVELS;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.rightPressed = false;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.leftPressed = false;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.isRunning = false;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.bricks = this.createBricks();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.soundManager = new SoundManager();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.musicManager = new SoundManager();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.addEventListeners();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.setRecords();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.showStartMenu();<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 createBricks() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 const brickRowCount = 3;<\/code><\/div>\n<div><code>\u00a0 \u00a0 const brickColumnCount = 5;<\/code><\/div>\n<div><code>\u00a0 \u00a0 const brickWidth = 75;<\/code><\/div>\n<div><code>\u00a0 \u00a0 const brickHeight = 20;<\/code><\/div>\n<div><code>\u00a0 \u00a0 const brickPadding = 10;<\/code><\/div>\n<div><code>\u00a0 \u00a0 const brickOffsetTop = 30;<\/code><\/div>\n<div><code>\u00a0 \u00a0 const brickOffsetLeft = 30;<\/code><\/div>\n<div><code>\u00a0 \u00a0 const bricks = [];<\/code><\/div>\n<div><code>\u00a0 \u00a0 for (let r = 0; r &lt; brickRowCount; r++) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 for (let c = 0; c &lt; brickColumnCount; c++) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 const brickX = c * (brickWidth + brickPadding) + brickOffsetLeft;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 const brickY = r * (brickHeight + brickPadding) + brickOffsetTop;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 const brick = new Brick(brickX, brickY, brickWidth, brickHeight);<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 bricks.push(brick);<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 \u00a0 console.log(bricks);<\/code><\/div>\n<div><code>\u00a0 \u00a0 return bricks; \/\/ Retorna uma lista plana de tijolos<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 addEventListeners() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 document.addEventListener(\"keydown\", this.handleKey.bind(this), false);<\/code><\/div>\n<div><code>\u00a0 \u00a0 document.addEventListener(\"keyup\", this.handleKey.bind(this), false);<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 handleKey(e, isKeyDown) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 const keyActions = {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 Right: \"rightPressed\",<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 ArrowRight: \"rightPressed\",<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 Left: \"leftPressed\",<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 ArrowLeft: \"leftPressed\",<\/code><\/div>\n<div><code>\u00a0 \u00a0 };<\/code><\/div>\n<div><code>\u00a0 \u00a0 const action = keyActions[e.key];<\/code><\/div>\n<div><code>\u00a0 \u00a0 if (action) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 e.preventDefault();<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \/\/ Define o estado com base no tipo do evento (keydown = true, keyup = false)<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this[action] = e.type === \"keydown\";<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 collisionDetection() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \/\/ Filtra apenas os tijolos ativos para colis\u00e3o<\/code><\/div>\n<div><code>\u00a0 \u00a0 const activeBricks = this.bricks.filter((brick) =&gt; brick.status === 1);<\/code><\/div>\n<div><code>\u00a0 \u00a0 \/\/ Verifica colis\u00e3o dos tijolos ativos<\/code><\/div>\n<div><code>\u00a0 \u00a0 activeBricks.forEach((brick) =&gt; {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 if (this.isCollidingWithBrick(brick)) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 this.handleBrickCollision(brick);<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 \u00a0 });<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 isCollidingWithBrick(brick) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \/\/ Verifica se a bola est\u00e1 colidindo com o tijolo<\/code><\/div>\n<div><code>\u00a0 \u00a0 return (<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.ball.x &gt; brick.x &amp;&amp;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.ball.x &lt; brick.x + brick.width &amp;&amp;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.ball.y &gt; brick.y &amp;&amp;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.ball.y &lt; brick.y + brick.height<\/code><\/div>\n<div><code>\u00a0 \u00a0 );<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 handleBrickCollision(brick) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \/\/ Reage \u00e0 colis\u00e3o: atualiza o status, incrementa a pontua\u00e7\u00e3o e trata efeitos<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.soundManager.playSound(\"brick\");<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.ball.dy = -this.ball.dy;<\/code><\/div>\n<div><code>\u00a0 \u00a0 brick.status = 0;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.score++;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.createParticles(brick.x + brick.width \/ 2, brick.y + brick.height \/ 2);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.checkLevelCompletion();<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 createParticles(x, y) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 for (let i = 0; i &lt; PARTICLE_COUNT; i++) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.particles.push(new Particle(x, y, \"#0095DD\"));<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 updateParticles() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.particles = this.particles.filter((particle) =&gt; {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 particle.update();<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 return particle.alpha &gt; 0;<\/code><\/div>\n<div><code>\u00a0 \u00a0 });<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 drawParticles() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.particles.forEach((particle) =&gt; particle.draw(ctx));<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 checkLevelCompletion() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 const totalBricks = this.bricks.filter(<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 (brick) =&gt; brick.status === 1<\/code><\/div>\n<div><code>\u00a0 \u00a0 ).length;<\/code><\/div>\n<div><code>\u00a0 \u00a0 if (totalBricks &lt; 1) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.showLevelUpMenu();<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 saveHighScore() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 let scores = JSON.parse(localStorage.getItem(\"highScores\")) || [];<\/code><\/div>\n<div><code>\u00a0 \u00a0 scores.push(this.score);<\/code><\/div>\n<div><code>\u00a0 \u00a0 scores.sort((a, b) =&gt; b - a);<\/code><\/div>\n<div><code>\u00a0 \u00a0 if (scores.length &gt; 5) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 scores.pop();<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 \u00a0 localStorage.setItem(\"highScores\", JSON.stringify(scores));<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 displayHighScores() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 const highScoresList = document.createElement(\"div\");<\/code><\/div>\n<div><code>\u00a0 \u00a0 const scores = JSON.parse(localStorage.getItem(\"highScores\")) || [];<\/code><\/div>\n<div><code>\u00a0 \u00a0 const userScore = document.createElement(\"h2\");<\/code><\/div>\n<div><code>\u00a0 \u00a0 userScore.textContent = `Your Score: ${this.score}`;<\/code><\/div>\n<div><code>\u00a0 \u00a0 highScoresList.appendChild(userScore);<\/code><\/div>\n<div><code>\u00a0 \u00a0 const bestScoreValue = scores.length &gt; 0 ? Math.max(...scores) : this.score;<\/code><\/div>\n<div><code>\u00a0 \u00a0 const bestScore = document.createElement(\"h2\");<\/code><\/div>\n<div><code>\u00a0 \u00a0 bestScore.textContent = `Best Score: ${bestScoreValue}`;<\/code><\/div>\n<div><code>\u00a0 \u00a0 highScoresList.appendChild(bestScore);<\/code><\/div>\n<div><code>\u00a0 \u00a0 gameOverScore.innerHTML = \"\";<\/code><\/div>\n<div><code>\u00a0 \u00a0 gameOverScore.appendChild(highScoresList);<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 showGameOverMenu() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.stopGame();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.saveHighScore();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.toggleMenu(gameOverMenu, true);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.displayHighScores();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.setRecords();<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 showLevelUpMenu() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.stopGame();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.toggleMenu(levelUpMenu, true);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.soundManager.playSound(\"levelUp\");<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 showStartMenu() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.toggleMenu(menu, true);<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 stopGame() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.isRunning = false;<\/code><\/div>\n<div><code>\u00a0 \u00a0 music.pause();<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 resetBallAndPaddle() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.ball.reset(canvas.width \/ 2, canvas.height - 30, 2, -2);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.paddle.reset();<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 resetBricks() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.bricks = this.createBricks();<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 resetGame() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.toggleMenu(menu, false);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.toggleMenu(gameOverMenu, false);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.toggleMenu(levelUpMenu, false);<\/code><\/div>\n<div><code>\u00a0 \u00a0 canvas.style.display = \"block\";<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.isRunning = true;<\/code><\/div>\n<div><code>\u00a0 \u00a0 music.play();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.score = 0;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.lives = INITIAL_LIVES;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.level = 1;<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.resetBricks();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.resetBallAndPaddle();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.draw();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.setRecords();<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 drawText(text, x, y, font = \"16px Arial\", color = \"#0095DD\") {<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.font = font;<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.fillStyle = color;<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.fillText(text, x, y);<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 drawScore() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.drawText(`Level: ${this.level} | Score: ${this.score} `, 8, 20);<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 drawLives() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.drawText(`Lifes: ${this.lives}`, canvas.width - 65, 20);<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 drawBricks(ctx) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.bricks.forEach((brick) =&gt; brick.draw(ctx));<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 draw() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 if (!this.isRunning) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 return;<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 \u00a0 ctx.clearRect(0, 0, canvas.width, canvas.height);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.drawBricks(ctx);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.ball.draw(ctx);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.paddle.draw(ctx);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.drawScore();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.drawLives();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.drawParticles();<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.collisionDetection();<\/code><\/div>\n<div><code>\u00a0 \u00a0 \/\/ Movimenta\u00e7\u00e3o da bola<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.ball.move();<\/code><\/div>\n<div><code>\u00a0 \u00a0 \/\/ Colis\u00e3o com as paredes<\/code><\/div>\n<div><code>\u00a0 \u00a0 if (<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.ball.x + this.ball.dx &gt; canvas.width - this.ball.radius ||<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.ball.x + this.ball.dx &lt; this.ball.radius<\/code><\/div>\n<div><code>\u00a0 \u00a0 ) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.ball.dx = -this.ball.dx;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.soundManager.playSound(\"bounce\");<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 \u00a0 if (this.ball.y + this.ball.dy &lt; this.ball.radius) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.ball.dy = -this.ball.dy;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.soundManager.playSound(\"bounce\");<\/code><\/div>\n<div><code>\u00a0 \u00a0 } else if (this.ball.y + this.ball.dy &gt; canvas.height - this.ball.radius) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 if (<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 this.ball.x &gt; this.paddle.x &amp;&amp;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 this.ball.x &lt; this.paddle.x + this.paddle.width<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 ) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \/\/ Ajustar a dire\u00e7\u00e3o da bola com base no ponto de impacto na raquete<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 const relativeHit =<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (this.ball.x - (this.paddle.x + this.paddle.width \/ 2)) \/<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (this.paddle.width \/ 2);<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 this.ball.dx = relativeHit * 5;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 this.ball.dy = -this.ball.dy;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 this.soundManager.playSound(\"bounce\");<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 } else {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 this.lives--;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 this.soundManager.playSound(\"gameOver\");<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 if (this.lives === 0) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 this.showGameOverMenu();<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 } else {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 this.resetBallAndPaddle();<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 \u00a0 \/\/ Movimenta\u00e7\u00e3o da raquete<\/code><\/div>\n<div><code>\u00a0 \u00a0 if (this.rightPressed) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.paddle.move(\"right\");<\/code><\/div>\n<div><code>\u00a0 \u00a0 } else if (this.leftPressed) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.paddle.move(\"left\");<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.updateParticles();<\/code><\/div>\n<div><code>\u00a0 \u00a0 requestAnimationFrame(this.draw.bind(this));<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 nextLevel() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.toggleMenu(levelUpMenu, false);<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.level++;<\/code><\/div>\n<div><code>\u00a0 \u00a0 if (this.level &gt; this.maxLevels) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 alert(\"Parab\u00e9ns! Voc\u00ea completou todos os n\u00edveis!\");<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 document.location.reload();<\/code><\/div>\n<div><code>\u00a0 \u00a0 } else {<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \/\/ Aumentar a velocidade da bola<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.ball.dx *= BALL_SPEED_MULTIPLIER;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.ball.dy *= BALL_SPEED_MULTIPLIER;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \/\/ Resetar os tijolos<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.resetBricks();<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 \/\/ Resetar a posi\u00e7\u00e3o da bola e raquete<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.resetBallAndPaddle();<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.isRunning = true;<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 music.play();<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 this.draw();<\/code><\/div>\n<div><code>\u00a0 \u00a0 }<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 setRecords() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 const scores = JSON.parse(localStorage.getItem(\"highScores\")) || [];<\/code><\/div>\n<div><code>\u00a0 \u00a0 const listItems = scores<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 .map((score, index) =&gt; `&lt;li&gt;${index + 1}\u00ba - ${score} Points&lt;\/li&gt;`)<\/code><\/div>\n<div><code>\u00a0 \u00a0 \u00a0 .join(\"\");<\/code><\/div>\n<div><code>\u00a0 \u00a0 recordsList.innerHTML = listItems;<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 toggleSound() {<\/code><\/div>\n<div><code>\u00a0 \u00a0 this.soundManager.toggleSound();<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>\u00a0 \/\/ Fun\u00e7\u00f5es de interface<\/code><\/div>\n<div><code>\u00a0 toggleMenu(selectedMenu, show) {<\/code><\/div>\n<div><code>\u00a0 \u00a0 selectedMenu.style.display = show ? \"flex\" : \"none\";<\/code><\/div>\n<div><code>\u00a0 \u00a0 canvas.style.display = show ? \"none\" : \"block\";<\/code><\/div>\n<div><code>\u00a0 }<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>function updateVolumeControlLabel() {<\/code><\/div>\n<div><code>\u00a0 const volumeValue = volumeControl.value * 100;<\/code><\/div>\n<div><code>\u00a0 volumeControlLabel.innerText = `Music Volume: ${volumeValue}%`;<\/code><\/div>\n<div><code>}<\/code><\/div>\n<div><code>\/\/ Controle de som<\/code><\/div>\n<div><code>toggleSoundButton.addEventListener(\"click\", () =&gt; {<\/code><\/div>\n<div><code>\u00a0 soundOn = !soundOn;<\/code><\/div>\n<div><code>\u00a0 music.muted = !soundOn;<\/code><\/div>\n<div><code>\u00a0 game.toggleSound();<\/code><\/div>\n<div><code>\u00a0 toggleSoundButton.textContent = soundOn ? \"Turn OFF\" : \"Turn ON\";<\/code><\/div>\n<div><code>});<\/code><\/div>\n<div><code>\/\/ Controle do volume<\/code><\/div>\n<div><code>volumeControl.addEventListener(\"input\", () =&gt; {<\/code><\/div>\n<div><code>\u00a0 music.volume = volumeControl.value;<\/code><\/div>\n<div><code>\u00a0 updateVolumeControlLabel();<\/code><\/div>\n<div><code>});<\/code><\/div>\n<div><code>\/\/ Eventos dos bot\u00f5es<\/code><\/div>\n<div><code>startButton.addEventListener(\"click\", () =&gt; game.resetGame());<\/code><\/div>\n<div><code>restartButton.addEventListener(\"click\", () =&gt; game.resetGame());<\/code><\/div>\n<div><code>nextLevelButton.addEventListener(\"click\", () =&gt; game.nextLevel());<\/code><\/div>\n<div><code>\/\/ Instanciar o jogo<\/code><\/div>\n<div><code>const game = new Game();<\/code><\/div>\n<div><code>updateVolumeControlLabel();<\/code><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-family: arial, helvetica, sans-serif;\"><strong><span style=\"font-size: 14pt;\">Deixo aqui um v\u00eddeo curto de como ficou o Jogo:<\/span><\/strong><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><iframe loading=\"lazy\" title=\"how to make a arkanoid in javascript  #coding #gamejavachina  #javascript\" width=\"800\" height=\"450\" src=\"https:\/\/www.youtube.com\/embed\/Hp2VF_4pM_c?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>&nbsp;<\/p>\n<h2><\/h2>\n<p><span style=\"font-family: arial, helvetica, sans-serif;\"><strong><span style=\"font-size: 14pt;\">Caso queira conferir o jogo, voc\u00ea pode joga-lo no link abaixo:<\/span><\/strong><\/span><\/p>\n<p><span style=\"font-size: 14pt; font-family: arial, helvetica, sans-serif;\"><a href=\"https:\/\/urutaudev.com.br\/games\/arkanoid\/\">Jogar Arkanoid Game<\/a><\/span><\/p>\n<h2><span style=\"font-family: arial, helvetica, sans-serif;\">Conclus\u00e3o<\/span><\/h2>\n<div>\n<div><span style=\"font-size: 14pt; font-family: arial, helvetica, sans-serif;\">Neste post voc\u00ea pode acompanhar como criar uma vers\u00e3o do jogo Arkanoid em <a href=\"https:\/\/urutaudev.com.br\/index.php\/category\/tutorias\/javascript\/\">JavaScript<\/a>! Ao seguir os passos deste tutorial, voc\u00ea tem uma compreens\u00e3o de como construir um jogo do zero, implementando funcionalidades essenciais como o movimento da bola, a colis\u00e3o com os blocos e a pontua\u00e7\u00e3o.<\/span><\/div>\n<div><span style=\"font-size: 14pt; font-family: arial, helvetica, sans-serif;\">A constru\u00e7\u00e3o de jogos simples \u00a0como esse ajuda aprimorar nossas habilidades em JavaScript, caso queira adicione mais funcionalidades e refinamento ao jogo e compartilhe na descri\u00e7\u00e3o, gostaria de ver formas melhores de construir este jogo.<\/span><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-family: arial, helvetica, sans-serif;\">C\u00f3digo fonte do Arkanoid Game em Javascript:<\/span><\/h2>\n<p><span style=\"font-family: arial, helvetica, sans-serif;\"><strong><span style=\"font-size: 14pt;\"><a href=\"https:\/\/github.com\/JrDevCJ\/javascript-games\/tree\/main\/arkanoid\" target=\"_blank\" rel=\"noopener\">C\u00f3digo Fonte<\/a><\/span><\/strong><\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; &nbsp; &nbsp; Introdu\u00e7\u00e3o Neste post, vamos explorar passo a passo como criar uma vers\u00e3o simples do Arkanoid, um game<\/p>\n","protected":false},"author":1,"featured_media":685,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[1,14,5],"tags":[136,137,114,82,26],"class_list":["post-679","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-javascript","category-tutorias","tag-arkanoid","tag-arkanoid-javascript","tag-game","tag-games-javascript","tag-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Como fazer Arkanoid Game em Javascript - UrutauDev<\/title>\n<meta name=\"description\" content=\"Neste post, vamos explorar como fazer Arkanoid Game em Javascript uma vers\u00e3o simples do Arkanoid um game cl\u00e1ssico dos anos 80.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como fazer Arkanoid Game em Javascript - UrutauDev\" \/>\n<meta property=\"og:description\" content=\"Neste post, vamos explorar como fazer Arkanoid Game em Javascript uma vers\u00e3o simples do Arkanoid um game cl\u00e1ssico dos anos 80.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/\" \/>\n<meta property=\"og:site_name\" content=\"UrutauDev\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-07T20:26:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-07T21:34:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/urutaudev.com.br\/wp-content\/uploads\/2024\/10\/Como-fazer-Arkanoid-Game-em-Javascript2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1023\" \/>\n\t<meta property=\"og:image:height\" content=\"701\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"C. Junior\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"C. Junior\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/\"},\"author\":{\"name\":\"C. Junior\",\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/#\\\/schema\\\/person\\\/7e321618d23a158d5a42d5cfbdd99dd6\"},\"headline\":\"Como fazer Arkanoid Game em Javascript\",\"datePublished\":\"2024-10-07T20:26:44+00:00\",\"dateModified\":\"2024-10-07T21:34:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/\"},\"wordCount\":297,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/urutaudev.com.br\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Como-fazer-Arkanoid-Game-em-Javascript2.png\",\"keywords\":[\"arkanoid\",\"arkanoid javascript\",\"game\",\"games javascript\",\"javascript\"],\"articleSection\":[\"Blog\",\"Javascript\",\"Tutorias\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/\",\"url\":\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/\",\"name\":\"Como fazer Arkanoid Game em Javascript - UrutauDev\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/urutaudev.com.br\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Como-fazer-Arkanoid-Game-em-Javascript2.png\",\"datePublished\":\"2024-10-07T20:26:44+00:00\",\"dateModified\":\"2024-10-07T21:34:43+00:00\",\"description\":\"Neste post, vamos explorar como fazer Arkanoid Game em Javascript uma vers\u00e3o simples do Arkanoid um game cl\u00e1ssico dos anos 80.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/#primaryimage\",\"url\":\"https:\\\/\\\/urutaudev.com.br\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Como-fazer-Arkanoid-Game-em-Javascript2.png\",\"contentUrl\":\"https:\\\/\\\/urutaudev.com.br\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Como-fazer-Arkanoid-Game-em-Javascript2.png\",\"width\":1023,\"height\":701,\"caption\":\"Como fazer Arkanoid Game em Javascript\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/2024\\\/10\\\/07\\\/como-fazer-arkanoid-game-em-javascript\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/urutaudev.com.br\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como fazer Arkanoid Game em Javascript\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/#website\",\"url\":\"https:\\\/\\\/urutaudev.com.br\\\/\",\"name\":\"UrutauDev\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/urutaudev.com.br\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/#organization\",\"name\":\"UrutauDev\",\"url\":\"https:\\\/\\\/urutaudev.com.br\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/urutaudev.com.br\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/cropped-urutau-dev-logo.png\",\"contentUrl\":\"https:\\\/\\\/urutaudev.com.br\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/cropped-urutau-dev-logo.png\",\"width\":100,\"height\":84,\"caption\":\"UrutauDev\"},\"image\":{\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/urutaudev.com.br\\\/#\\\/schema\\\/person\\\/7e321618d23a158d5a42d5cfbdd99dd6\",\"name\":\"C. Junior\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e7df4c63012e2f6991311d4037bdc57752b996058cf1396747a7ab74e8ac032e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e7df4c63012e2f6991311d4037bdc57752b996058cf1396747a7ab74e8ac032e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e7df4c63012e2f6991311d4037bdc57752b996058cf1396747a7ab74e8ac032e?s=96&d=mm&r=g\",\"caption\":\"C. Junior\"},\"sameAs\":[\"http:\\\/\\\/urutaudev.com.br\",\"instagram.com\\\/urutautec\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC8pDLb5GaYBAoWwQkIzrhRw\"],\"url\":\"https:\\\/\\\/urutaudev.com.br\\\/index.php\\\/author\\\/urutaudev-com-br\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Como fazer Arkanoid Game em Javascript - UrutauDev","description":"Neste post, vamos explorar como fazer Arkanoid Game em Javascript uma vers\u00e3o simples do Arkanoid um game cl\u00e1ssico dos anos 80.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/","og_locale":"en_US","og_type":"article","og_title":"Como fazer Arkanoid Game em Javascript - UrutauDev","og_description":"Neste post, vamos explorar como fazer Arkanoid Game em Javascript uma vers\u00e3o simples do Arkanoid um game cl\u00e1ssico dos anos 80.","og_url":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/","og_site_name":"UrutauDev","article_published_time":"2024-10-07T20:26:44+00:00","article_modified_time":"2024-10-07T21:34:43+00:00","og_image":[{"width":1023,"height":701,"url":"https:\/\/urutaudev.com.br\/wp-content\/uploads\/2024\/10\/Como-fazer-Arkanoid-Game-em-Javascript2.png","type":"image\/png"}],"author":"C. Junior","twitter_card":"summary_large_image","twitter_misc":{"Written by":"C. Junior","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/#article","isPartOf":{"@id":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/"},"author":{"name":"C. Junior","@id":"https:\/\/urutaudev.com.br\/#\/schema\/person\/7e321618d23a158d5a42d5cfbdd99dd6"},"headline":"Como fazer Arkanoid Game em Javascript","datePublished":"2024-10-07T20:26:44+00:00","dateModified":"2024-10-07T21:34:43+00:00","mainEntityOfPage":{"@id":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/"},"wordCount":297,"commentCount":0,"publisher":{"@id":"https:\/\/urutaudev.com.br\/#organization"},"image":{"@id":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/urutaudev.com.br\/wp-content\/uploads\/2024\/10\/Como-fazer-Arkanoid-Game-em-Javascript2.png","keywords":["arkanoid","arkanoid javascript","game","games javascript","javascript"],"articleSection":["Blog","Javascript","Tutorias"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/","url":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/","name":"Como fazer Arkanoid Game em Javascript - UrutauDev","isPartOf":{"@id":"https:\/\/urutaudev.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/#primaryimage"},"image":{"@id":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/#primaryimage"},"thumbnailUrl":"https:\/\/urutaudev.com.br\/wp-content\/uploads\/2024\/10\/Como-fazer-Arkanoid-Game-em-Javascript2.png","datePublished":"2024-10-07T20:26:44+00:00","dateModified":"2024-10-07T21:34:43+00:00","description":"Neste post, vamos explorar como fazer Arkanoid Game em Javascript uma vers\u00e3o simples do Arkanoid um game cl\u00e1ssico dos anos 80.","breadcrumb":{"@id":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/#primaryimage","url":"https:\/\/urutaudev.com.br\/wp-content\/uploads\/2024\/10\/Como-fazer-Arkanoid-Game-em-Javascript2.png","contentUrl":"https:\/\/urutaudev.com.br\/wp-content\/uploads\/2024\/10\/Como-fazer-Arkanoid-Game-em-Javascript2.png","width":1023,"height":701,"caption":"Como fazer Arkanoid Game em Javascript"},{"@type":"BreadcrumbList","@id":"https:\/\/urutaudev.com.br\/index.php\/2024\/10\/07\/como-fazer-arkanoid-game-em-javascript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/urutaudev.com.br\/"},{"@type":"ListItem","position":2,"name":"Como fazer Arkanoid Game em Javascript"}]},{"@type":"WebSite","@id":"https:\/\/urutaudev.com.br\/#website","url":"https:\/\/urutaudev.com.br\/","name":"UrutauDev","description":"","publisher":{"@id":"https:\/\/urutaudev.com.br\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/urutaudev.com.br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/urutaudev.com.br\/#organization","name":"UrutauDev","url":"https:\/\/urutaudev.com.br\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/urutaudev.com.br\/#\/schema\/logo\/image\/","url":"https:\/\/urutaudev.com.br\/wp-content\/uploads\/2023\/08\/cropped-urutau-dev-logo.png","contentUrl":"https:\/\/urutaudev.com.br\/wp-content\/uploads\/2023\/08\/cropped-urutau-dev-logo.png","width":100,"height":84,"caption":"UrutauDev"},"image":{"@id":"https:\/\/urutaudev.com.br\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/urutaudev.com.br\/#\/schema\/person\/7e321618d23a158d5a42d5cfbdd99dd6","name":"C. Junior","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e7df4c63012e2f6991311d4037bdc57752b996058cf1396747a7ab74e8ac032e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e7df4c63012e2f6991311d4037bdc57752b996058cf1396747a7ab74e8ac032e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e7df4c63012e2f6991311d4037bdc57752b996058cf1396747a7ab74e8ac032e?s=96&d=mm&r=g","caption":"C. Junior"},"sameAs":["http:\/\/urutaudev.com.br","instagram.com\/urutautec","https:\/\/www.youtube.com\/channel\/UC8pDLb5GaYBAoWwQkIzrhRw"],"url":"https:\/\/urutaudev.com.br\/index.php\/author\/urutaudev-com-br\/"}]}},"_links":{"self":[{"href":"https:\/\/urutaudev.com.br\/index.php\/wp-json\/wp\/v2\/posts\/679","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/urutaudev.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/urutaudev.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/urutaudev.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/urutaudev.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=679"}],"version-history":[{"count":5,"href":"https:\/\/urutaudev.com.br\/index.php\/wp-json\/wp\/v2\/posts\/679\/revisions"}],"predecessor-version":[{"id":682,"href":"https:\/\/urutaudev.com.br\/index.php\/wp-json\/wp\/v2\/posts\/679\/revisions\/682"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/urutaudev.com.br\/index.php\/wp-json\/wp\/v2\/media\/685"}],"wp:attachment":[{"href":"https:\/\/urutaudev.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=679"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/urutaudev.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=679"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/urutaudev.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}