Foros del Web » Creando para Internet » Diseño web »

Juego Online

Estas en el tema de Juego Online en el foro de Diseño web en Foros del Web. Buenas tardes. Desde hace ya un tiempo, he desarrollado pequeños juegos en applets, flash y otros, y uno de mis intereses es, el de poder ...
  #1 (permalink)  
Antiguo 08/03/2010, 23:50
Avatar de daPhyre
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: [email protected] (Redirects to 127.0.0.1)
Mensajes: 2.404
Antigüedad: 16 años, 1 mes
Puntos: 142
Juego Online

Buenas tardes.

Desde hace ya un tiempo, he desarrollado pequeños juegos en applets, flash y otros, y uno de mis intereses es, el de poder crear un juego online (Donde dos personas desde su ordenador cada uno, interactuen en un mismo juego).

Sin embargo, por más que he intentado buscar, no he encontrado algún lugar donde haya información de como crear uno.

No busco nada avanzado por ahora, tan solo poder comprender como hacer para que dos objetos interactúen en una "misma página" controlados de ordenadores distintos. Si alguien conoce como hacerlo o donde hay un manual al respecto, estaría realmente agradecido.

Tengo ya conocimientos de PHP y bases de datos, cualquier plataforma de desarrollo está bien por ahora para mi, cualquier ayuda que me puedan brindar por favor, en verdad me servirá.

Gracias desde ahora
__________________
<signs>daPhyre</signs>
Jugaa.me


Adios al dolor de cabeza de IE...
  #2 (permalink)  
Antiguo 08/03/2010, 23:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Tema movido desde PHP a Web general
  #3 (permalink)  
Antiguo 11/03/2010, 16:15
Avatar de daPhyre
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: [email protected] (Redirects to 127.0.0.1)
Mensajes: 2.404
Antigüedad: 16 años, 1 mes
Puntos: 142
Respuesta: Juego Online

Gracias GatorV.

Aun no he recibido respuestas. ¿Nadie tiene idea? ·~·
__________________
<signs>daPhyre</signs>
Jugaa.me


Adios al dolor de cabeza de IE...
  #4 (permalink)  
Antiguo 11/03/2010, 16:25
 
Fecha de Ingreso: enero-2008
Ubicación: /España/Galicia
Mensajes: 928
Antigüedad: 16 años, 3 meses
Puntos: 21
Respuesta: Juego Online

puedes hacerlo de dos maneras

ajax

php javascript y bases de datos


por ejemplo una batalla lucha

tablas
jugadores
- ID
- jugador
- password
- nivel (default 1)
- exp (default 0)
- fuerza (default 5)
- defensa (default 5)
- agilidad (default 5)
- puntosexp (default 5)
- estadobatallas (default 0)
- ultimoclick (default 0) se actualiza con time() cada click en la web o refresh por ajax

batallas
- id
- jugador1
- jugador2
- estadobatalla
- log


vale, ahora los 2 jugadores entran y entran a la sala de lucha si estan en estado batalla 0. si no es 0, pone, esta en una lucha. (la sala se autorefres cada 5 segundos)

ahora jugador1 envía una petición a jugador 2

jugador1 estado batalla 1
1 significa que el jugador envió una petición de lucha. (así que si es 1, pondrá en la pantalla estas esperando a que el rival responda)

al jugador2 se pone estado batalla 2, osea que le retaron y si en 25 segundos no responde, se auto cancela solo y se ponen los dos a 0, si rechaza igual y si acepta entran los dos a estado batalla 3 al retado y 4 al que reto (4 empieza, 3 en espera).

entra a batalla 3 y entonces sacas los datos. entonces si eres estado 3 te pone, el rival esta eligiendo ataque. y si eres 4 te deja atacar, max 60 segundos si no pierde el combate. (cada 5 segundos se refresh con ajax los datos(ultimo click)) al atacar se te pone en estado 5, y el otro comprueba siempre si existe el estado 5, si es así lee el log (la ultima linea, se separan por | y lo sacamos vía explode). actualiza los datos (vida etc..) y cambia los papeles pone al jugador 2 estado 4 y al otro 3.


esto es un ejemplo pensado de carrerilla, existen mil opciones y depende de lo que quieres hacer te sirve así o si no vía sockets, necesitas 1 servidor siempre online que los jugadores interactuen con el en tiempo "real.

