Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - dixon

Páginas: 1 2 3 ... 14
1
Hola, gusto en saludarlo.

la función que usted busca es:

keyboard_check_pressed( key );

En key colocarás la tecla que vas a usar, y obtendrás algo como esto
if(keyboard_check_pressed( vk_space ))
{
// función a realizar.
}

 Aqui puedes descargar el manual de game maker studio 2 en español el cual te ayudará a comprender esas funciones, para usarlo debes descargar el archivo, abrir la carpeta y abrir el archivo index.html
http://www.mediafire.com/file/z2ym96s5pdiz1y8/GMS2_Spanish-master.zip/file

2
Desarrollo de Scripts / ip_admin.php
« en: Julio 29, 2021, 11:17:53 am »
Nombre del autor : Reyes Dávila (Dixon CGM).
Breve descripción de su función : Es un scritp híbrido que funciona en game maker y php, devuelve la ip del usuario y la cantidad de visitas que tiene el juego, con esto se puede saber cuántos usuarios han jugado el juego.
Versión GM utilizada : Game Maker studio 1.4
Versión del script: 2

Vista previa html5:
Aquí podrán ver en funcionamiento el script.
https://dixonysusjuegoseducativos.000webhostapp.com/ip_admin/modelo/Ejemplo_html5/index.html

Recursos adjuntos:
Aquí podrán descargar el editable para game maker studio y el html5.
https://www.mediafire.com/file/zrdsu8e5b19clk9/ip_admin.gmz/file

Modo de uso

Paso 1: Crear cuenta en un servidor web.
a) Abre una cuenta en un servidor hosting.
b) Crea en tu hosting una carpeta donde alojarás este script.

Paso 2: Personalizar el script.
a) En la parte superior de este script hay un apartado llamado "///Datos a modificar manualmente"
en ese apartado deberás colocar un nombre de usuario, clave y la web de alojamiento donde
será almacenado el script php. Deberás reemplazar los valores "Dixon123", "1234567" y la web_alojamiento.

Paso 3: Subir una copia de este cript al servidor web, dentro de la carpeta que creastes y deberás
llamarlo ip_admin.php (todo en minuscula).

Paso 4: Preparar game maker
a) crea un nuevo script y pégale este código. El script deberá ser llamado ip_admin (todo en minuscula).
b) Crea una room y coloca un objeto, este se encargará de administrar los datos.
c) En el evento create del objeto se deberá colocar:ip_admin("create");
c) En el evento step: ip_admin("step");
d) En el evento Asynchronous - http: ip_admin("http");

paso 5: Visualizar salida:
a) Este script creará dos variables globales llamadas: global.ip y global.cantidad_ip.
    *global.ip: Es la que contiene la ip de usuario.
    *global.cantidad_ip: Es la que contiene la cantidad de ip detectadas(la cantidad de usuarios que han visto tu juego).




Código del script








datos1514='
<?php
///Nombre del script: ip_admin.php;
//Para game maker studio 1.4
//Serial único del script: _BXY256
//Para cambiar el serial único deberá hacerse un reemplazo de todas las apariciones de "_BXY256".

///Datos a modificar manualmente
//Los datos deben estar dentro de comillas dobles.
$Usuario00="Dixon123";
$Clave00="1234567";
$web_alojamiento="https://dixonysusjuegoseducativos.000webhostapp.com/ip_admin/modelo/";
$script_php="ip_admin.php";
$intervalo_llamada="25";//Es el interrvalo de tiempo para solicitar información.

/*

//Instrucciones:
Este script es un código hibrido porque funciona en game maker y en servidores con php.
Para hacerlo funcionar es necesario tener una copia de este script guardado como archivo php
con la extensión ".php" y otra copia deberá estar dentro de un script de game maker.

Modo de uso:
Paso 1: Crear cuenta en un servidor web.
a) Abre una cuenta en un servidor hosting.
b) Crea en tu hosting una carpeta donde alojarás este script.

Paso 2: Personalizar el script.
a) En la parte superior de este script hay un apartado llamado "///Datos a modificar manualmente"
en ese apartado deberás colocar un nombre de usuario, clave y la web de alojamiento donde
será almacenado el script php. Deberás reemplazar los valores "Dixon123", "123456" y la web_alojamiento.

Paso 3: Subir una copia de este cript al servidor web, dentro de la carpeta que creastes y deberás
llamarlo ip_admin.php (todo en minuscula).

Paso 4: Preparar game maker
a) crea un nuevo script y pégale este código. El script deberá ser llamado ip_admin (todo en minuscula).
b) Crea una room y coloca un objeto, este se encargará de administrar los datos.
c) En el evento create del objeto se deberá colocar: id_admin("create");
c) En el evento step: id_admin("step");
d) En el evento Asynchronous - http: id_admin("http");

paso 5: Visualizar salida:
a) Este script creará dos variables globales llamadas: global.ip y global.cantidad_ip.
    *global.ip: Es la que contiene la ip de usuario.
    *global.cantidad_ip: Es la que contiene la cantidad de ip detectadas(la cantidad de usuarios que han visto tu juego).

*/

?>
';

/*
<?php
//////////////////////////////////////////////////////////CÓDIGO PHP
$FuncionPhp=$_POST["funcion_BXY256"];
$UsuarioPhp=$_POST["usuario_BXY256"];
$ClavePhp=$_POST["clave_BXY256"];

//Protección con clave y usuario
$c1=($UsuarioPhp == $Usuario00);
$c2=($ClavePhp == $Clave00);

if($c1 and $c2)
{
//Aquí va el código php
if($FuncionPhp == "get")
{
   //Paso 1: Obteniendo la ip de usuario.
   function getRealIP()
       {
           if (!empty($_SERVER['HTTP_CLIENT_IP']))
           return $_SERVER['HTTP_CLIENT_IP'];
           if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
           return $_SERVER['HTTP_X_FORWARDED_FOR'];
           return $_SERVER['REMOTE_ADDR'];
       }
       $IpUsuario=getRealIp();
       
       //Paso 2: Identificando el fichero de registo.
       $Fichero="registro_ip.txt";
       
       //Paso 3: Creando fichero si no existe.
       if (!file_exists($Fichero))
       {
           $fi = fopen($Fichero, 'w');
           fclose($fi);
       }
       
       //Paso 4: Leyendo el contenido del fichero.
       $FicheroString=file_get_contents($Fichero);
       
       //Paso 5: Verificando si la ip de usuario está registrada.
       $IpExiste=substr_count($FicheroString, $IpUsuario);
       
       //Paso 6: Añadiendo la ip de usuario si no existe
       if($IpExiste == 0)
       {
           $fi=fopen($Fichero, "a");
           fwrite($fi, $IpUsuario."/");
           fclose($fi);
       }
       
       //Paso 7: Leyendo el fichero denuevo.
       $FicheroString=file_get_contents($Fichero);
       
       //Paso 8: Contando la cantidad de ips registradas.
       $IpCount=substr_count($FicheroString, '/');
       
       
       //Paso 9: Devolviendo archivo ini.
       $Fichero_ini="[datos]
ip='xxip'
cantidad_ip=ccc
";
       $Fichero_ini=str_replace('xxip',$IpUsuario,$Fichero_ini);
       $Fichero_ini=str_replace('ccc',$IpCount,$Fichero_ini);
       echo $Fichero_ini;
   }



}//fin Protección por clave.
////////////////////////////////////////////////////////FIN CÓDIGO PHP
?>
*/
salir_php='
<?php
/*
';
////////////////////////////////////////////////////////CÓDIGO GAME MAKER
if(argument0="create")
{
//Obteniendo datos de script
length00=string_length(datos1514);
posx=string_pos("=",datos1514);
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos(";",datos1514);
global.usuario_BXY256=string_copy(datos1514,1,posx-2);//Usuario
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos("=",datos1514);
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos(";",datos1514);
global.clave_BXY256=string_copy(datos1514,1,posx-2);//Clave
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos("=",datos1514);
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos(";",datos1514);
global.web_alojamiento_BXY256=string_copy(datos1514,1,posx-2);//Web_alojamiento
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos("=",datos1514);
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos(";",datos1514);
global.script_php_BXY256=string_copy(datos1514,1,posx-2);//Nombre del script php
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos("=",datos1514);
datos1514=string_copy(datos1514,posx+2,length00);
posx=string_pos(";",datos1514);
global.intervalo_llamada_BXY256=real(string_copy(datos1514,1,posx-2));//intervalo que transcurrirá por cada llamada

//Construyendo la ruta del servidor
global.web_alojamiento_BXY256=string(global.web_alojamiento_BXY256)+string(global.script_php_BXY256);

//Para efectuar la llamada.
global.step_time_BXY256=0;

//variables para solicitar datos
global.stats_BXY256 = -1;
global.result_BXY256 = "";
global.ID_BXY256 = -1;
global.string_ini_BXY256="";

//Variable para ejecutar código
global.ejecutar_codigo_BXY256=0;

//Datos para el sistema. Estos datos dependerán de cada script.
global.ip="0.0.0.0";
global.cantidad_ip="0";
}


if(argument0="http")
{
    if (ds_map_find_value(async_load,"id")) == global.ID_BXY256
    {
        global.stats_BXY256 = ds_map_find_value(async_load,"status");
        global.string_ini_BXY256 = ds_map_find_value(async_load,"result");
    }
    if global.stats_BXY256 == 0
    {
        global.ejecutar_codigo_BXY256=1;
    }
}


if(argument0="step")
{
    global.step_time_BXY256+=1;
    if(global.step_time_BXY256=global.intervalo_llamada_BXY256)
    {
        funcion00="get";
        global.ID_BXY256 = http_post_string(global.web_alojamiento_BXY256,"funcion_BXY256="+string(funcion00)+"&usuario_BXY256="+string(global.usuario_BXY256)+"&clave_BXY256="+string(global.clave_BXY256));
        global.step_time_BXY256=0;
    }
}

if(global.ejecutar_codigo_BXY256)
{
//El código a ejecutar dependerá de las funciones del script.
        global.ejecutar_codigo_BXY256=0;

//Los datos llegarán en forma de archivo ini.
        ini_open_from_string(global.string_ini_BXY256);
        global.ip = ini_read_string( "datos", "ip", "0.0.0.0" );
        global.cantidad_ip = ini_read_real( "datos", "cantidad_ip", 0);
        ini_close();
}
////////////////////////////////////////////////////FIN CÓDIGO GAME MAKER
salir_php=';
*/
?>
';



