Que tan lejos estamos en un juego de javascript [13]
En este tutorial vamos a que tan lejos estamos en un juego de javascript siguiendo estos pasos:
- Math.pow
- Math.sqrt
- Descubrir que tan lejos estamos de vender el avión.
- Teorema de pitágoras.
Codigo: https://github.com/programadornovato/avionJavascript/commit/fc7fe8741085f7247ef9269bbf6390f54a7c927c
css/css.css
body{ margin: 0px; padding: 0px; background-color:#b4dcfc; cursor: crosshair; } #mapa{ user-select: none; position: absolute; width: 1024px; } #canvas{ position: absolute; left: 0px; } #avion{ position: absolute; top: 500px; left: 20px; z-index: 100; width: 70px; display: none; transition: left 2s cubic-bezier(0.42, -0.3, 0.78, 1.25), top 2s cubic-bezier(0.42, -0.3, 0.78, 1.25); } #no{ position: absolute; top: 500px; left: 20px; z-index: 100; width: 30px; display: none; transition: left 2s cubic-bezier(0.42, -0.3, 0.78, 1.25), top 2s cubic-bezier(0.42, -0.3, 0.78, 1.25); } #fuego{ position: absolute; top: 500px; left: 20px; z-index: 200; width: 600px; display: none; } #llora{ position: absolute; top: 520px; left: 20px; z-index: 200; width: 100px; display: none; }
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Ayudame a vender mi avion!!!!</title> <link rel="stylesheet" href="css/css.css"> </head> <body> <img src="img/mapa.png" id="mapa" > <img src="img/avion.png" id="avion"> <img src="img/no.gif" id="no"> <img src="img/fuego.gif" id="fuego"> <img src="img/llora.png" id="llora"> <script src="js/juego.js"></script> </body> </html>
js/juego.js
//alert("hola desde javascript"); var mapa = document.getElementById('mapa'); var anchoMapa = mapa.clientWidth; var altoMapa = mapa.clientHeight; var canvas = document.createElement('canvas'); canvas.width = anchoMapa; canvas.height = altoMapa; var matriz=[]; var contador=0; var verPais=false; var numFallos=0; var limiteFallos=5; var xy=null; var oportunidadesRestantes=limiteFallos-numFallos; window.onload = function (event) { var ctx=canvas.getContext('2d'); ctx.drawImage(mapa, 0, 0, anchoMapa, this.altoMapa); document.body.appendChild(canvas); canvas.setAttribute('id', 'canvas'); ctx.fillStyle="red"; ctx.font="20px Arial"; ctx.fillText(`Oportunidades ${oportunidadesRestantes}`,10,500); buscaPais(); do{ xy=buscaPais(); if(xy==null){ location.reload(); break; }else{ llenarUnPais(xy['posAleatoriaMapaX'],xy['posAleatoriaMapaY']); } } while(contador<800); } function llenarUnPais(x,y) { contador=0; llenarArea(x,y,1); llenarArea(x,y,-1); if(verPais==true){ llenarTodo(); } } function buscaPais(){ var con=0; do{ var posAleatoriaMapaX=numeroAleatorio(anchoMapa); var posAleatoriaMapaY=numeroAleatorio(altoMapa); var datosDelPixel=canvas.getContext('2d').getImageData(posAleatoriaMapaX,posAleatoriaMapaY,1,1).data; //var ctx=canvas.getContext('2d'); //ctx.fillStyle='rgb(0, 102, 0)'; //ctx.fillRect(posAleatoriaMapaX,posAleatoriaMapaY,8,8); con++; if(con>50)return null; }while(datosDelPixel[0]!=255 && datosDelPixel[1]!=255 && datosDelPixel[2]!=255); return {posAleatoriaMapaX,posAleatoriaMapaY}; } function llenarArea(x, y,haciaArribaAbajo) { var posx = x; var posy = y; var datosDelPixel = canvas.getContext('2d').getImageData(posx, posy, 1, 1).data; var haciaDerechaIzquierda=1; var perdida=15; while (datosDelPixel[0] == 255 && datosDelPixel[1] == 255 && datosDelPixel[2] == 255) { while (datosDelPixel[0] == 255 && datosDelPixel[1] == 255 && datosDelPixel[2] == 255) { datosDelPixel = canvas.getContext('2d').getImageData(posx, posy, 1, 1).data; posx = posx + haciaDerechaIzquierda; matriz[contador]={posx,posy}; contador++; } posy=posy+haciaArribaAbajo; haciaDerechaIzquierda=haciaDerechaIzquierda*-1; for (let i = 0; i < perdida; i++) { posx=posx+haciaDerechaIzquierda; matriz[contador]={posx,posy}; contador++; } datosDelPixel = canvas.getContext('2d').getImageData(posx, posy, 1, 1).data; } } function llenarTodo() { for (let i = 0; i < contador; i++) { var ctx = canvas.getContext('2d'); ctx.fillStyle = "rgb(0, 0, 204)"; ctx.fillRect(matriz[i]['posx'],matriz[i]['posy'],1,1); } } function numeroAleatorio(limiteMax){ return Math.floor(Math.random()*limiteMax); } canvas.addEventListener('click',clickCanvas); function clickCanvas (event) { var encontrado=false; var avion=document.getElementById('avion'); var fuego=document.getElementById('fuego'); var no=document.getElementById('no'); for (let i = 0; i < contador; i++) { if( (matriz[i]['posx']==event.offsetX && matriz[i]['posy']==event.offsetY) || (matriz[i]['posx']==event.offsetX && matriz[i]['posy']==event.offsetY+1) || (matriz[i]['posx']==event.offsetX && matriz[i]['posy']==event.offsetY-1) ){ encontrado=true; break; } } if(encontrado==true){ avion.style.display="inline"; fuego.style.display="inline"; mueveElemento(event.offsetX,event.offsetY,avion); mueveElemento(event.offsetX,event.offsetY,fuego); var jet=new Audio('audio/jet.mp3'); jet.play(); var tiempoEspera=setInterval(function(){ var respuesta=confirm("Felicidades has vendido el avion presidencia!!!¿Desear jugar otra partida?"); if(respuesta==true){ location.reload(); } clearInterval(tiempoEspera); },3000); } else{ //console.log('Nop aqui no queremos un avion tan lujosos'); var pierde=new Audio('audio/pierde.mp3'); pierde.play(); no.style.display="inline"; mueveElemento(event.offsetX,event.offsetY,no); var ctx=canvas.getContext('2d'); ctx.fillStyle="blue"; ctx.clearRect(10,480,230,50); ctx.fillStyle="red"; ctx.font="20px Arial"; numFallos++; oportunidadesRestantes=limiteFallos-numFallos; ctx.fillText(`Oportunidades ${oportunidadesRestantes}`,10,500); var distancia=distanciaEntrePuntos(event,xy); var mensaje=muestraDistancia(distancia); ctx.fillText(mensaje,10,520); if(oportunidadesRestantes<0){ document.getElementById('llora').style.display='inline'; ctx.clearRect(10,480,230,50); ctx.fillText(`Oportunidades 0`,10,500); ctx.fillText(mensaje,10,520); canvas.removeEventListener('click',clickCanvas); llenarTodo(); var tiempoEspera=setInterval(function(){ var respuesta=confirm("Lo siento no pudiste vender el avion presidencia!!!¿Desear jugar otra partida?"); if(respuesta==true){ location.reload(); } clearInterval(tiempoEspera); },2000); } } } function mueveElemento(x,y,elemento) { var contenedor=document.getElementsByTagName('body')[0]; var xPosicion=x-contenedor.getBoundingClientRect().left-(elemento.clientWidth/2); var yPosicion=y-contenedor.getBoundingClientRect().top-(elemento.clientHeight/2); elemento.style.left=xPosicion+"px"; elemento.style.top=yPosicion+"px"; } function distanciaEntrePuntos(event,xy){ var difX=event.offsetX-xy['posAleatoriaMapaX']; var difY=event.offsetY-xy['posAleatoriaMapaY']; var distancia=Math.sqrt(Math.pow(difX,2)+Math.pow(difY,2)); return distancia; } function muestraDistancia(distancia){ if(distancia<100){ return "Casi te quemas"; } else if(distancia<200){ return "Muy caliente"; } else if(distancia<300){ return "Caliente"; } else if(distancia<400){ return "Templado"; } else if(distancia<600){ return "Frio"; } else if(distancia<800){ return "Muy Frio"; } else{ return "congelado"; } }
Colors picker: https://www.w3schools.com/colors/colors_picker.asp
[Curso] TensorFlow js en Español 🇪🇸: https://www.youtube.com/playlist?list=PLCTD_CpMeEKSEOKBFyG6PxQOAvQc7HZSB
[Curso] Machine Learning JavaScript en Español 🇪🇸 con ML5: https://www.youtube.com/playlist?list=PLCTD_CpMeEKQYuoil2uSTX19S8Mfmny6B
[Curso] Java Netbeans Completo☕: https://www.youtube.com/playlist?list=PLCTD_CpMeEKTT-qEHGqZH3fkBgXH4GOTF
Como sacar las comillas invertidas: https://platzi.com/discusiones/1339-fundamentos-javascript/52373-hola-a-todos-tengo-una-consulta-alguien-sabe-como-hacer-las-comillas-invertidas-con-el-teclado/
🎦 Esta lista de reproducción: https://www.youtube.com/playlist?list=PLCTD_CpMeEKRTg39rjg2AqNxQCTz_UiBR .
Codigos en gdrive: https://drive.google.com/drive/folders/1v6u0tPYPRm_7qSbEt6IPghdzr9A9f08a?usp=sharing
🔗 Facebook: https://facebook.com/ProgramadorNovatoOficial
🔗 Twitter: https://twitter.com/programadornova
🔗 Linkedin: https://www.linkedin.com/in/programadornovato/
🔗 Instagram: https://www.instagram.com/programadornovato/
<<Anterior tutorial Siguiente tutorial >>
Ave que vuela, a la cazuela.