abres la conexión y haces un while infinito, el servidor no para de enviar información si cambia el usuario la va recogiendo.

solo hice algo así con sockets y fue un bot en PHP, para IRC jijijiji


espero haberte ayudado en algo.
__________________
Compra y Vender artículos en https://www.losredactores.com o una comunidad de webmasters ? https://webeamos.com
  #5 (permalink)  
Antiguo 11/03/2010, 17:23
Avatar de daPhyre
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: [email protected] (Redirects to 127.0.0.1)
Mensajes: 2.404
Antigüedad: 16 años, 1 mes
Puntos: 142
Respuesta: Juego Online

Bien, estaba pensando en algo más interactivo. Ya he hecho esa clase de juegos de batalla por turnos, y es fácil leer cada 5 segundos o similar si hay nueva información en la base de datos.

Sin embargo, es la segunda vez que me topo con el término de sockets, y no termino de comprenderlos. ¿Esto es lo que requeriría para lo que busco? ¿Y dónde conseguiría información para "hacer un while infinito" en el servidor?

Hace poco encontré una página con juegos como el que tengo intencionado hacer. Creo que su nombre era OMGPOP o algo similar (Lo buscaré). Agradezco cualquier información extra
__________________
<signs>daPhyre</signs>
Jugaa.me


Adios al dolor de cabeza de IE...
  #6 (permalink)  
Antiguo 12/03/2010, 01:29
 
Fecha de Ingreso: enero-2008
Ubicación: /España/Galicia
Mensajes: 928
Antigüedad: 16 años, 3 meses
Puntos: 21
Respuesta: Juego Online

Bueno, aquí te dejo lo que use yo de sockets para ese tema. Reutilice un código de fdw jijiji, pero bueno no te lies, aquí simplemente conecto la db y hago comandos de protocolo de IRC, tu tendrías que crear las dos partes, yo hacia esque el servidor me enviaba información y le contestaba con fputs. (todo eso darle 1 repaso por php.net).

tu problema que tendrías que hacer también el servidor (Quien recibe los datos y dice que hace).

lo primero, es que realices en el servidor para que la aplicación permita conectarse usuarios, osea al conectarse guarde el nick en una tabla ONLINE. por ejemplo como en el caso del irc PING, PONG y que cada minuto recorra 1 por 1 a los usuarios haciéndoles un ping (le dices hola, si te contesta sigue online)

te aconsejo hacerlo en local, porque este tipo de ficheros se quedan cargados aunque cierres el php. (me explico, yo iniciaba el php en local, se me conectaba al chat el bot y lo cerraba).

tampoco es un campo fácil, y te aconsejo a usar sockets para leer datos de webs, para contactar con algún tipo de servidor y ver como interactua con el usuario y luego tu crear el servidor.

si explicas mas tu proyecto te puedo hacer una base.


por lo que tu dices por ejemplo, quieres hacer que en 1 mapa estén dos jugadores, el mapa tu te puedes mover libremente (por coordenadas mismo) cada paso que da envías al servidor la información de tus coordenadas, pero estas continuamente recibiendo el resto de coordenadas (de los otros jugadores) y actualizándolo en tu php.
__________________
Compra y Vender artículos en https://www.losredactores.com o una comunidad de webmasters ? https://webeamos.com
  #7 (permalink)  
Antiguo 12/03/2010, 01:30
 
Fecha de Ingreso: enero-2008
Ubicación: /España/Galicia
Mensajes: 928
Antigüedad: 16 años, 3 meses
Puntos: 21
Respuesta: Juego Online

te lo pongo aquí porque supera los 10000 caracteres

Código PHP:
<?php

//Conectamos con la db
$con=mysql_connect("91.121.3.112","RCbot""xxxx");
mysql_select_db("RCbot",$con);
//Sacamos datos de bots
$RObots=mysql_query("select * FROM RObots WHERE Estado=1 order by Nick",$con);  
$DBot mysql_fetch_array($RObots);

if(
mysql_num_rows(mysql_query("SELECT * FROM RObots WHERE Estado=1" ))==0) { die("Ningun Bot Libre ;)"); }
//Configuramos los datos del servidor
$bnick="".$DBot['Nick']."";
$bpass ="".$DBot['Pass']."";
print(
$bnick);
$Consulta=mysql_query("select * FROM Canales WHERE Bot='".$bnick."' order by Canal asc",$con);  
$canales[0][0] = "";
while(
$Canal mysql_fetch_array($Consulta)) {
    
$canales[$Canal['Canal']][0] = $Canal['fijo'];
    
$canales[$Canal['Canal']][1] = $Canal['variable'];
}