3
Juegos completos / Re: La carreta precisa + score online
« en: Julio 26, 2021, 11:56:07 pm »
Hola Marth, saludos.  :-[

Mi principal deseo era actualizar el post original pero como tiene su historia se me hiso imposible alterarlo.

En cuanto a la dificultad, no pensaba que fuera tan difícil, pero ya veo que hasta la hora nadie ha entrado ni al último nivel del score. Yo trato de no jugarlo para no entrar en el score porque eso aumentaría la dificultad, lo jugaré solo si alguien sube al primer puesto. La montaña colosal del inicio la estaba utilizando para testear al momento de programar, pero entre tantas actividades no consideré necesario quitarla, pero ahora comprendo…. Admito que tienes razón, sería bueno regular la dificultad y que esta aumente poco a poco.

Lo que en verdad quiero es dejarlo como está, con sus defectos y finalizar su programación, para pronto comenzar a crear un nuevo juego desde cero basado en este, donde pueda aplicar tus consejos agregándole nuevas ideas y otras cosas interesantes que no le pude programar a este.

Gracias por el feedback. ;D

4
Juegos completos / La carreta precisa + score online
« en: Julio 26, 2021, 10:58:31 am »


La carreta precisa + score online


Plataformas


GM: Studio

Después de más de 15 años programando en game maker, he logrado mi primer juego con score online y quiero compartirles lo aprendido.




Se ejecuta en todos los dispositivos directamente en la siguiente web:
bit.ly/la_carreta_precisa_v3


5
Desarrollo de Scripts / Score Online
« en: Julio 24, 2021, 11:43:08 am »
Nombre del autor : Reyes Dávila.
Breve descripción de su función : Administrar score online mediante php sin emplear bases de datos.
Versión GM utilizada : Game Maker studio 1.4
Versión del script: 3

Vista previa html5:
Aquí podrán ver en funcionamiento esta nueva versión
https://dixonysusjuegoseducativos.000webhostapp.com/score_online/modelo_hibrido/web_html5/index.html

Modo de uso:
//Instrucciones:
Este script es un código hibrido porque funciona en game maker y en servidores con php.
Para hacerlo funcionar es necesario tener una copia de este script guardado como archivo php
con la extensión ".php" y otra copia deberá estar dentro de un script de game maker.

Modo de uso:
Paso 1: Crear cuenta en un servidor web.
a) Abre una cuenta en un servidor hosting.
b) Crea en tu hosting una carpeta donde alojarás este script.

Paso 2: Personalizar el script.
a) En la parte superior de este script hay un apartado llamado "///Datos a modificar manualmente"
en ese apartado deberás colocar un nombre de usuario, clave y la web de alojamiento donde
será almacenado el script php. Deberás reemplazar los valores "Dixon123", "1234567" y la web_alojamiento.

Paso 3: Subir una copia de este cript al servidor web, dentro de la carpeta que creastes y deberás
llamarlo score_online.php (todo en minuscula).

Paso 4: Preparar game maker
a) crea un nuevo script y pégale este código. El script deberá ser llamado score_online (todo en minuscula).
b) Crea una room y coloca un objeto, este se encargará de administrar los datos.
c) En el evento create del objeto se deberá colocar:    score_online("create");
c) En el evento step:    score_online("step");
d) En el evento Asynchronous - http:    score_online("http");

Paso 5: visualizar salida:
a) para mostrar el score se debe colocar en el evento draw:    score_online("draw");

Más información
Aunque este script trabaja correctamente, quizás algunas personas no sepan seguir los pasos para implementarlo y por eso me siento obligado a seguir mejorandolo. Todabia le faltan muchas cosas tales como:

1. La creación de una web de servicios que facilite la personalización del script.
2. La integración de una función que permita almacenar otros datos además de nombre y puntaje.
3. La creación de un video tutorial donde se enseñe a utilizar este script en menos de 1 minuto.

Yo siempre quise un script como este pero nunca lo conseguí, ahora que lo tengo, es mi deber mejorarlo y difundirlo.  :'( Es necesario tambien explicar las técnicas aplicadas en este script para que no quede nada dificil de comprender. Si Dios quiere les hago uno o varios tutoriales pronto y otras cosas más.

Código del script:
score_online


datos1514='
<?php
///Nombre del script: score_online;
//Versión: 3
//Para game maker studio 1.4
//Serial único del script: _AAS32P
//Para cambiar el serial único deberá hacerse un reemplazo de todas las apariciones de "_AAS32P".

///Datos a modificar manualmente
$Usuario00="Dixon123";
$Clave00="1234567";
$web_alojamiento="https://dixonysusjuegoseducativos.000webhostapp.com/score_online/modelo_hibrido/";
$intervalo_llamada=25;//Es el interrvalo de tiempo para comunicarse con el servidor.

$windows_width=800;//Ancho de la ventana del juego.
$windows_height=600;//Alto de la ventana del juego.

$nombre_script_php="score_online.php";//No requiere modificación. Si cambia este nombre deberá cambiar el del script del servidor.
$interlineado=50;//Separación de las líneas de texto.

///////////////////////Código particular del script
$cantidad_elementos=50;//Es la cantidad de scores a visualizar
$score_x=30;//Posición X de la esquina superior izquierda del score a dibujar.
$score_y=80;//Posicion Y de la esquina superior izquierda del score a dibujar.
$score_width=600;//Ancho del score a dibujar.
$ajustar_score_pantalla_AAS32P =1;//Para ajustar el score a la pantalla, colocar 1 para ajustar y 0 para no adaptar.

$archivo_ini="savedata.ini";//Nombre del archivo ini.

/*

//Instrucciones:
Este script es un código hibrido porque funciona en game maker y en servidores con php.
Para hacerlo funcionar es necesario tener una copia de este script guardado como archivo php
con la extensión ".php" y otra copia deberá estar dentro de un script de game maker.

Modo de uso:
Paso 1: Crear cuenta en un servidor web.
a) Abre una cuenta en un servidor hosting.
b) Crea en tu hosting una carpeta donde alojarás este script.

Paso 2: Personalizar el script.
a) En la parte superior de este script hay un apartado llamado "///Datos a modificar manualmente"
en ese apartado deberás colocar un nombre de usuario, clave y la web de alojamiento donde
será almacenado el script php. Deberás reemplazar los valores "Dixon123", "1234567" y la web_alojamiento.

Paso 3: Subir una copia de este cript al servidor web, dentro de la carpeta que creastes y deberás
llamarlo score_online.php (todo en minuscula).

Paso 4: Preparar game maker
a) crea un nuevo script y pégale este código. El script deberá ser llamado score_online (todo en minuscula).
b) Crea una room y coloca un objeto, este se encargará de administrar los datos.
c) En el evento create del objeto se deberá colocar:score_online("create");
c) En el evento step: score_online("step");
d) En el evento Asynchronous - http: score_online("http");

paso 5: Visualizar salida:


*/

?>
';

//////////////////////////////////////////Codigo extra, particular del script
////Archivo ini por defecto:
/*
<?php
$string_savedata_ini_default="[score_1]
nombre='Xi Jinping'
puntaje=2236

[score_2]
nombre='☆彡Emma Watson ♥..。.。o○*'
puntaje=1955

[score_3]
nombre='★Shakira'
puntaje=1830

[score_4]
nombre='Vegueta 777'
puntaje=1679

[score_5]
nombre='Kylian Mbappé'
puntaje=1533

[score_6]
nombre='kim jong-un'
puntaje=1349

[score_7]
nombre='Demi Lovato ◠‿◠'
puntaje=1297

[score_8]
nombre='Camila Cabello ♪+♫.♬*.'
puntaje=1170

[score_9]
nombre='Cara Delevingne'
puntaje=989

[score_10]
nombre='Zoe Saldaña'
puntaje=838
";
?>
*/


