Ir al contenido principal

Tablero para crear juegos

Scan me!

Tablero SVG - Aplicación del While

  1.  Crear un archivo nuevo de HTML con el siguiente código:
<style>
    * {
        box-sizing: border-box ;
        font-family: Segoe UI Light, "Ubuntu" ;
    }
    svg {
        margin: auto ;
        display:block ;
    }
    rect {
        transition: 300ms all ;
    }
    rect:hover {

    }
    #juego {
        background: url( paisaje.svg ) center center ;
        background-size: cover ;
    }
    body {

    }

</style>
<svg id="juego"></svg>
<script>
    var generarRect = function( id, origen, medidas, colores ) {
        var r = "<rect " ;
        r+= "id='" + id + "' ";
        r+= "x='" + (origen.x||origen[0]) + "' ";
        r+= "y='" + (origen.y||origen[1]) + "' ";
        r+= "width='" + (medidas.ancho||medidas[0]) + "' ";
        r+= "height='" + (medidas.alto||medidas[1]) + "' ";
        r+= "fill='"+(colores.relleno||colores.fill||"black")+"' " ;
        r+= "stroke='"+(colores.stroke||colores.linea||"whie")+"' " ;
        r+="></rect>" ;
        return r ;
    }
</script>
<script id="programando">
</script>
  1.  Ahora programamos todo dentro del SCRIPT de nombre programando. Creamos una variable para los datos:
    • Área de dibujo (será para controlar el objeto SVG; igualar al id del SVG)
    • Lado del cuadrado (un escalar; calcular más o menos entre 15 y 40 pixeles, solamente el número)
    • Cuadrados de ancho (un escalar)
    • Cuadrados de alto (un escalar)
var cuadrados = {} ;
|
  • Distinguir cuál de los siguientes podría ser el código para cada uno de los puntos anteriores...