$conexion fsockopen("paix.irc-hispano.org"6667);

//Sacamos Los Canales Del Bot
$CanalesBot=mysql_query("select * FROM Canales WHERE Bot='".$bnick."'",$con);  
$autojoin "";
$c 0;
while(
$DCanales mysql_fetch_array($CanalesBot)) {
    
$autojoin[$c] = $DCanales['Canal'];
    
$c++;
}
$autojoin implode(",",$autojoin);
$mnick "^SainT^";
//Leemos los admins y los metemos en un array
$c=0;
$NAdmins[0]= "";
$Admins=mysql_query("select * FROM Admins",$con);  
while(
$DAdmins mysql_fetch_array($Admins)) { 
    
$NAdmins[$c] = $DAdmins['Nick'];
    
$c++;
}


$open fopen("log.txt","w+"); //siempre es bueno tener un log de las conversaciones :) 

// Identificamos al bot
fputs($conexion"USER ".$bnick." - - :[RC]Stats Estadisticas para tus canales\n");
fputs($conexion"NICK ".$bnick.":".$bpass." -\r\n");

//Guardamos en un log todo lo que pasa en el servidor

// Aremos un loop infinito mientras este conectado al servidor.
while (!feof($conexion)) {
    
$bmsg str_replace("\n"""str_replace("\r"""fgets ($conexion,2048)));
    
fwrite($open"$bmsg");
    
fwrite($open"\n\n");
    
$comando explode(" ",$bmsg);
    
    
$read str_replace("\n","",$bmsg);
     
$read str_replace("\r","",$read);
     
$array explode(" ",$read); 
            
    
$n =  explode("!",$comando[0]);
    
$nick str_replace(":","",$n[0]);

    
// Resiviremos los mensajes del servidor.

    // Al enviarnos el PING responderemos con PONG.. (Dudas, aprende protocolo IRC)
    
if ($comando[0] == 'PING') {
        
fputs($conexion,'PONG '.str_replace(':','',$comando[1])."\n");
        
// Si el el primer ping entraremos a los canales. (Este ping lo hace cuando se conecto.)
        
if(!$bconnect) {
            
// El script no se acabara nunca omenos que se caiga.
            
set_time_limit(0);
            
fputs($conexion,"JOIN ".$autojoin."\n");
            
$bconnect=1;
                
mysql_query("UPDATE RObots SET Estado=2 WHERE Nick='".$bnick."' limit 1"); 

        }
    }
//Saca el nick
$buscar =  explode("!",$comando[0]);
$Nickuser str_replace(":","",$buscar[0]); 
    
//para que no repitan los comandos//
    
$timer time() - $respuesta[$Nickuser];
    if(
$timer 0) {
    
//escribimo todo en un log



// el } fin comandos de admin
        
if ($Nickuser == "[RC]Bot" AND $comando[2] == $bnick) {
            if(
$comando[3] == ":!Entra") {
            if(
$comando[4]) {fputs($conexion,"JOIN :".$comando[4]."\n"); } else {
      
fputs($conexion"PRIVMSG ".$comando[2]." :debes ponerme un canal donde entrar\n");
    }
        }
        }
        if(
mysql_num_rows(mysql_query("SELECT * FROM Admins WHERE Nick='".$Nickuser."'"))==1) { 
//Empezamos con los comandos por privado
//el [3] es la 1º palabra 
    
if ($comando[2] == $bnick) {
switch (
$comando[3]) {
//si el comadno es !exit
    
case ":!quit":
    case 
":!Quit":
    case 
":!exit":
    case 
":!Exit":
    case 
":!Desconecta":
    case 
":!desconecta":
    
$quit "[RC]Bot - Visitame en http://www.saint-rc.es"
    
fputs($conexion,"QUIT :$quit\n"); 
    
mysql_query("UPDATE RObots SET Estado=1 WHERE Nick='".$bnick."' limit 1"); 
    break;    
}
    }
//los } } de arriba finalizan el if y el switch

}
            if(
mysql_num_rows(mysql_query("SELECT * FROM Canales WHERE Canal='".$comando[2]."'" ))==1) {
//para usarios
switch ($comando[3]) {
    case 
":!stats":
    
$query=mysql_query("SELECT * FROM Nicks WHERE nick='".$Nickuser."' AND Canal='".$comando[2]."'");
    
$Duser mysql_fetch_array($query);
    
$color "\x02\x033";
    
fputs($conexion,"PRIVMSG $comando[2] : ".$canales[$comando[2]][1]."".$Nickuser." ".$canales[$comando[2]][0]."Llevas".$canales[$comando[2]][1]." ".$Duser['Lineas']." ".$canales[$comando[2]][0]."lineas escritas,".$canales[$comando[2]][1]." ".$Duser['Palabras']." ".$canales[$comando[2]][0]."palabras escritas,".$canales[$comando[2]][1]." ".$Duser['Letras']." ".$canales[$comando[2]][0]."letras escritas \n");
    
$respuesta[$Nickuser] = time()+2;
    break;
    case 
":!lineas":
        
    
$query=mysql_query("SELECT * FROM Nicks WHERE nick='".$Nickuser."' AND Canal='".$comando[2]."'");
    
$Duser mysql_fetch_array($query);
    
fputs($conexion,"PRIVMSG $comando[2] :".$canales[$comando[2]][1]."".$Nickuser." ".$canales[$comando[2]][0]."Llevas".$canales[$comando[2]][1]." ".$Duser['Lineas']." ".$canales[$comando[2]][0]."Lineas\n");
    
$respuesta[$Nickuser] = time()+2;
    break;
    case 
":!letras":

    
}

    }
        
//lo de arriba cierra el timer


            
    
$comando[2] = str_replace(":","",$comando[2]); 
    if (
eregi("#",$comando[2]) AND eregi(":",$comando[2]) == AND !eregi("@",$Nickuser)) { 
    
//cuando escriben los users
    
if(mysql_num_rows(mysql_query("SELECT * FROM NickProhibidos WHERE Nick='".$Nickuser."'"))==AND $Nickuser != "" AND $Nickuser != " " ) { 
    if(
mysql_num_rows(mysql_query("SELECT * FROM Nicks WHERE nick='".$Nickuser."'  AND Canal='".$comando[2]."'" ))==1) { 
    
$texto array_slice($comando,3);
    
$texto implode(" "$texto);
    
$palabras sizeof(explode(" "$texto));
    
$letras strlen($texto);
    
mysql_query("UPDATE Nicks SET Lineas=Lineas+1, Palabras=Palabras+".$palabras.", Letras=Letras+".$letras." WHERE nick='".$Nickuser."' AND Canal='".$comando[2]."' limit 1"); 

    } else {
    
$texto array_slice($comando,3);
    
$texto implode(" "$texto);
    
$palabras sizeof(explode(" "$texto));
    
$letras strlen($texto);
     
mysql_query("INSERT INTO Nicks (Nick, Canal, Lineas, Letras, Palabras) VALUES ('".$Nickuser."', '".$comando[2]."', '1', '".$letras."', '".$palabras."');"); 
    }
 if(
mysql_num_rows(mysql_query("SELECT * FROM Canales WHERE Canal='".$comando[2]."'" ))==1) { 
    
$query=mysql_query("SELECT SUM(Lineas) as LCanal FROM Nicks WHERE Canal='".$comando[2]."'");
    
$DCanalillo mysql_fetch_array($query);
    
$Lcanal $DCanalillo['LCanal'];
    
mysql_query("UPDATE Canales SET Lineas='".$Lcanal."' WHERE Canal='".$comando[2]."' limit 1"); 
 }
    
    
//Fin Nicks
    //Comienza Frases
    
$Frase array_slice($comando,3);
    
$Frase implode(" "$Frase);
    
$Frase substr ($Frase1);
    if(
mysql_num_rows(mysql_query("SELECT * FROM Frases WHERE nick='".$Nickuser."' AND Canal='".$comando[2]."' AND Frase='".$Frase."'" ))==1) { 
    
mysql_query("UPDATE Frases SET veces=veces+1 WHERE nick='".$Nickuser."' AND Canal='".$comando[2]."' AND Frase='".$Frase."' limit 1"); 
    } else {
     
mysql_query("INSERT INTO Frases (Nick, Canal, Frase) VALUES ('".$Nickuser."', '".$comando[2]."', '".$Frase."');"); 
    }
    
    }
    
//Termina lo de nickuser != ""... } de arriba
        //Finaliza lode # el de abajo
    
}
    
    
//empezamos join,part y esas cosas.

    
switch ($array[1]) {
        case 
"JOIN":
            
fputs($conexion,"WHO :$comando[2]\n"); //ejemplo !Say Texto (el bot dira Texto)
        
if ($cojiendonicks == "0") { $userscanal ""; }
        
$cojiendonicks "1";
            
//para actualizar los nicks
        
if(mysql_num_rows(mysql_query("SELECT * FROM Nicks WHERE nick='".$Nickuser."'  AND Canal='".$comando[2]."'" ))==1) { 
        
mysql_query("UPDATE Nicks SET entradas=entradas+1 WHERE nick='".$Nickuser."' AND Canal='".$comando[2]."' limit 1"); 
        } else {
         
mysql_query("INSERT INTO Nicks (Nick, Canal, entradas) VALUES ('".$Nickuser."', '".$comando[2]."', '1');"); 
        }

        break;
    }

    
//Finaliza si esta en el canal
}


}
    
    