/*
<?php
//////////////////////////////////////////////////////////CÓDIGO PHP
$FuncionPhp=$_POST["funcion_AAS32P"];
$UsuarioPhp=$_POST["usuario_AAS32P"];
$ClavePhp=$_POST["clave_AAS32P"];
$nombre[$cantidad_elementos]=$_POST["nombre_AAS32P"];
$puntaje[$cantidad_elementos]=$_POST["puntaje_AAS32P"];

//Protección con clave y usuario
$c1=($UsuarioPhp == $Usuario00);
$c2=($ClavePhp == $Clave00);

if($c1 and $c2)
{
//Aquí va el código php










///////////////////////////Ingresando nuevo score

if($FuncionPhp=="add")
{

///////////////////////////////////////////////  OBTENIENDO DATOS

//Organizador de score online
//Leyendo archivo ini
$contenido = parse_ini_file($archivo_ini, true);
for($i=0;$i<$cantidad_elementos;$i++)
{
$i2=$i+1;
$nombre[$i] = $contenido["score_$i2"]["nombre"];
$nombre[$i] ="$nombre[$i]";

$c1="$nombre[$i]";
if($c1=="")
{
   $nombre[$i] = '<nobody>';
   $puntaje[$i] = 0;
}
else
{
$puntaje[$i] = $contenido["score_$i2"]["puntaje"];
}

$nombre_salida[$i] ="";
$puntaje_salida[$i] =0;
$orden_mayor_menor[$i]=0;
}


///////////////////////////////////////////////  COMPARANDO NUMEROS

//Reiniciando calificacion
for($i=0;$i<$cantidad_elementos;$i+=1)
{
$calificacion[$i]=0;
}

//Comparando elementos.
for($i=0;$i<$cantidad_elementos;$i+=1)//Seleccionando elemento.
{
for($i2=0;$i2<$cantidad_elementos;$i2+=1)//Comparando elemento.
{
if($i!==$i2)//El elemento no se podrá comparar a si mismo
{
//Si el elemento seleccionado es mayor al elemento comparado.
if($puntaje[$i]>$puntaje[$i2])
{
$calificacion[$i]+=1;
}
//Si el elemento seleccionado es igual al elemento comparado.
$c1=($puntaje[$i]==$puntaje[$i2]);
$c2=$i2>$i;
if($c1 and $c2)
{
$calificacion[$i]+=1;
}
}
}
}
//fin //Comparando elementos.


//Organizando calificacion de menor a mayor
for($i=0;$i<$cantidad_elementos;$i+=1)
{
$posicion_elemento=$calificacion[$i];
//Relacionando la calificacion con la posicion
$relacion_calif_pos[$posicion_elemento]=$i;
}

//Organizando de mayor a menor
for($i=0;$i<$cantidad_elementos;$i+=1)
{
$posicion_x=$cantidad_elementos-1-$i;
$orden_mayor_menor[$i]=$relacion_calif_pos[$posicion_x];
$orden_mayor_menor_prev[$i]=$orden_mayor_menor[$i];
}


///////////////////////////////////////////////  INTEGRANDO DATOS

$continuar=1;
for($i=0;$i<$cantidad_elementos and $continuar;$i+=1)
{
$elemento_x=$orden_mayor_menor[$i];
if($puntaje[$cantidad_elementos]>=$puntaje[$elemento_x])
{
$orden_mayor_menor[$i]=$cantidad_elementos;
for($i2=$i;$i2<$cantidad_elementos;$i2+=1)
{
$orden_mayor_menor[$i2+1]=$orden_mayor_menor_prev[$i2];
}
$continuar=0;//Detener el ciclo ford
}
}



///////////////////////////////////////////////  SALIDA DE DATOS

//relacionando puntajes con la salida
for($i=0;$i<$cantidad_elementos;$i++)
{
$elemento_x=$orden_mayor_menor[$i];
$nombre_salida[$i]=$nombre[$elemento_x];
$puntaje_salida[$i]=$puntaje[$elemento_x];
}

echo "<br><br>";
for($i=0;$i<$cantidad_elementos;$i++)
{
$i2=$i+1;
echo "[score_$i2]: <br>";
echo "$nombre_salida[$i] <br>";
echo "$puntaje_salida[$i] <br><br>";
}

//Escribiendo en archivo ini
$fichero = fopen($archivo_ini,"w");
for($i=0;$i<$cantidad_elementos;$i++)
{
$i2=$i+1;
fputs($fichero,"[score_$i2]\n");
fputs($fichero,"nombre=".'"'."$nombre_salida[$i]".'"'."\n");
fputs($fichero,"puntaje=$puntaje_salida[$i]\n\n");
}
fclose($fichero);

}//fin ingresando nuevo score.











////////////////////////////Borrando score

if($FuncionPhp=="clear")
{
echo "<br><br><br><br>FUNCION CLEAR<br><br><br><br>";
//Escribiendo en archivo ini
$fichero = fopen($archivo_ini,"w");
for($i=0;$i<$cantidad_elementos;$i++)
{
$i2=$i+1;
fputs($fichero,"[score_$i2]\n");
fputs($fichero,"nombre='<nobody>'\n");
fputs($fichero,"puntaje=0\n\n");
}
fclose($fichero);
}

///FIN BORRANDO SCORE



////////////////////////Estableciendo score predeterminado

if($FuncionPhp=="default")
{
   
//Organizador de score online
   $fichero00=fopen("$archivo_ini", "w");
   fwrite($fichero00,$string_savedata_ini_default);
   fclose($fichero00);
   
}// fin estableciendo score predeterminado.if($funcion_get=="default")














///////////solicitando score

if($FuncionPhp =="get")
{

//Organizador de score online
//Leyendo archivo ini
$contenido = parse_ini_file($archivo_ini, true);
for($i=0;$i<$cantidad_elementos;$i++)
{
$i2=$i+1;
$nombre[$i] = $contenido["score_$i2"]["nombre"];
$nombre[$i] ="$nombre[$i]";

$c1="$nombre[$i]";
if($c1=="")
{
   $nombre[$i] = '<nobody>';
   $puntaje[$i] = 0;
}
else
{
   $puntaje[$i] = $contenido["score_$i2"]["puntaje"];
}

}

//visualizando salida
for($i=0;$i<$cantidad_elementos;$i++)
{
$i2=$i+1;
echo "[score_$i2]
nombre=".'"'.$nombre[$i].'"'."
puntaje=$puntaje[$i]

";

}
}
//fin Solicitando score






///////////Si no existe el archivo ini creará uno.
if(!file_exists($archivo_ini))
{
   //Leyendo string ini por defecto
   $contenido = parse_ini_string($string_savedata_ini_default, true);
   for($i=0;$i<$cantidad_elementos;$i++)
   {
       $i2=$i+1;
       $nombre[$i] = $contenido["score_$i2"]["nombre"];
       $nombre[$i] ="$nombre[$i]";

       $c1="$nombre[$i]";
       if($c1=="")
       {
           $nombre[$i] = '<nobody>';
           $puntaje[$i] = 0;
       }
       else
       {
           $puntaje[$i] = $contenido["score_$i2"]["puntaje"];
       }
   }
   
   $fichero = fopen($archivo_ini,"w");
   for($i=0;$i<$cantidad_elementos;$i++)
   {
       $i2=$i+1;
       fputs($fichero,"[score_$i2]\n");
       fputs($fichero,"nombre='".$nombre[$i]."'\n");
       fputs($fichero,"puntaje=".$puntaje[$i]."\n\n");
   }
   fclose($fichero);

}///////////fin Si no existe el archivo ini




}//fin Protección por clave.
////////////////////////////////////////////////////////FIN CÓDIGO PHP
?>
*/
salir_php='
<?php
/*
';

////////////////////////////////////////////////////////CÓDIGO GAME MAKER
if(argument0="create")
{
    //////////Botones a usar
    global.mb_AAS32P=0;
    global.mb_speed_AAS32P=0;
    global.my_previo_AAS32P=mouse_y;
   
    //variables para comunicarse con servidor
    global.stats_AAS32P = -1;
    global.result_AAS32P = "";
    global.ID_AAS32P = -1;

    ///////Obteniendo datos de string php datos1514
    length00_AAS32P=string_length(datos1514);

    for(i_AAS32P=0;i_AAS32P<=12;i_AAS32P+=1)
    {
        posx_AAS32P=string_pos("=",datos1514);
        datos1514=string_copy(datos1514,posx_AAS32P+1,length00_AAS32P);
        posx_AAS32P=string_pos(";",datos1514);
        dato_prev_AAS32P=string_copy(datos1514,1,posx_AAS32P-1);
        dato_prev_AAS32P=string_replace_all(dato_prev_AAS32P,'"','');
        dato_prev_AAS32P=string_replace_all(dato_prev_AAS32P,"'","");
        datos_AAS32P[i_AAS32P]=dato_prev_AAS32P;
        datos1514=string_copy(datos1514,posx_AAS32P+2,length00_AAS32P);
    }

    global.usuario_AAS32P=datos_AAS32P[0];
    global.clave_AAS32P=datos_AAS32P[1];
    global.web_alojamiento_AAS32P=string(datos_AAS32P[2])+string(datos_AAS32P[6]);
    global.intervalo_llamada_AAS32P=real(datos_AAS32P[3]);
    global.windows_width_AAS32P=real(datos_AAS32P[4]);
    global.windows_height_AAS32P=real(datos_AAS32P[5]);
    global.step_time_AAS32P=global.intervalo_llamada_AAS32P;
    global.interlineado_AAS32P=real(datos_AAS32P[7]);//Separación de las líneas del score.
   
    ///////////////////////Código particular del script
    global.cantidad_elementos_AAS32P=real(datos_AAS32P[8]);
    global.score_x_AAS32P=real(datos_AAS32P[9]);//Posición X de la esquina superior izquierda del score a dibujar.
    global.score_y_AAS32P=real(datos_AAS32P[10]);//Posicion Y de la esquina superior izquierda del score a dibujar.
    global.score_width_AAS32P=real(datos_AAS32P[11]);//Ancho del score a dibujar.
    global.ajustar_score_pantalla_AAS32P=real(datos_AAS32P[12]);//Condición para adaptar el score a la pantalla.
   
    if(global.ajustar_score_pantalla_AAS32P=1)
    {
        global.score_x_AAS32P=global.windows_width_AAS32P/20;//Posición X de la esquina superior izquierda del score a dibujar.
        global.score_y_AAS32P=global.windows_height_AAS32P/5;//Posicion Y de la esquina superior izquierda del score a dibujar.
        global.score_width_AAS32P=global.windows_width_AAS32P-global.score_x_AAS32P*2;
    }
   
    //Para mover el score
    global.score_y_pre_AAS32P=global.score_y_AAS32P;
    global.score_y_top_AAS32P=global.score_y_AAS32P;
    global.score_height_AAS32P=(global.interlineado_AAS32P)*global.cantidad_elementos_AAS32P;
    global.score_y_bottom_AAS32P=global.score_y_AAS32P+global.score_height_AAS32P;
   
    //variables para asignar nuevo score
    global.usuario_default_AAS32P="Anónimo";
    //creando arrays vacios
    for(i_AAS32P=0;i_AAS32P<=global.cantidad_elementos_AAS32P;i_AAS32P+=1)
    {
        global.nombre_AAS32P[i_AAS32P]="<nobody>";
        global.puntaje_AAS32P[i_AAS32P]=0;
    }

}//fin if(argument0="create")


if(argument0="http")
{
    if (ds_map_find_value(async_load,"id")) == global.ID_AAS32P
    {
        global.stats_AAS32P = ds_map_find_value(async_load,"status");
        global.string_ini_AAS32P = ds_map_find_value(async_load,"result");
    }
   
    if (global.stats_AAS32P == 0)
    {
        score_online("respuesta correcta");
    }
   
    if (global.stats_AAS32P < 0)
    {
        score_online("error");
    }
   
    if (global.stats_AAS32P > 0)
    {
        score_online("cargando");
    }
}


if(argument0="step")
{
    global.step_time_AAS32P+=1;
    if(global.step_time_AAS32P>=global.intervalo_llamada_AAS32P)
    {
        funcion00="get";
        global.ID_AAS32P = http_post_string(global.web_alojamiento_AAS32P,"funcion_AAS32P="+string(funcion00)+"&usuario_AAS32P="+string(global.usuario_AAS32P)+"&clave_AAS32P="+string(global.clave_AAS32P));
        global.step_time_AAS32P=0;
    }
}

if(argument0="respuesta correcta")
{
    //Los datos llegarán en forma de archivo ini.
    ini_open_from_string(global.string_ini_AAS32P);
    //ini_read_string( "seccion", "key", "defaul" );
    //ini_close();
   
    ///////////////////////Código particular del script
    for(i_AAS32P=1;i_AAS32P<=global.cantidad_elementos_AAS32P;i_AAS32P+=1)
    {
        section_AAS32P='score_'+string(i_AAS32P);
        global.nombre_AAS32P[i_AAS32P]= ini_read_string( section_AAS32P, 'nombre', '<nobody>' );
        global.puntaje_AAS32P[i_AAS32P]= ini_read_real( 'score_'+string(i_AAS32P), 'puntaje', 0 );
    }
    ini_close();

}

if(argument0="error")
{
//Error al solicitar información
}

if(argument0="cargando")
{
//Cargando información
}


if(argument0="draw")
{
    ////////////////botones a usar
    global.mbp_AAS32P=(global.mb_AAS32P=0)*mouse_check_button(mb_left);
    global.mb_AAS32P=mouse_check_button(mb_left);
    global.my_AAS32P=mouse_y;
   
    ////////////////////MOVIMIENTO DEL SCORE
    //dando el primer click
    if(global.mbp_AAS32P)
    {
        global.score_y_pre_AAS32P=mouse_y-global.score_y_AAS32P;
    }
   
    //Mientras tenemos presionado
    if(global.mb_AAS32P)
    {
        global.score_y_AAS32P=mouse_y-global.score_y_pre_AAS32P;
        //velocidad de movimiento
        global.mb_speed_AAS32P+=(mouse_y-global.my_previo_AAS32P)/10;
    }
    else
    {
       
        //movimiento
        global.score_y_AAS32P+=global.mb_speed_AAS32P;
    }
   
    //Disminuyendo la velocidad del movimiento
    if(global.mb_speed_AAS32P>0){global.mb_speed_AAS32P-=0.5}
    if(global.mb_speed_AAS32P<0){global.mb_speed_AAS32P+=0.5}
    if(abs(global.mb_speed_AAS32P)<1){global.mb_speed_AAS32P=0}
       
    //LÍMITES DEL MOVIMIENTO
    if(global.score_y_AAS32P>global.score_y_top_AAS32P){global.score_y_AAS32P=global.score_y_top_AAS32P;global.mb_speed_AAS32P=0}
    if((global.score_y_AAS32P+global.score_height_AAS32P)<global.windows_height_AAS32P/2){global.score_y_AAS32P=global.windows_height_AAS32P/2-global.score_height_AAS32P;global.mb_speed_AAS32P=0}

    //Si dejamos de presionar
    global.my_previo_AAS32P=mouse_y;
       
   
    ///////////////////////FIN MOVIMIENTO DEL SCORE
   
    dx_AAS32P=global.score_x_AAS32P;
    dy_AAS32P=global.score_y_AAS32P;
    ancho_AAS32P=abs(floor(global.score_width_AAS32P));
    sep_AAS32P=global.interlineado_AAS32P;
    for(i_AAS32P=1;i_AAS32P<=global.cantidad_elementos_AAS32P;i_AAS32P+=1)
    {
        text1_AAS32P=string(i_AAS32P)+". "+string(global.nombre_AAS32P[i_AAS32P])+"..........................................................";
        length1_AAS32P=string_length(text1_AAS32P);
        text2_AAS32P=string(global.puntaje_AAS32P[i_AAS32P]);
        width1_AAS32P=string_width(text1_AAS32P);
        width2_AAS32P=string_width(text2_AAS32P);
   
        //sumando espacio
        while((width1_AAS32P+width2_AAS32P)<ancho_AAS32P)
        {
            text1_AAS32P=string_insert(".",text1_AAS32P,length1_AAS32P);
            length1_AAS32P=string_length(text1_AAS32P);
            width1_AAS32P=string_width(text1_AAS32P);
        }
   
        //Restando espacio
        while((width1_AAS32P+width2_AAS32P)>ancho_AAS32P)
        {
            text1_AAS32P=string_copy(text1_AAS32P,1,length1_AAS32P-2);
            length1_AAS32P=string_length(text1_AAS32P);
            width1_AAS32P=string_width(text1_AAS32P);
        }
        pos2_AAS32P=width1_AAS32P;
        //sumando espacio
        while((pos2_AAS32P+width2_AAS32P)<ancho_AAS32P)
        {
            pos2_AAS32P+=1;
        }

        draw_text(dx_AAS32P,dy_AAS32P,text1_AAS32P);//Dibujando nombre
        draw_text(dx_AAS32P+pos2_AAS32P,dy_AAS32P,text2_AAS32P);//Dibujando puntaje
        dy_AAS32P+=sep_AAS32P;
    } // fin for(i_AAS32P=1;i_AAS32P<=global.cantidad_elementos;i_AAS32P+=1)
}//fin if(argument0="draw")

////////////////////////////////////FIN Para el evento draw




//////////////////////////////////Para agregar un nuevo score
if(argument0="add")
{

    //Agregando un nuevo score
    global.usuario_default_AAS32P=get_string("Nombre: ",global.usuario_default_AAS32P);
    //score=get_integer("Score:",0);
    if(score>=global.puntaje_AAS32P[global.cantidad_elementos_AAS32P])
    {
        funcion_AAS32P="add";
        http_post_string(global.web_alojamiento_AAS32P,"funcion_AAS32P="+string(funcion_AAS32P)+"&usuario_AAS32P="+string(global.usuario_AAS32P)+"&clave_AAS32P="+string(global.clave_AAS32P)+"&nombre_AAS32P="+string(global.usuario_default_AAS32P)+"&puntaje_AAS32P="+string(score));
    }
    else
    {
        show_message("El score es muy bajo para entrar en el top 10");
    }

}//fin  if(argument0="add");




if(argument0="clear")
{
    funcion_AAS32P="clear";
    http_post_string(global.web_alojamiento_AAS32P,"funcion_AAS32P="+string(funcion_AAS32P)+"&usuario_AAS32P="+string(global.usuario_AAS32P)+"&clave_AAS32P="+string(global.clave_AAS32P)+"&nombre_AAS32P="+string(global.usuario_default_AAS32P)+"&puntaje_AAS32P="+string(score));
}//fin  if(argument0="clear");



if(argument0="default")
{
    funcion_AAS32P="default";
    http_post_string(global.web_alojamiento_AAS32P,"funcion_AAS32P="+string(funcion_AAS32P)+"&usuario_AAS32P="+string(global.usuario_AAS32P)+"&clave_AAS32P="+string(global.clave_AAS32P)+"&nombre_AAS32P="+string(global.usuario_default_AAS32P)+"&puntaje_AAS32P="+string(score));
}//fin  if(argument0="default");





////////////////////////////////////////////////////FIN CÓDIGO GAME MAKER
salir_php=';
*/
?>
';