cuadrados.deancho = 15
|
var area_dibujo = jueg
|
cuadrados.medida = 30
|
cuadrados.dealto = 10
|
La manera de agregar un rectángulo dentro un objeto SVG es asignando el .innerHTML del objeto el valor del rectángulo. Ejemplo (para dentro de un SCRIPT):
    // Dos ejemplos, dos formas de agregar.
    area_dibujo.innerHTML += generarRect( "rec1", {x: 100, y:25}, {ancho: 50, alto: 50}, {fondo: "red", linea: "blue"} ) ;
    area_dibujo.innerHTML += generarRect( "rec2", [150,25], [50,50], {fondo: "transparent", linea: "grey" ) ;
Es sólo una nota. Todavía no lo hacemos.
Ahora, ya que tenemos las medidas de un cuadrado y la cantidad horizontal de cuadrados haremos lo siguiente.
  1. Crear una variable para calcular el total de cuadrados en horizontal. Asignar directamente la multiplicación entre la cantidad de cuadrados en horizontal o ancho por el lado del cuadrado.
var calc = {} ; calc.a
|
  1.  Crear una variable para calcular el total de cuadrados en vertical. Se repite lo anterior pero en lo vertical.
calc.alto = cuadrados.
|
  1.  Asignarle dos .style al Área de dibujo. Uno será el .width= para el ancho, y el otro .height= para el alto.
    area_dibujo.style.width = xxxxx ;
    area_dibujo.style.height = xxxxx ;
Reemplazar las xxxxx con lo calculado en el punto 3 y 4.
  1.  Para probar, generar con estructura while(){} toda una fila de cuadrados. Aquí les pido que piensen cómo controlar el while para que haga la cantidad horizontal de cuadrados del tablero. En el medio de la repetición crearán rectángulos según el método anteriormente mencionado (Ver código siguiente). Sugiero crear la ID según la variable que controle las repeticiones.
var posx = 0 ; while(
|
Luego dentro de la repetición del while() pondremos algo similar a esto (en reemplazo de las xxxxx:
    area_dibujo.innerHTML += generarRect( "r"+posx, {x: posx*cuadrados.medida, y: 0}, [50,50] ) ;
  1. ¿Cómo será para generar varias filas de cuadrados? Indagar.

Construyendo al personaje

  1. Vamos a crear un conjunto que contiene opciones, preferencias, habilidades y propiedades del personaje. Sea lo que fuera el personaje (Pacman, la viborita, Bomberman, etc.) juntamos todas estas opciones en una variable del tipo conjunto (uso de llaves).
var personaje = {} ;
|
  1. Al personaje le agregamos una posición en horizontal y otra en vertical:
personaje.x = 4 ; pers
|
Ahora le agregamos dos habilidades, aquella que le permite crearse y aquella que le permite dibujarse.
  1. Para crear la habilidad de crearse debemos al conjunto personajeincorporar la palabra clave crear e igualarla a una function:
personaje.crear = func
|
  1. Dentro de la función, hay que generar un rectángulo generarRect() en el área de dibujo (agregar al área); indicándole un nombre propio para poder controlarlo, ubicándolo según la posición x e y del personaje, las medidas de un cuadradito y sus colores. Es decir, realizar lo siguiente:
personaje.crear = func
|
La función generarRect() requería de:
  • Nombre o ID para el rectángulo,
  • Conjunto para indicar posición dentro del área de dibujo,
  • Conjunto para indicar ancho y alto,
  • Conjunto para indicar colores, de fondo y de línea.
Entonces modificamos la función anterior para ver en varios renglones:
personaje.crear = function() {
    area_dibujo.innerHTML += generarRect( 
        "cabeza"
        , { 
            x: personaje.x * cuadrados.medida
            , y: personaje.y * cuadrados.medida
        }
        , [ cuadrados.medida, cuadrados.medida ]
        , {
            fondo: "red"
            , linea: "blue"
        }
    ) ;
}
  1. Ahora le creamos al personaje la función de dibujarse. En realidad ya está dibujada, y además tiene un nombre. En el caso del código anterior figura como cabeza. Lo que tiene que realizar esta función/habilidad es actualizar la posición.
Pero como cabeza que es un rectángulo SVG, no podemos cambiarle directamente la posición x e y, debemos hacerlo mediante una habilidad de estos rectángulos llamada setAttribute.
personaje.dibujar = function() {
    cabeza.setAttribute( "x", personaje.x*cuadrados.medida ) ;
    cabeza.setAttribute( "y", personaje.y*cuadrados.medida ) ;
}
Si genera un error que indica que cabeza no está definido, reemplazar en el código anterior la palabra cabeza por document.getElementById("cabeza").
  1. Probar las dos habilidades, en orden, para ver si se creó el personaje en la pantalla o hubo algún error.
personaje.crear() ; p|
  1. Creamos ahora la habilidad de moverse. Para esta habilidad se requiere de indicar cuánto va a sumar en x, y cuánto en y; se actualiza la posición del personaje y se dibuja.
personaje.mover = function( enX, enY ) {
   personaje.x = personaje.x + enX ;
   personaje.y = personaje.y + enY ;
   personaje.dibujar() ;
}
  1. Por último procedemos a mover como un ejemplo. Para que se aprecie el movimiento vamos a agregar, por única vez, una función que logra que se repita algo cada cierto tiempo. La función se llama setInterval (definir intérvalo).
    setInterval(
        function() {
            personaje.mover( 1, 0 ) ; // Mover en X +1
        }
        , 1000 // Cada 1000 milisegundos o 1 segundo
    ) ;
Ir arriba...

Comentarios

Entradas más populares de este blog

JavaScript: Conjuntos de datos, u Objetos planos

Objeto plano Conjuntos de datos Un conjunto de datos se define como: {} ; Los datos se los insertamos mediante mencionarlo, y de por medio un punto mencionar el dat que agregamos al conjunto. {}.datoNuevo = 34 ; {}[ "datoOtro" ] = 55 ; Pero el problema es que  {}  crea un objeto distinto. Es decir, es lo mismo... {} ; que new Object () ; Entonces si queremos trabajar con un mismo conjunto deberemos ponerle nombre a través de una variable que lo referencie en memoria. Ejemplo: var miConjunto = {} ; var otroConjunto = {} ; Ahora, a cada conjunto le iremos agregando datos nuevos con el método anteriormente mencionado. miConjunto.datoNuevo = 34 ; miConjunto.otroDato = 55 ; otroConjunto.suDatoNuevo = 56 ; Para saber qué contiene en el momento dado conjunto deberemos realizar un  console.log() ... console .log( miConjunto ) ; Esto nos dará en la consola algo como... { "datoNuevo" : 34 ...

Módulo para contactar con un NodeJS Server en localhost

El presente código sirve tanto para Visual Basic 6.0 (sí, todavía sirve, todavía sirve!) como para Visual Basic para Aplicaciones (Excel o VBA). ' Si estamos en Visual Basic para Aplicaciones agregar la referencia ' WinHTTP, en el menú Herramientas, Referencias, Microsoft WinHTTP Services Function Solicitar( _ ByVal URLBase As String _ , Optional ByVal Puerto As Integer = 80 _ , Optional ByVal Seccion As String = "" _ , Optional ByVal Metodo As String = "GET" _ ) As String On Error GoTo solucion #If VBA6 Then Dim objXML As New WinHttpRequest #ElseIf Win32 Then Dim objXML As Object Set objXML = CreateObject("MSXML2.ServerXMLHTTP") #End If objXML.Open Metodo, URLBase & ":" & Puerto & "/" & Seccion, False objXML.send If (objXML.Status = 404) Then Solicitar = "404 Error" Else Solicitar = objXML.responseText End If Se...