// Al no estar conectado al servidor ejecutara este commando que desconectara el socket y terminara el script.
fclose($conexion); 
exit();

?>
__________________
Compra y Vender artículos en https://www.losredactores.com o una comunidad de webmasters ? https://webeamos.com
  #8 (permalink)  
Antiguo 12/03/2010, 15:23
Avatar de daPhyre
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: [email protected] (Redirects to 127.0.0.1)
Mensajes: 2.404
Antigüedad: 16 años, 1 mes
Puntos: 142
Respuesta: Juego Online

Vaya que está largo!

Me daré el fin de semana para estudiarlo con calma, que ahora ando un poco apretado con otros deberes, pero parece ser que me funcionará bien, muchas gracias por tu ayuda.

En resumen, lo que dices es justo lo que deseo (Al menos por ahora, mientras aprendo sobre el tema): dos sprites, cada uno controlado por un jugador, que al moverse uno, se refleje en la pantalla del otro en tiempo real.

Más tarde me liaré con detalles de más sprites, para hacer obstáculos en movimiento que se deban reflejar en ambas pantallas, así como "municiones" de los jugadores. Se que mientras más info sea manejada, más problemas hay en que sea en "tiempo real", pero ya me dedicaré a ver los detalles de como arreglar estos problemas más tarde. Por ahora, un paso pequeño pero seguro.