6
Juegos completos / Re: La carreta precisa
« en: Julio 04, 2021, 09:44:39 pm »
Hola un gusto en saludarlos, otra vez.





   La carreta precisa v2   



Jugar desde la siguiente web
Para todas las plataformas.
bit.ly/la_carreta_precisa


Más información:
Hoy he venido a compartir con ustedes la primera actualización de este juego llamado “la carreta precisa”, mi objetivo era crear un juego que se pudiese ejecutar en todos los game makers y que fuera fácil de armar y cuyos recursos fueran fáciles de obtener.

COMPATIBILIDAD: el juego podrá ejecutarse en cualquier Game Maker desde la versión 4 del año 2000 hasta la actual game maker studio 2.
MULTIPLATAFORMA: el juego podrá exportarse a cualquier plataforma.
ARMABILIDAD: El juego puede armase fácilmente siguiendo los siguienes pasos.

Para armar este juego necesitas:

Materiales:

1.   Dos sprites, son las dos imágenes llamadas: sprite0 y sprite1
sprite0
sprite1

2.   El script: es el código llamado "script";
3.   Cualquier game maker superior a la versión 3.3 (April 3, 2001), se incluye la versión 4.

Instrucciones:

a.   Abre tu game maker.
a.   Cargar el sprite0, el cual debe ser llamado “sprite0”.
b.   Cargar el sprite1, el cual debe ser llamado “sprite1”.
c.   Crear un objeto.
d.   Crear una room con un tamaño de 320x240.
e.   Colocar el objeto en cualquier parte de la room.
f.   Colocar en el evento draw (dibujo) del objeto, el siguiente script:


