<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://es.doc.boardgamearena.com/index.php?action=history&amp;feed=atom&amp;title=Tutorial_gomoku</id>
	<title>Tutorial gomoku - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://es.doc.boardgamearena.com/index.php?action=history&amp;feed=atom&amp;title=Tutorial_gomoku"/>
	<link rel="alternate" type="text/html" href="https://es.doc.boardgamearena.com/index.php?title=Tutorial_gomoku&amp;action=history"/>
	<updated>2026-10-24T22:52:38Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://es.doc.boardgamearena.com/index.php?title=Tutorial_gomoku&amp;diff=1067&amp;oldid=prev</id>
		<title>Stewen: Actualización de la versión en inglés del 04:26, 20 Mayo 2021‎</title>
		<link rel="alternate" type="text/html" href="https://es.doc.boardgamearena.com/index.php?title=Tutorial_gomoku&amp;diff=1067&amp;oldid=prev"/>
		<updated>2021-10-20T23:14:28Z</updated>

		<summary type="html">&lt;p&gt;Actualización de la versión en inglés del 04:26, 20 Mayo 2021‎&lt;/p&gt;
&lt;a href=&quot;//es.doc.boardgamearena.com/index.php?title=Tutorial_gomoku&amp;amp;diff=1067&amp;amp;oldid=1064&quot;&gt;Mostrar los cambios&lt;/a&gt;</summary>
		<author><name>Stewen</name></author>
	</entry>
	<entry>
		<id>https://es.doc.boardgamearena.com/index.php?title=Tutorial_gomoku&amp;diff=1064&amp;oldid=prev</id>
		<title>Stewen: Actualización de la versión en inglés del 04:26, 20 Mayo 2021‎</title>
		<link rel="alternate" type="text/html" href="https://es.doc.boardgamearena.com/index.php?title=Tutorial_gomoku&amp;diff=1064&amp;oldid=prev"/>
		<updated>2021-10-20T23:04:53Z</updated>

		<summary type="html">&lt;p&gt;Actualización de la versión en inglés del 04:26, 20 Mayo 2021‎&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Este tutorial te guiará a través de los fundamentos de la creación de un juego sencillo en BGA Studio, a través del ejemplo de [http://en.wikipedia.org/wiki/Gomoku &amp;#039;&amp;#039;&amp;#039;Gomoku&amp;#039;&amp;#039;&amp;#039;] (también conocido como Gobang o Five in a Row).&lt;br /&gt;
&lt;br /&gt;
== Empezarás con nuestra plantilla de &amp;quot;juego vacío&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
Este es el aspecto por defecto de tus juegos cuando acaban de ser creados:&lt;br /&gt;
&lt;br /&gt;
[[File:Gomoku tuto1.png]]&lt;br /&gt;
&lt;br /&gt;
== Prepara el tablero ==&lt;br /&gt;
&lt;br /&gt;
Reúne las imágenes útiles para el juego y edítalas como sea necesario. Súbelas en la carpeta &amp;#039;img&amp;#039; de tu acceso SFTP.&lt;br /&gt;
&lt;br /&gt;
Edita el .tpl para añadir algunos divs para el tablero en el HTML. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;gmk_game_area&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div id=&amp;quot;gmk_background&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div id=&amp;quot;gmk_goban&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;	&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Editar el .css para establecer los tamaños y posiciones de los div y mostrar la imagen del tablero como fondo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#gmk_game_area {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#gmk_background {&lt;br /&gt;
	ancho: 620px;&lt;br /&gt;
	altura: 620px;	&lt;br /&gt;
	position: relative;&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#gmk_goban {	&lt;br /&gt;
	background-image: url( &amp;#039;img/goban.jpg&amp;#039;);&lt;br /&gt;
	anchura: 620px;&lt;br /&gt;
	altura: 620px;&lt;br /&gt;
	position: absolute;	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gomoku tuto2.png]]&lt;br /&gt;