Muchas gracias
__________________
<signs>daPhyre</signs>
Jugaa.me


Adios al dolor de cabeza de IE...
  #9 (permalink)  
Antiguo 15/03/2010, 16:43
Avatar de daPhyre
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: [email protected] (Redirects to 127.0.0.1)
Mensajes: 2.404
Antigüedad: 16 años, 1 mes
Puntos: 142
Respuesta: Juego Online

Vaya que está liado el código. Quizá no le comprendo tanto por que como no tengo realmente mucha idea de los IRC, no se exactamente qué está haciendo el código.

Pero veré como juego con él a modo de hacer el efecto que deseo, espero lograrlo. Muchas gracias
__________________
<signs>daPhyre</signs>
Jugaa.me


Adios al dolor de cabeza de IE...
  #10 (permalink)  
Antiguo 15/03/2010, 16:48
 
Fecha de Ingreso: enero-2008
Ubicación: /España/Galicia
Mensajes: 928
Antigüedad: 16 años, 3 meses
Puntos: 21
Respuesta: Juego Online

es que yo el lado del servidor no lo aria en php si no en c# o algo así

y desde php te conectas al servidor hecho en c y le dices cosas y el servidor te contesta con las aciones
__________________
Compra y Vender artículos en https://www.losredactores.com o una comunidad de webmasters ? https://webeamos.com
  #11 (permalink)  
Antiguo 15/03/2010, 22:18
Avatar de daPhyre
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: [email protected] (Redirects to 127.0.0.1)
Mensajes: 2.404
Antigüedad: 16 años, 1 mes
Puntos: 142
Respuesta: Juego Online

Vaya. He escuchado de esa opción (Con C, con Python, con lo que desees ), pero jamás la he implementado ni se como.

Aunque como dije desde el comienzo, cualquier cuerda en el tema es bien aceptada y de mucha ayuda
__________________
<signs>daPhyre</signs>
Jugaa.me


Adios al dolor de cabeza de IE...

Etiquetas: juegos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:55.