Script que controla todo el juego:

Código: [Seleccionar]
//Simulando el evento create con la variable direction
if(direction=0)
{
//highscore_clear();
font_size=12;
//font_name="Arial";

if(highscore_value(1)=0)
{
highscore_add("Viajes pokémon",5500);
highscore_add("Festival de Cannes",3542);
highscore_add("Tom Holland",3339);
highscore_add("El sr d los Anillos",3332);
highscore_add("NFT y criptoarte",1078);
highscore_add("The Game of Life",896);
highscore_add("Princesa Diana",789);
highscore_add("Huracán Elsa",492);
highscore_add("Vehículo Tesla",448);
highscore_add("COVID-19",200);
}
//Para el objeto mapa
sprite_index=sprite0;
x=0;
y=0;
image_index=0;
image_speed=0;
mapa_activo=0;
click_time=0;
secuencia_image=1;//secuencia de imagenes
estado="portada";//Estado del juego
show_score=0;
velocidad=1;

//Para el mapa
idmap0_x=x;
idmap0_y=y;
idmap0_image=image_index;
ancho_mapa=319;

//Para el mapa 2
idmap1_x=idmap0_x+320;
idmap1_y=y;
idmap1_image=1+floor(random(image_number-1));
idmap1_image=11;

//Para el objeto player
idman_x=149;
idman_y=143;
idman_image=0;
idman_image_inicio=0;
idman_image_final=3;

//Para la rueda
idrueda_x=80;
idrueda_y=151;
idrueda_image=4;
idrueda_image_inicio=4;
idrueda_image_final=23;
idrueda_direction=0;
idrueda_gravedad=0;

//para el centro de la rueda
idcentro_rueda_x=idrueda_x+20;
idcentro_rueda_y=idrueda_y+20;

//Para la carreta
idcarreta_x=48;
idcarreta_y=idrueda_y-32;
idcarreta_image=42;
idcarreta_direction=0;
idcarreta_gravedad=0;

//para el centro de la carreta
idcentro_carreta_x=idcarreta_x+52;
idcentro_carreta_y=idcarreta_y+52;

//Para el titulo
idtitulo_x=90;
idtitulo_y=40;
idtitulo_image=61;

//Para el texto de portada
idtexto_portada_x=100;
idtexto_portada_y=70;
nombre=highscore_name(1);
puntaje=highscore_value(1);
idtexto_texto=string(nombre)+"..."+string(puntaje);

//para el boton comenzar
idcomenzar_x=room_width-64-10;
idcomenzar_y=106;
idcomenzar_image=62;
idcomenzar_estado=0;

//para el boton reiniciar
idreiniciar_x=10;
idreiniciar_y=106+64+10;
idreiniciar_image=64;
idreiniciar_estado=0;

//para el boton TOP 10
idtop10_x=room_width-64-10;
idtop10_y=106+32+10;
idtop10_image=66;
idtop10_estado=0;

//para el boton volver
idvolver_x=5;
idvolver_y=5;
idvolver_image=68;
idvolver_estado=0;

//para la cuerda
idcuerda_x1=idcentro_rueda_x+35*cos(idcarreta_direction*pi/180);
idcuerda_y1=idcentro_rueda_y-35*sin(idcarreta_direction*pi/180);
idcuerda_x2=idman_x+23;
idcuerda_y2=idman_y+13;

//para el punto de colision A
idcoliciona_x=idcentro_rueda_x-36*cos(idcarreta_direction*pi/180);
idcoliciona_y=idcentro_rueda_y+36*sin(idcarreta_direction*pi/180);

//para el punto de colicion con el player;
idcolicion_man_x=idman_x+26;
idcolicion_man_y=idman_y+46;

direction=1
}//fin if(direction=0)



//Evento draw
//Botones a usar
if(keyboard_check(vk_f2)){game_restart()}








//////////////////////////////Juego iniciado
if(estado="juego iniciado")
{
//aumentando velocidad
velocidad+=0.003;

//Para la carreta
//Movimiento y
idcarreta_gravedad+=1;
if(idrueda_gravedad>10){idrueda_gravedad=10}
while((idcarreta_y+idcarreta_gravedad>idrueda_y-32)and (idcarreta_gravedad)){idcarreta_gravedad-=1}

idcarreta_y+=idcarreta_gravedad;
if(idcarreta_y>idrueda_y-32){idcarreta_y=idrueda_y-32;idcarreta_gravedad=0}

//cambiando la direccion de la carreta
if(mouse_y>0 && mouse_y<240)idcarreta_direction=90-floor(mouse_y/6.6)*5;
//Cambiando la imagen de la carreta
if(mouse_y>0 && mouse_y<240){idcarreta_image=42-18+floor(mouse_y/6.6)};

//para el centro de la carreta
idcentro_carreta_x=idcarreta_x+52;
idcentro_carreta_y=idcarreta_y+52;

//para el punto de colision A
idcoliciona_x=idcentro_carreta_x-36*cos(idcarreta_direction*pi/180);
idcoliciona_y=idcentro_carreta_y+36*sin(idcarreta_direction*pi/180);



for(i2=0;i2<=1;i2+=1)
{
if(i2=0){x=idmap0_x;image_index=idmap0_image}
if(i2=1){x=idmap1_x;image_index=idmap1_image}

//Detectando colicion
for(i=0;i<=72;i+=5)
{
posx=idcoliciona_x;
posy=idcoliciona_y;
posx+=i*cos(idcarreta_direction*pi/180);
posy-=i*sin(idcarreta_direction*pi/180);

//Colisionando y finalizando el juego
if((instance_position(posx,posy,0)=id) and (estado="juego iniciado")){estado="game over"}
}


}//  fin for(i2=0;i2<=1;i2+=1)

/////////////////para la cuerda
idcuerda_x1=idcentro_carreta_x+35*cos(idcarreta_direction*pi/180);
idcuerda_y1=idcentro_carreta_y-35*sin(idcarreta_direction*pi/180);
idcuerda_x2=idman_x+23;
idcuerda_y2=idman_y+13;

}//fin if(estado="juego iniciado")
/////////////////////////////////////////////////////////////////////