&lt;br /&gt;
== Configura la columna vertebral de tu juego ==&lt;br /&gt;
&lt;br /&gt;
Edita dbmodel.sql para crear una tabla para las intersecciones. Necesitamos coordenadas para cada intersección y un campo para almacenar el color de la piedra en esta intersección (si la hay).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE IF NOT EXISTS `intersection` (&lt;br /&gt;
   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
   `coord_x` tinyint(2) unsigned NOT NULL,&lt;br /&gt;
   `coord_y` tinyint(2) unsigned NOT NULL,&lt;br /&gt;
   `color_piedra` varchar(8) NULL,&lt;br /&gt;
   PRIMARY KEY (`id`)&lt;br /&gt;
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edita .game.php-&amp;gt;setupNewGame() para insertar las intersecciones vacías (19x19) con coordenadas en la base de datos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        // Insertar las intersecciones (vacías) en la base de datos&lt;br /&gt;
        $sql = &amp;quot;INSERT INTO intersection (coord_x, coord_y) VALUES &amp;quot;;&lt;br /&gt;
        $valores = array();&lt;br /&gt;
        for ($x = 0; $x &amp;lt; 19; $x++) {&lt;br /&gt;
            for ($y = 0; $y &amp;lt; 19; $y++) {&lt;br /&gt;
        	&lt;br /&gt;
            	$valores[] = &amp;quot;($x, $y)&amp;quot;;   	&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        $sql .= implode( $valores, &amp;#039;,&amp;#039; );&lt;br /&gt;
        self::DbQuery( $sql );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edita .game.php-&amp;gt;getAllDatas() para recuperar el estado de las intersecciones de la base de datos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        // Intersecciones&lt;br /&gt;
        $sql = &amp;quot;SELECT id, coord_x, coord_y, stone_color FROM intersection &amp;quot;;&lt;br /&gt;
        $resultado[&amp;#039;intersecciones&amp;#039;] = self::getCollectionFromDb( $sql );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edita el .tpl para crear una plantilla para las intersecciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var jstpl_intersection=&amp;#039;&amp;lt;div class=&amp;quot;gmk_intersection ${stone_type}&amp;quot; id=&amp;quot;intersection_${x}_${y}&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definir los estilos para los divs de intersección.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.gmk_intersection {&lt;br /&gt;
    width: 30px;&lt;br /&gt;
    height: 30px;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edita .js-&amp;gt;setup() para configurar la capa de intersecciones que se utilizará para obtener los eventos de clic y para mostrar las piedras. Los datos que devolviste en $result[&amp;#039;intersections&amp;#039;] en .game.php-&amp;gt;getAllDatas() están ahora disponibles en tu .js-&amp;gt;setup() en gamedatas.intersections.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            // Configurar intersecciones&lt;br /&gt;
            for( var id in gamedatas.intersections )&lt;br /&gt;
            {&lt;br /&gt;
                var intersection = gamedatas.intersections[id];&lt;br /&gt;
&lt;br /&gt;
                dojo.place( this.format_block(&amp;#039;jstpl_intersection&amp;#039;, {&lt;br /&gt;
                    x:intersection.coord_x,&lt;br /&gt;
                    y:intersection.coord_y,&lt;br /&gt;
                    tipo_piedra:(intersection.stone_color == null ? &amp;quot;no_stone&amp;quot; : &amp;#039;stone_&amp;#039; + intersection.stone_color)&lt;br /&gt;
                } ), $ (&amp;#039;gmk_background&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
                var x_pix = this.getXPixelCoordinates(intersection.coord_x);&lt;br /&gt;
                var y_pix = this.getYPixelCoordinates(intersection.coord_y);&lt;br /&gt;
                &lt;br /&gt;
                this.slideToObjectPos( $(&amp;#039;intersection_&amp;#039;+intersection.coord_x+&amp;#039;_&amp;#039;+intersection.coord_y), $(&amp;#039;gmk_background&amp;#039;), x_pix, y_pix, 10 ).play();&lt;br /&gt;
&lt;br /&gt;
                if (intersection.stone_color != null) {&lt;br /&gt;
                    // Esta intersección está tomada, ya no debería aparecer como clicable&lt;br /&gt;
                    dojo.removeClass( &amp;#039;intersection_&amp;#039; + intersection.coord_x + &amp;#039;_&amp;#039; + intersection.coord_y, &amp;#039;clickable&amp;#039; );&lt;br /&gt;
                }&lt;br /&gt;
            } &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Utiliza un poco de css temporal border-color o background-color y opacidad para ver los divs y asegurarte de que los tienes bien posicionados. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.gmk_intersection {&lt;br /&gt;
    width: 30px;&lt;br /&gt;
    height: 30px;&lt;br /&gt;
    posición: relative;&lt;br /&gt;
    background-color: blue;&lt;br /&gt;
    opacity: 0.3;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puedes declarar algunas constantes en material.inc.php y pasarlas a tu .js para facilitar el reposicionamiento (modificar la constante, refrescar). Esto es especialmente útil si las mismas constantes tienen que ser utilizadas en el servidor y en el cliente.&lt;br /&gt;
&lt;br /&gt;
* Declare sus constantes en material.inc.php (esto se incluirá automáticamente en su .game.php)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$this-&amp;gt;gameConstants = array(&lt;br /&gt;
		&amp;quot;INTERSECTION_WIDTH&amp;quot; =&amp;gt; 30,&lt;br /&gt;
		&amp;quot;INTERSECTION_HEIGHT&amp;quot; =&amp;gt; 30,		&lt;br /&gt;
		&amp;quot;INTERSECTION_X_SPACER&amp;quot; =&amp;gt; 2.8, // Float&lt;br /&gt;
		&amp;quot;INTERSECTION_Y_SPACER&amp;quot; =&amp;gt; 2.8, // Float&lt;br /&gt;
		&amp;quot;X_ORIGIN&amp;quot; =&amp;gt; 0&lt;br /&gt;
		&amp;quot;Y_ORIGIN&amp;quot; =&amp;gt; 0,&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stewen</name></author>
	</entry>
</feed>