//////////////////////////////Juego iniciado
if(estado="juego iniciado"){

//sumando puntos;
score+=1;

//Para los mapas
if(idmap0_x>idmap1_x){idmap1_x-=velocidad;idmap0_x=idmap1_x+ancho_mapa}
if(idmap1_x>idmap0_x){idmap0_x-=velocidad;idmap1_x=idmap0_x+ancho_mapa}
if(idmap0_x<-ancho_mapa){idmap0_x=idmap1_x+ancho_mapa;idmap0_image=1+floor(random(image_number-1))}
if(idmap1_x<-ancho_mapa){idmap1_x=idmap0_x+ancho_mapa;idmap1_image=1+floor(random(image_number-1))}









//Para La rueda
//Movimiento y
idrueda_gravedad+=2;
if(idrueda_gravedad>10){idrueda_gravedad=10}

//Para el player
//Movimiento y
vs=5






////////////////////////////////////Duplicando la posicion del objeto
for(i2=0;i2<=1;i2+=1)
{
if(i2=0){x=idmap0_x;image_index=idmap0_image}
if(i2=1){x=idmap1_x;image_index=idmap1_image}


//Para el player
//para el punto de colicion con el player;
idcolicion_man_x=idman_x+26;
idcolicion_man_y=idman_y+46;

//Movimiento y

while((instance_position(idcolicion_man_x,idcolicion_man_y+vs,0)=id)and vs){vs-=1}
idman_y+=vs;

while(instance_position(idcolicion_man_x,idcolicion_man_y,0)=id)
{
idman_y-=1;
//para el punto de colicion con el player;
idcolicion_man_x=idman_x+26;
idcolicion_man_y=idman_y+46;
}


//Para La rueda
//Movimiento y

idrueda_direction-=(1+velocidad);
if(idrueda_direction>360){idrueda_direction-=360}
if(idrueda_direction<0){idrueda_direction+=360}

posx=0;
posy=0;
for(i=0;i<360;i+=5)
{
direction_ram=(idrueda_direction+i-15);
//if(direction_ram>360){direction_ram-=360}
//if(direction_ram<0){direction_ram+=360}

dis=28;
if(frac(i/180)=0){dis=30}

posx=idcentro_rueda_x+dis*cos(direction_ram*pi/180);
posy=idcentro_rueda_y-dis*sin(direction_ram*pi/180);

while(instance_position(posx,posy,0)=id)
{
idrueda_y-=1;
//para el centro de la rueda
idcentro_rueda_x=idrueda_x+20;
idcentro_rueda_y=idrueda_y+20;
posx=idcentro_rueda_x+dis*cos(direction_ram*pi/180);
posy=idcentro_rueda_y-dis*sin(direction_ram*pi/180);
}

//if(frac(i/120)=0)
//if(dis=27 and i2=0)
{
//draw_circle(posx,posy,2);
//draw_line(idcentro_rueda_x,idcentro_rueda_y,posx,posy);
}

while((instance_position(posx,posy,0)=id) and (idrueda_gravedad))
{
//gravedad
idrueda_gravedad-=1;
}

}// fin for(i=0;i<360;i+=5)






}//fin for(i2=0;i2<=1;i2+=1)
////////////////////////////////////////Fin Duplicando la posicion del objeto


idrueda_y+=idrueda_gravedad;

//para el centro de la rueda
idcentro_rueda_x=idrueda_x+20;
idcentro_rueda_y=idrueda_y+20;

////////////////secuencia de imagenes
//Para la rueda
idrueda_image=idrueda_image_inicio+floor(idrueda_direction/18);
idman_image+=0.2;
//para el hombre
if(idman_image>idman_image_final){idman_image=idman_image_inicio}
/////////////Fin secuencia de imagenes

}//fin if(estado="juego iniciado")
/////////////////////////////////////////////////////////////////////













//////////////////////////////////////Seccion de dibujos
//Dibujando objetos



c1=(estado!="top 10");
if(c1)
{
//dibujando el mapa 1
draw_sprite(sprite_index,idmap0_image,idmap0_x,idmap0_y);
//dibujando el mapa 2
draw_sprite(sprite_index,idmap1_image,idmap1_x,idmap1_y);
//dibujando cuerda
draw_line(idcuerda_x1,idcuerda_y1,idcuerda_x2,idcuerda_y2);
//dibujando el player
draw_sprite(sprite1,idman_image,idman_x,idman_y);
//dibujando la carreta
draw_sprite(sprite1,idcarreta_image,idcarreta_x,idcarreta_y);
//dibujando la rueda
draw_sprite(sprite1,idrueda_image,idrueda_x,idrueda_y);
}





bloquear='
///Para la carreta
for(i=0;i<=72;i+=5)
{

posx=idcoliciona_x;
posy=idcoliciona_y;
posx+=i*cos(idcarreta_direction*pi/180);
posy-=i*sin(idcarreta_direction*pi/180);
draw_circle(posx,posy,2);
}
draw_circle(idcentro_carreta_x,idcentro_carreta_y,2);
//'





//dibujando score
c1=(estado="juego iniciado");
c2=(estado="game over");
if(c1 || c2){draw_text(280,10,score)}


///////////////////////////////Dibujos de portada
if(estado="portada")
{

//controlando botones
click=0;
click_id="";

//dibujando boton comenzar
boton_id="comenzar";
boton_x=idcomenzar_x;
boton_y=idcomenzar_y;
boton_image=idcomenzar_image;
boton_estado=idcomenzar_estado;

c1=(mouse_x>boton_x);
c2=(mouse_x<boton_x+64);
c3=(mouse_y>boton_y);
c4=(mouse_y<boton_y+32);
c5=(c1 and c2 and c3 and c4);
if(c5){boton_estado=1;click=1;click_id=boton_id}else{boton_estado=0}
draw_sprite(sprite1,boton_image+boton_estado,boton_x,boton_y);


//dibujando boton top 10
boton_id="top 10";
boton_x=idtop10_x;
boton_y=idtop10_y;
boton_image=idtop10_image;
boton_estado=idtop10_estado;

c1=(mouse_x>boton_x);
c2=(mouse_x<boton_x+64);
c3=(mouse_y>boton_y);
c4=(mouse_y<boton_y+32);
c5=(c1 and c2 and c3 and c4);
if(c5){boton_estado=1;click=1;click_id=boton_id}else{boton_estado=0}
draw_sprite(sprite1,boton_image+boton_estado,boton_x,boton_y);

//Al hacer click
if(click)
{
click_time+=1;
if(click_time>10)
{
if(click_id="comenzar"){estado="juego iniciado"}
if(click_id="top 10"){estado="top 10"}
}
}
else
{
click_time=0;
}


//dibujando texto portada
draw_text(idtexto_portada_x,idtexto_portada_y,idtexto_texto);

//dibujando titulo del juego
draw_sprite(sprite1,idtitulo_image,idtitulo_x,idtitulo_y);
}
/////////////////////////////   Fin dibujos de portada



//////////////////////////////Dibujos del top 10
if(estado="top 10")
{
draw_text(85,10,"Los 10 puntos más altos:");
dx=75;
dy=35;

for(i=1;i<=10;i+=1)
{
nombre=highscore_name(i);
puntaje=highscore_value(i);
puntos=".";
texto=string(i)+". "+string(nombre)+" "+string(puntos)+" "+string(puntaje);

while((string_width(texto)>200) and string_length(nombre))
{
nombre=string_delete(nombre,string_length(nombre),1);
texto=string(i)+". "+string(nombre)+" "+string(puntos)+" "+string(puntaje);
}

while(string_width(texto)<200)
{
puntos+=".";
texto=string(i)+". "+string(nombre)+" "+string(puntos)+" "+string(puntaje);

}

while(string_width(texto)>200 and string_length(puntos))
{
puntos=string_delete(puntos,1,1);
texto=string(i)+". "+string(nombre)+" "+string(puntos)+" "+string(puntaje);

}




draw_text(dx,dy,texto);
dy+=20;
}

//controlando botones
click=0;
click_id="";

//dibujando boton volver
boton_id="volver";
boton_x=idvolver_x;
boton_y=idvolver_y;
boton_image=idvolver_image;
boton_estado=idvolver_estado;

c1=(mouse_x>boton_x);
c2=(mouse_x<boton_x+64);
c3=(mouse_y>boton_y);
c4=(mouse_y<boton_y+32);
c5=(c1 and c2 and c3 and c4);
if(c5){boton_estado=1;click=1;click_id=boton_id}else{boton_estado=0}
draw_sprite(sprite1,boton_image+boton_estado,boton_x,boton_y);

//Al hacer click
if(click)
{
click_time+=1;
if(click_time>10)
{
if(click_id="volver")
{
game_restart();
}
}
}
else
{
click_time=0;
}

}//fin if(estado="top 10")



////////////////////////////Dibujos de game over
if(estado="game over")
{
//controlando botones
click=0;
click_id="";

//dibujando boton reiniciar
boton_id="reiniciar";
boton_x=idreiniciar_x;
boton_y=10+idreiniciar_y*(idcentro_carreta_y<100);
boton_image=idreiniciar_image;
boton_estado=idreiniciar_estado;

c1=(mouse_x>boton_x);
c2=(mouse_x<boton_x+64);
c3=(mouse_y>boton_y);
c4=(mouse_y<boton_y+32);
c5=(c1 and c2 and c3 and c4);
if(c5){boton_estado=1;click=1;click_id=boton_id}else{boton_estado=0}
draw_sprite(sprite1,boton_image+boton_estado,boton_x,boton_y);

//Al hacer click
if(click)
{
click_time+=1;
if(click_time>10)
{
if(click_id="reiniciar")
{

if(score>highscore_value(10))
{
mensaje="!Has entrado en el top 10!
Escribe tu nombre:";
nombre=get_string(mensaje,"Anónimo");


c1=(string_length(nombre)>10);
c2=(string_length(nombre)<3);

while(c1 || c2)
{

if(string_length(nombre)>10)
{
mensaje="Los nombres no pueden tener más de 10 caracteres.
Vuelve a intentarlo:";
nombre=get_string(mensaje,nombre);
}

if(string_length(nombre)<3)
{
mensaje="Los nombres no deben tener menos de tres caracteres.
Vuelve a intentarlo:";
nombre=get_string(mensaje,nombre);
}
c1=(string_length(nombre)>10);
c2=(string_length(nombre)<3);
}

highscore_add(nombre,score);
}
game_restart();

}
}
}
else
{
click_time=0;
}
}
////////////////////////////Fin Dibujos de game over

//////////////////Fin seccion de dibujos





//texto
vw00=room_width;
vh00=room_height;
dx=0;
dy=0;
txt="";
ver="txt";

//Posicionar cursor aquí
if(ver!='txt'){draw_text(dx,dy,'txt: '+string(txt));dy+=20;if(dy>vh00-20){dy=0;dx+=vw00/2}}
if(ver!='txt'){draw_text(dx,dy,'txt: '+string(txt));dy+=20;if(dy>vh00-20){dy=0;dx+=vw00/2}}
if(ver!='txt'){draw_text(dx,dy,'txt: '+string(txt));dy+=20;if(dy>vh00-20){dy=0;dx+=vw00/2}}
if(ver!='txt'){draw_text(dx,dy,'txt: '+string(txt));dy+=20;if(dy>vh00-20){dy=0;dx+=vw00/2}}
if(ver!='txt'){draw_text(dx,dy,'txt: '+string(txt));dy+=20;if(dy>vh00-20){dy=0;dx+=vw00/2}}
if(ver!='txt'){draw_text(dx,dy,'txt: '+string(txt));dy+=20;if(dy>vh00-20){dy=0;dx+=vw00/2}}
//fin codigo


Desventajas de la primera versión:
1. Presentó algunas fallas en el código.
2. Los pasos para armar el juego eran complicados.
3. La exposición html5 dificultaba la entrada de dispositivos móviles.

Mejoras:
1. Ahora los pasos para armar el juego son fáciles de seguir, evitando la modificación de sprites y el uso de varios objetos.
2. La exposición html5 es más agradable y permite móviles.

Datos técnicos:
1. Se desarrolló un sistema de colisiones que no emplea el place_empty, place_meeting o place_free, el cual está compuesto principalmente por la función instance_position.
2. Al principio se requería el uso de varios objetos (la carreta, la rueda, el hombre, la superficie y el objeto controlador),  Ahora en la room existe un solo objeto sin instancias, el cual se encarga de interpretar todo.
3. Lamentablemente el score no es online, ya que carezco de conocimientos para crear un score online html5.


7
General / Game maker, ideas.
« en: Julio 02, 2021, 01:09:16 am »
Hola gusto en saludarlos.  :)

Hoy hice este bosquejo mientras pensaba en Game Maker y quería hablarles de eso.



1.   Al principio de la imagen vemos a un hombre jalando una carreta hacia una montaña.

Hace algunos años cree un juego llamado “la carreta precisa”, actualmente le estoy haciendo modificaciones para poder presentarles pronto el mismo juego con grandes cambios en su código interno, el objetivo principal del pequeño proyecto es diseñar una nueva forma de ofrecer o compartir juegos sin tener que recurrir a la descarga del mismo, pero esto se lo dejo para el próximo post donde profundizaré con más detalles.

Preguntas de razonamiento:
a.   ¿Cómo se pudiese lograr que un juego le llegue a otra persona sin recurrir a la descarga o a la exposición de juegos html5?
b.   ¿Cómo logras crear un juego con muchas instancias si has colocado un solo objeto en la room y no puedes usar instance_create por motivos de compatibilidad?

2.   La cuadricula.
En el bosquejo se ve una pequeña cuadricula y arriba de esta aparece la palabra “collicion block” (bloque de colisión) y refleja la idea de crear un sistema de colisión independiente donde se recurrirá a la cuadriculación de ciertas áreas de la room permitiendo “en teoria” colisiones entre arrays.  Lo que pudiese permitir en el futuro crear pequeños juegos de plataformas donde no existan sprites pero un así existan imágenes y colisiones.

Preguntas de razonamiento:
1.   ¿Cómo lograrías una colisión entre entidades sin usar sprites?
2.   ¿Cómo mostrarías una imagen sin usar sprites ni background?

3.   Pequeña lista que dice: 1 objeto, 1 room y un script.
Siempre he valorado la creación de juegos a punta de código, y en esta lista se refejan los tres componentes que requeriría el juego:

A.   Objeto: Con tan solo un objeto se pueden crear muchos otros objetos los cuales pueden cambiar de forma, usos y apariencias.
B.   Room: Sin cuarto no hay juego, pero un juego no requiere tener objeto…. ¿qué?.
C.   Script: El script es indispensable, bueno no siempre.


Preguntas de razonamiento:
A.   ¿Se puede crear un video juego completo solo con código sin sprites ni background?
B.   Un juego creado solo con códigos, sin sprites ni background ¿pudiese mostrar el sprite original de mario?
C.   ¿Cómo crearías un juego en game maker sin usar objetos?
D.   Ahora ¿Cómo crear un juego con un objeto un cuanto pero sin script?


4.   Lo relacionado con php.

Me bastó con ver un solo video de php para darme cuenta de las cosas que se pueden crear al unir php con game maker. Bydgle, ya nos había mostrado un post sobre base de datos, game maker studio y php, peroaunque no lo entendí mucho, poco a poco he comprendido que php amplifica las posibilidades del game maker al punto de convertirlo en un framework si lo deseamos, y nos abre las puestas para crear nuestro propio motor de video juegos (con alta velocidad).

Preguntas de razonamiento:
a.   ¿Con game maker puedo crear un framework?

Bueno, con esta me despido, la pregunta que viene a continuación merece una pequeña caricatura:

Un dragón llega a la ciudad



La ciudad queda destruida



El dragón se acerca a tí para proponerte un trato



 ;)
Todas estas preguntas tienen solución, espero sus opiniones, luego daré las respuestas.

8
Hola, saludos cordiales.  8)

Parece mentira que ya han pasado más de 10 años desde que cree este script y hoy vengo a traerle una actualización.



Tengo achaques de viejo así que por favor déjenme explicar el origen y la utilidad del script antes de presentar las mejoras:



Mi propósito era acelerar el desarrollo de video juegos permitiendo la visualización instantánea de variables acortando el tiempo de transcripción de las mismas y el tiempo de carga del juego.



Creo que no te entendí nada.


Ya te explico mejor:



Con este script podemos verificar los valores de las variables de manera rápida sin estar escribiendo muchas veces el draw_text, además te muestra el nombre de la variable. Esto me sirvió mucho para programar complejos script y visualizar muchísimas variables.



¿Eso es todo?.


No, este script supera al debug-mode, pero solo funciona en game maker 4 hasta game maker 8, lamentablemente a partir del game maker html5 se eliminó la función execute_string y el script perdió compatibilidad.



mmm…..


La actualización: La mejora del script no es más que otro código muy diferente que cumple con el objetivo, funciona en todas las versiones pero se utiliza de manera diferente.

Código del nuevo script:
//texto
txt="";
ver="txt";
vw00=room_width;
vh00=room_height;
dx=0;
dy=0;
sep00=20;//separacion entre lineas

//Posicionar cursor aquí
if(ver!='txt'){draw_text(dx,dy,'txt: '+string(txt));dy+=sep00;if(dy>vh00-sep00){dy=0;dx+=vw00/2}}
if(ver!='txt'){draw_text(dx,dy,'txt: '+string(txt));dy+=sep00;if(dy>vh00-sep00){dy=0;dx+=vw00/2}}
if(ver!='txt'){draw_text(dx,dy,'txt: '+string(txt));dy+=sep00;if(dy>vh00-sep00){dy=0;dx+=vw00/2}}
if(ver!='txt'){draw_text(dx,dy,'txt: '+string(txt));dy+=sep00;if(dy>vh00-sep00){dy=0;dx+=vw00/2}}
if(ver!='txt'){draw_text(dx,dy,'txt: '+string(txt));dy+=sep00;if(dy>vh00-sep00){dy=0;dx+=vw00/2}}

Cómo usar el script:
1. Colocar el script en un evento draw.
2. Posicionar el cursor en donde dice: “posicionar cursor aquí”.
3. Buscar en las herramientas del editor de código la opción “reemplazar texto”.
4. Reemplazar el texto “txt” por el valor de la variable que queramos visualizar.
5. Hacer tres reemplazos por cada variable, es decir presionar “reemplazar ” tres veces. Esto modificará inmediatamente el script adaptándolo a tus necesidades.

Tu código no es muy agradable.



Tienes que verlo en acción para que puedas percibir su utilidad, ya que permite el testeo de variables de manera rápida.



 Yo lo uso todo el tiempo y no puedo programar sin él  ya que me ahorra mucho tiempo de trabajo.



Voy a usarlo.



Adiós, Nos vemos luego.



 8)

9
General / Re: Mi primera pagina web
« en: Junio 24, 2021, 04:53:07 pm »
Hola, buenos días,  ;D

Wow, ¿se pueden crear juegos en esa web?



¡Hay que echarle un vistazo!




Tengo que responder a estas preguntas:
¿Se podrán hacer juegos sin ninguna restricción?
¿Requerirá algún permiso o licencia?
¿Han integrado la monetización para los programadores?
¿Los juegos son multiplataforma o solo para pc?

mmmm…. Solicitan la instalación de flash player



Eso es una limitante para los “no gamers” (las personas que no juegan video juegos frecuentemente), ya que quizás no quieran o no sepan instalar flash player o no quieran instalar el explorador Y8 u Opera GX.

Mmm. Entonces esta web tiene algunos limitantes y tengo que aprender de sus desventajas para crear otra web más accesible.



¿Pero en qué estoy pensando, ni siquiera se programar en php, javascript o html…?


Beno…, estoy descargando el explorador Y8 para juegos flash….


Mi pc presenta muchos obstáculos para instalar Y8 por que es pc de bajos recursos… Ni me imaginaré lo que pasaría si tan siquiera intento instalar Opera GX.


Bueno, hé aprendido muchas cosas, por ahora solo sé que esa web puede ser mejorada.


Resumen de la cosa:
1.   La web no es apta para pc de bajos recursos.
2.   Requiere flash player (instalar y8 u Opera GX).

Bueno, eso es todo por ahora, seguiré explorando, gracias por el aporte.


 ;D

10
Desarrollo de Scripts / ajuste_canvas_html5(width,height);
« en: Junio 24, 2021, 06:28:11 am »
Nombre del autor : Reyes Dávila.
Breve descripción de su función : Ajusta el canvas (el área de juego) en exploradores web, manteniendo la proporcion aunque se cambie la orientacion del dispositivo movil.
Versión GM utilizada : Game Maker studio.

Código del script:
ajuste_canvas_html5(width,height);




///ajuste_canvas_html5(width,height);
//Este script deberá ser llamado "ajuste_canvas_html5"
//Colocar en evento create: ajuste_canvas_html5("create");
//Colocar en evento step : ajuste_canvas_html5("step");

if(argument0="create")
{
    ///////////////////////////////////Datos a modificar
    Ancho00=room_width;
    Alto00=room_height;
    intervalo_ajuste=20;
    //////////////////////////Fin de datos a modificar

    ajuste_canvas_html5_step_time=0;
    proporcion_browser_previa=0;
    modulo="otro";
    if(string_length(string(self))>2){modulo="html5";alarm[0]=20};
}

if(argument0="step")
{
    ajuste_canvas_html5_step_time+=1;
    if(ajuste_canvas_html5_step_time=intervalo_ajuste)
    {
        ajuste_canvas_html5_step_time=0;
       
        proporcion00=Ancho00/Alto00;
        proporcion_browser00=browser_width/browser_height;

        if(modulo="html5")
        {
            if(proporcion_browser00!=proporcion_browser_previa)
            {
                anchox100=90*browser_width/100;
                altoy100=90*browser_height/100;
                altoy00=anchox100/proporcion00;

                while(altoy00>altoy100)
                {
                    anchox100-=1;
                    altoy00=anchox100/proporcion00;
                }

                window_set_size(anchox100,altoy00);
                window_set_position((browser_width-anchox100)/2,0);

            }//fin if(proporcion_browser00!=proporcion_browser_previa)

            proporcion_browser_previa=proporcion00;
        }
    }
}









Modo de uso

1. Crear un script llamado: ajuste_canvas_html5 con el código anterior.

2. En el evento create colocar:
 ajuste_canvas_html5("create");

3. En el evento step colocar:
 ajuste_canvas_html5("step");

11
General / Re: Mi primera pagina web
« en: Junio 23, 2021, 12:12:24 am »
Hola saludos cordiales,  :D.



Felicidades por la iniciativa, programar páginas webs es indispensable para todo programador, supongo que integrastes algún código php. Mediante php se pueden crear increíbles aplicaciones webs.




Uno de mis propósitos es crear una web con php que permita a los usuarios crear sus propios video juegos, eso parece una tare sumamente difícil, pero con solo aprender lo básico de php y manejo de cadenas de textos, se pudiese integrar php con game maker mediante los juegos html5.




Mi cabeza da muchas vueltas al respecto y mi esperaza visualiza en el futuro cercano a una web capaz de crear video juegos multiplataforma sin restricciones de ningún tipo.

CHAO O CHAU, NOS VEMOS.


12
Preguntas y respuestas / Re: Room
« en: Junio 20, 2021, 09:35:54 pm »
Hola saludos cordiales. :)

Windows es la plataforma ideal para game maker y era la unica antes que saliera gamemaker para mac. Quiero con esto afirmar que el gamemaker trabaja correctamente en windows, pero al exportar a cualquier otra plataforma se podran percibir algunas diferencias, las cuales pudiesemos llamarlas "fallos", pero no son fallos son diferencias.

Esto ocurre muchas veces al exportar a html5, y para solucionarlo no queda nada mas que hacer pruebas y encontrar las diferencias entre plataformas, luego que si quieres obtener un juego multiplataforma sin fallas tendrias  que crear un codigo que se adapte automaticamente segun la plataforma destino.

13
Juegos completos / Agua pal pueblo
« en: Junio 08, 2021, 05:39:23 am »


Agua pal pueblo


Plataformas


GM4 y Html5

Cada vez que puedo voy a buscar agua potable para mí y mis vecinos, estoy contento de poder ayudar principalmente a las personas necesitadas.




Para todas las plataformas y sistemas:
agua_pal_pueblo


Más información:
Lo he creado para mostrarles la realidad que vivo y lo agradable que es ayudar a los vecinos.

Datos técnicos:
1. Para agilizar la creación de video juegos, me es conveniente crear una plantilla que me ofrezca los códigos básicos para no tener que volver a empezar de cero.
2. Luego de tener la plantilla me conviene crear pequeños generadores de juegos básicos que me ayuden a crear pequeños niveles de forma rápida.
3. La calidad de los juegos puede aumentar si agrego mejores imágenes y más niveles, siempre y cuando no pierda el sentido del juego, su significado y su espíritu.
4. Tengo la esperanza de producir un juego diario de buena calidad.
5. Monetización: …. Sin decisiones certeras. Estuve integrando acortadores de link para recibir algo de dinero por cada jugada, pero al parecer esto no fue muy aceptable por el público. Se requieren más experimentos y quizás nuevas estrategias.


14
Preguntas y respuestas / Re: camara estilo mario bros
« en: Mayo 31, 2021, 05:54:40 am »
Hola fedex2020.

1.   La cámara se llama view.
2.   La view tiene una posición x en la room, la cual se almacena en una variable o función.
3.   Creo que la función que almacena la posición de la view se llama view_xview[0...7].
4.   En otras versiones de gmk la función se llama view_left[0..7].
5.   Si tienes una sola view, el índice de la view es cero, ejemplo: view_xview[0].
6.   Existen varios métodos para que la view siga a un objeto.
7.   Uno de tantos métodos permite que la view no se devuelva.
8.   Los métodos dependen del ingenio del programador.
9.   Los métodos no son más que scripts donde se combinan las funciones de la view.
10.   No necesariamente tienes que comprender todo lo que se ha dicho.


Recomendaciones para lograr que una view siga a un objeto y no se devuelva.

1.   Especifica tu versión de game maker.
2.   Crea una view con un tamaño adecuado en la view.
3.   Importante: No le actives el seguidor automático de objeto.
4.   En el objeto coloca el siguiente script, en un evento step o paso.

Limite=100;
while(x>(view_xview[0]+limite)){view_xview[0]+=1}

5.   La variable limite indica la posición máxima que debe alcanzar el objeto para que se mueva la view.

6.   En game maker 4 y 5 se usaría:

Limite=100;
while(x>(view_left [0]+limite)){ view_left [0]+=1}

   Suerte, explora y has pruebas, hasta que obtengas lo que necesites.

15
Juegos completos / El piloto sin licencia
« en: Mayo 26, 2021, 08:21:21 am »


El piloto sin licencia


Naves


GM: Html5

Lo agradable que es charlar y compartir con los amigos.




Puede jugarse desde cualquier dispositivo en esta web:
Game_web

Más datos:
Esta obra le he creado para compartir algo con ustedes, es bastante corta pero estoy seguro que mediante esta lograré transmitir algunas pequeñas y diminutas emociones.

Datos técnicos:

 Mediante este pequeño juego obtuve los siguientes datos:

1.   El área de los juegos html5 se llama “canvas”, y este puede ser modificado cambiando el index.html.

2.   Para evitar que el explorador nos pregunte por el idioma es necesario cambiar en el index.html la etiqueta  <html lang="en"> por <html lang="es">, dependiendo del idioma de destino (“en” para ingles y “es” para español).

3.   La páginas web alojadas en google drive y difundidas por drv.tw presentarán dificultades al momento de actualizarlas. Para solucionar esto será necesario cambiar el nombre de la carpeta raíz lo que significa tener cambiar todo el enlace de la web.

4.   El estilo recomendado para el canvas del index es:
Código: [Seleccionar]

*{
margin-left: auto;
margin-right: auto;
text-align: center;
width: 80vw;
max-width: 80vh;
}

5.   Los juegos html5 pueden usar “view” adecuadamente.

Páginas: 1 2 3 ... 14