Ojo!: (¬ ¬) se lee de abajo p´arriba xD los post mas viejos quedan abajo ^^



martes, 15 de diciembre de 2009

sábado, 9 de mayo de 2009

: ( si si, lo se.

Lo se y pido disculpas, llevo mucho tiempo sin postear nada de nada pero la cosa a estado dificil :S, pero eso termina pronto, la semana proxima rindo parciales y el si no surgen mayores inconveniente el viernes 15 actualizo el blog, o por lo menos comienzo a hacerlo :P

Alaos! xD

lunes, 19 de enero de 2009

He aqui mi presencia ( ^ . ^ )

Hoy llegue a Trujillo aproximadamente a las 6:30 y aprovecho la suerte de contar con internet a la mano para dejarles esta referenocia por lo menos xD, lamentablemente no tengo la menor idea de si podre acceder a internet mas tarde por lo que es posible que no deje nada mas en uno o dos dias que es lo que me tomara adaptarme a la situacion, zona y horario para encontrar una buena cabina que se preste para mis publicaciones ^^. No he desayunado aun asi q mi panza comienza a reclamar :*(

Por otro lado, TAY, si tu correo sigue siendo el mismo (abrigando la posibilidad de que no te lo hayan hackeado una vez mas ^^) te mando en unos momentos mis actuales datos sino quedaran a disposicion del hacker xD!!!

Alaos en unos dias ^^.

viernes, 16 de enero de 2009

Wii! Bienvenidos sean al blog del Game Development en el Perú

Me acaban de confirmar que este sabado hay basquetball ^^, que viva el deporte carajo xD.
Aunque estoy un poco fofo, ya se me subio la adrenalina ^^ lo que estoy dejando de lado es que lo mas probable en la condicion fisica en que me encuentro es que mañana termine en emergencias xD.

Con este batimos el record de 1 post por dia ^^ (ta que PRO que soy!! y eso si contamos que el otro post de hoy fue larguisimo para ser solo ideas del proyecto xD)

jajaja, como me empila la musica caramba! estoy oyendo a los masters de "40 gramos" y tanto me prendi que asi a lo Rambo me achore con el Paint y me arme un Logo provicional que les dejo al final de este post^^.


A todo esto se me ocurrio ir armando una serie de tutoriales de SDL a lo largo de la adaptación que le estoy dando al PONG que incluirían SDL, SDL_Net, SDL_TTF y si se da el caso de que se implemente SDL_Draw al proyecto tambien añadiria su uso en el tutorial ^^.

Lamentablemente no incluiría SDL_Mixer ni SDL_Image por un buen tiempo, puesto que no figuran en los planes a corto plazo para el desarrollo de POL (Pong On LAN).

Todo esto sin animos de darmela de profe, sino a modo de colgar un Block de TIPS sueltos (no BLOG sino BLOCK) aclarando, no sera un tutorial de "aprende SDL en 1 dia" o "SDL a Fondo" ¬¬ nono, nada que ver, sino unos apuntes del tipo "no olvides que tambien es posible hacer esto" o del tipo "es mas facil si lo haces asi ^^"
Y con esto facilitar el crecimiento de la comunidad de desarrolladores de Videojuegos:

"Si vienes a cortarnos las alas y trunkarnos los sueños lo mejor que puedes hacer es largrte cuanto antes pues pierdes el tiempo, no hay quien nos detenga!"

Todo en esta web esta hecho con la mejor de las intenciones. Xistin.


Dices que perdí, xq nací aaaaaki...

"Ya no voy a perder, no hay duda esta vez, ahora hay pisco en las venas." (Viva el PERU CSM!)

Asi es señores, a dejar de tirar la toalla!!
Me estaba alejando del Blog x buen tiempo ya ^^, pero me han inspirado nuevamente (increible lo que pueden hacer un par de buenas canciones carajo) a dejar de estar hueveando pues xD.

d(^.^)b (8)(8) Listo, hoy Viernes 16 de enero (cumple de mi hermana :P) armado con un litro de agua "San Luis", una lista de mas de 100 canciones "random" ( que van desde "good morning Baltimore, pasando por "Burn it Up" hasta "Se ha muerto mi abuelo", un cuaderno cuadriculado A4, un lapizero azul, y una PC con mis codigos fuente y el Dev C++ ^^. Hoy sale algo xD!!!
Ojala no me enchufen ninguna tarea compleja!


Movimiento en PONG:

*A partir de este momento cuando escriba PONG no estoy hablando del clasico juego, sino de la version de dicho juego que realizó el grupo XGL y el cual estoy editando para que tenga funcionabilidad en la RED.*

El loop de juego del PONG se ejecuta cada 30 ms o poco mas, es por esto que los FPS (frames per second, o cuadros por segundo) usualmente son 33 o menos en LAN (debido a su algoritmo vagamente elaborado su uso en internet no supera los 21 FPS) pero usualmente no baja de 31, con lo que es mas que suficiente.
Dentro del loop de juego se realizan los desplazamientos ( o actualizaciones de coordenadas de los objetos) tanto de la bola como de las barras. Pero nos centraremos en el de la bola ya que este no es directamente alterado por ninguno de los jugadores.
Los problemas surgen aca, el movimiento en PONG esta dado por dos variables enteras, cada una de ellas relativa a una de las coordenadas (x,y).

Entrando en detalle, dichas variables definen la cantidad de pixeles que la bola se va a desplazar y la direccion en que lo hara en el eje correspondiente. Osea si variable_x = 1 y variable_y =0 la bola se despazara 1 pixel por bucle (loop) hacia la derecha en el eje X (si fuera -1 se desplazaria a la izquierda), similar con la variable_y, 1 arriba, -1 abajo. Por lo tanto solo se puede movilizar a velocidades multiplos del FPS: 0, 33, 66, 99, 123... p/s(pixeles por segundo) en cada eje.
Cabe denotar que estas "variables" pueden entenderse como velocidad ya que te dan a conocer la razon de cambio del espacio (pixeles) por unidad de tiempo (s o ms segun convenga xD)

Pero, mmm... y xq no haces esas variables reales? asi obtendrias las velocidades que gustes, sin que sean multiplos del FPS. :P
Es buena solucion, pero requiere de un agregado, debido a una cuestion grafica que a continuacion explico ^^.

Nuestra pantalla se define en SDL (la libreria con la que trabajamos el PONG) como una superficie plana de Ancho*Alto*Profundidad de color. Tanto el Alto como el Ancho estan en pixeles, por lo que tendriamos una pizarra de puntos donde puedes colocar colores a tu gusto.
Pero, en teoria, no puedes colocar nada entre un punto y otro :S, me dejo entender?, solo podemos colorear los pixeles, no los espacios entre ellos. ^^ tiene sentido cierto?
Ahora digamos que la bola se desplaza de (x=138; y=200) con una velocidad que ingeniosamente hemos definido como un real (Vx=1,5; Vy=0,0) si pensamos a futuro, por ejemplo en el bucle 30 estaremos en la posicion (x=183; y=200) y no paso nada :P... :( Pero!! que pasa en la primera iteracion(bucle)? en el primer frame(cuadro) que debamos dibujar nuestra posicion es la siguiente (x=139,5; y=200) O.o?!!! para el SDL eso significa que debemos buscar en la superficie de pixeles el que se encuentre en la fila 200 entre el pixel de la columna 139 y el de la 140, pero entre pixel y pixel no se puede colorear, por lo tanto no podriamos pintar nuestra bola, lo cual si ocurriera con todos los pixeles de la bola significaria que la bola no se dibujo en ese frame :S, jajaja ^^ pero eso no ocurre porque las funciones graficas no te permiten ingresar una posicion que no sea entera, asi que en lugar de no dibujarse nos botaria un error nuestro juego ^^.

Ahora bien, esto no es el fin del mundo xD, vamos, que lo unico que hay q hacer es un pequeño codigo que nos "redondee" nuestras coordenadas ^^.

Pero :S no gastamos procesamiento al redondear todas nuestras coordenadas O.o???
Si, pero no es asi como lo haremos ^^ puesto que solo debemos redondear la coordenada de posicion del grafico, ya que esta es el punto de referencia de la imagen. si se altera la variable que contiene este punto 10 pixeles en cualquier sentido toda la imagen se alterara la misma distancia y en el mismo sentido ^^, puesto que la funcion de este punto es decirle a SDL desde donde debe empezar a dibujar la bola es por esto que al moverlo mueves todo el dibujo xD.

Es por esto que se acostumbra decir "cual es la posicion del objeto en este momento?" ahi se refieren a su coordenada de referencia, desde donde se comienza a dibujar, sino como diablos responderiamos a esa pregunta?? tendriamos que dar todas las coordenadas? O.o?!!

^^ Entonces la idea como queda?
entonces a partir de este momento la velocidad de desplazamiento va a ser una variable real (o de punto flotante) y los calculos de desplazamiento se realizaran seguidos de un redondeo y conversion a enteros de las coordenadas antes de mandarlos a dibujar. Algunos pensaran, tanto alboroto para tener mayor dominio de la velocidad? O.o? pero no queda ahi, este tramo de codigo que nos permite trabajar la velocidad como real nos va a permitir cosas que aun no habia mencionado porque no las voy a implementar en la version que estoy desarrollando actualmente pero mira, por ejemplo:

de fisica sabemos que:
dada una a = asceleración del objeto, v=velocidad del mismo, e=espacio tambien del mismo.*

*entendamos espacio como la posición del objeto, o para ser mas claros, la distancia desde el eje de cordenadas hasta la posición del objeto

hay una relacion entre ellos gracias a la maravillosa magnitud que permite la existencia de nuestra realidad (wtf O.o??), "el tiempo" ^^

y se da de la siguiente manera:

v(t) - v(0) = a*t
v(t) = a*t + Constante

posicion(t) - posicion(0) = (a*t^2)/2
posicion(t) = v(0)*t + (a*t^2)/2
posicion(t) = (a*t^2)/2 + Constante

Ahora, imaginan que cantidad de errores de precisión se daria si a,v y posicion fueran enteros?
mas teniendo en cuenta que el v(t) que calculas en un bucle sirve de v(0) para la siguiente :S
igual para posicion(t) y posicion(0)..:S si hacemos unas 30 de esas ecuaciones por segundo, imaginen nomas que pasaria en 10 segundos :S!!!

^^ pero afortunadamente todo eso lo vamos a manejar con reales y haremos el algoritmo que ideamos arriba antes de mandar a dibujar xD (con "mandar a dibujar" siempre me refiero a hacer que el programa muestre o "imprima" en pantalla los graficos ^^, no es que tenga mi propio dibujante xD)

Pero Ojo! esta pequeña jugarreta que hacemos es para no perder precisión, si bien redondeamos los valores de la posición de los objetos antes de mandar a dibujar, no chancamos( o sobreescribimos) dichos valores. Atencion ahi! que sino es por gusto! jajaja

un ejemplito :

si mi objeto perro esta en la posicion (234,38; 101,67) y me toca mandar a dibujar lo mandamos a dibujar en la posicion (234; 102).
Pero no por eso vamos a cambiar la posicion del perro, su posicion sigue siendo (234,38; 101,67). jajaja sino imaginen si el perro tuviera velocidad (0,40; 0,30) que pasaria?
ya no se moveria ^^. Cosa que es muy distinta a moverse despacito :P


Puntaje:

Si bien la parte de movimiento me va a tomar mi tiempecito :P no porque sea dificil la implementacion de la idea que he expuesto lineas arriba, sino por el hecho de que trabajo sobre un codigo ya hecho, voy a reemplazar las variables y eso traera consecuencias de incompativilidad en alguna que otra funcion, por lo que voy a tener que arreglarmelas con eso ^^
Otra salida seria no reconstruir sobre lo ya hecho, sino en base a ello, empezar de cero. ya vere como le hago y les cuento ^^.

Con respecto al puntaje son un par de variables enteras, la del servidor y la del cliente xD que guardaran, valga la redundancia, la cantidad de puntos acumulados (mas no los graficos) no, solo usaremos 2 enteros para almacenar los puntos y mediante la sublibreria de SDL llamada SDL_TTF "escribiremos" en un grafico jijiji como es eso? lo que hace la libreria SDL_TTF es ayudarnos a, teniendo un texto y un Font (en formato TTF), generar una imagen con dicho texto escrito en el con el tipo de letra definido en TTF (pero ojo, el resultado ya no es un texto, es una imagen ^^)
la ventaja es que lo generamos en tiempo de ejecucion, no tenemos almacenados todos los graficos correspondientes a cada letra y numero xD con lo que almacenamos memoria, mucha xD, ademas imaginen que quisieramos escribir en 3 o 4 tipos de letra distintos y en 3 tamaños de letra :S:S si lo hicieramos teniendo las imagenes pre-cargadas en memoria nos quitaria demasiada memoria :S:S y eso dependiendo del tamaño de la letra.

Si bien por ahora no vamos a permitir que se acumulen mas de 9 puntos por jugador ^^ en algún momento tendremos que permitirlo, con lo que vamos a requerir de algun algoritmo que nos separe cada cifra del numero y lo pase a texto ^^
ejemplo: 223 (numero) espacio que ocupa en memoria: 1 byte

"223" (cadena de caracteres) espacio que ocupa en memoria: 4 bytes
3: uno para cada cifra, y ademas uno para el finalizador de cadena (caracter que va siempre al final de una cadena de caracteres para indicar precisamente que ahi termina)
ademas pierden su capacidad numerica. "2" + "3" no es "5".. ¬¬ no sean payasos.


Interfaz Grafica de Usuario (GUI):

Para este aspecto planeo agregarle algunos menus basicos al PONG que en su version original no presentaba ninguno, iba defrente a la "acción" ^^.

De momento he pensado en estos:

Menu Principal:
-Opciones: (el usuario podra seleccionar una de ellas mediante un cursor que indica cual esta seleccionando en ese momento, que controlara con las teclas "arriba" y "abajo", + Enter)
-Comenzar juego
-Unirse a un juego
-Opciones
-Salir

Menu Comenzar:
-Nombre (introduce su nombre por teclado)
-Opciones:
-Comenzar (inicia un juego en LAN donde el es el Servidor)
-Volver (regresa al menu principal)

Menu Unirse:
-Nombre
-IP (ingreso de la IP del host via texto)
-Opciones:
-Comenzar (inicia partida contra el Servidor, si hay uno en esa IP)
-Volver

Menu Opciones: (reservado para futuras versiones ^^)

Salir: (te vas ^^)

* para futuras versiones cambiaran los Menus Unirse y Comenzar puesto que se implementara un algoritmo que utilize UDP para ubicar Servidores activos en tu LAN, con lo que ya no necesitaras conocer la IP de tu compañero ni menos introducirla xD.
Tambien se adicionaran opciones al menu Opciones :D jajaja esas cosas van a empezar a aparecer conforme se acompleje el juego, cosas como cambiar la profundidad de color (16, 32bits), encender/apagar el audio (como dije "para futuras versiones"), etc etc... xD


Bueno gente! xD los dejo de momento que tengo que trabajar que para eso me pagan ^^!!!

Y perdon si escribo mucho pero es debido a que no se si limitarme a escribir tecnicamente y asumiendo que saben de programacion, de SDL e incluso del proyecto PONG jajaja debe ser porque no comence este Blog cuando comenzamos a crear el PONG, tratare de arreglarlo con el tiempo ^^ Saludos a todos! :P

miércoles, 14 de enero de 2009

Querido diario... O.o? wtf?!!!

Si señores! "y ya llego!" xD.


Hola a todos, como podran apreciar, ya volvi ^^. Aunque con un poco de nauseas :S debido al antiestaminico ( ¬¬ corrijanme si no se escribe asi xD... ) que estoy obligado a tomar,xq el otro me da sueño y ya vivi la horrible experiencia de ir a trabajar hecho un zombi.. :( lo cual por obvias razones no le agrada al jefe xD. Todo gracias a un gentil auspicio de un domingo de golpes, balasos y resfriados ^^.


Volviendo con prisa al tema del POL, ya resolvi el problema de la "incolicionabilidad de la pelota" (sumare Karijo! O.o? q es eso?), en otras palabras, el hecho de que la pelota no colicionara cuando debia hacerlo (al menos cuando el usuario espera que lo haga) y no lo hice con intencion de hacer trampa, como menciona "bichitoz" en alguno de sus comentarios u.u, es muy simple y lo explico a continuacion.


En la version original del Pong desarrollada por XGL, en la cual me base para hacer esta version y no contaba con capacidad de multijugador, ambas barras se desplazaban de igual manera en todo instante a lo largo del eje Y, en el eje X las barras nunca se desplazan. Es debido a esto que el algoritmo de coliciones se elaboro en base a la barra izquierda unicamente, la que en esta version viene a ser la barra del Servidor, y se proyectaba una imagen de esta a una distancia adecuada para que coincidiera con el lugar que supuestamente estaba ocupando la barra derecha.


Se podria decir que, para la version inicial, solo existia el objeto barra_izquierda y no existia barra_derecha, sino solo su grafico, y lo que se hacia era lo siguiente:

El objeto "barra_izquierda" tenia 2 bloques(o areas) de coliciones, por donde la pelota no podia transitar, uno exactamente bajo el area que ocupara su grafico y otro a una distancia conocida hacia la derecha justo debajo del grafico correspondiente a la barra_derecha. y lo que se hacia era actualizar constantemente la coordenada Y de la grafica de la barra_derecha de modo que fuera igual a la coordenada y del objeto "barra_izquierda".


A continuacion lo ilustro con una imagen xD:


Como podran ver, los problemas comienzan cuando la barra derecha ya no tiene siempre la misma coordenada Y que la barra izquierda, y esto precisamente ocurre en un juego multijugador puesto que cada jugador tiene el completo control del desplazamiento de su barra en el eje Y y es por eso que se pueden dar casos como el de la imagen, donde una barra esta abajo y la otra arriba. Y esto para muchos es perfectamente normal porque "en eso consiste el juego" para que vas a jugar si tu barra la mueve el enemigo? jajajaja pero es eso lo que me ocurria cuando probe el juego con unos patas ^^.
Sin saberlo, para el programa, yo manipulaba ambas barras a mi antojo, mientras que mi compañero (o enemigo) solo manipulaba la imagen de su barra, el grafico, mas no el objeto en concreto. Es por eso que en la imagen que puse arriba se dio esa incongruencia con la pelota. Porque aunque ambos veiamos su barra arriba lista para golpear la pelota, para el juego su barra estaba abajo, a la misma altura que la mia. y la bola se iba de largo ^^, por ese algoritmo no apropiado para multijugadores fui tildado de "tramposo" por bichito, cuando ni yo entendia por que ocurria eso :D pero precisamente para eso son las pruebas cierto? para encontrar errores (o bugs) y evitarle un mal rato al usuario final xD.
De momento ya esta arreglado eso, ahora faltan agregar puntajes y contadores de vida para probar la siguiente version ^^.
Una vez hecha la interfaz inicial del juego lo pongo en descarga, pero eso si no prometo que sea pronto.

lunes, 12 de enero de 2009

Y dicen que no duele ¬¬...

Yo soy el de la barba ^^ mas facil no lo pude decir xD (de los dos con arma arriba, el que tiene casco puesto).
A mi derecha esta David, el del cumple ^^:


El dia de ayer me fui con un grupo de patas al PaintBall, en la universidad Agraria, con motivo de la celebracion del cumple de uno de ellos, David, pero no el del Blog de Bichitoz ^^, sino otro, todos ellos de la promo del cole.
Bueno, resulta que la cosa esta es tan adictiva que a parte de pagar el ingreso que es de 45 lukas percapita, lo cual incluye solamente 60 balas pa cada uno, hicimos una chanchita para comprar un paquete de 500 balas extra xD, la gracia nos salio 150 lukas extra, pero esta vez entre todos, no nos dejaba de gustar el vicio este hasta que fuimos retados por los trabajadores del local.
Fue una muestra de destreza tan extrema que muchos de nosotros aun seguimos sufriendo los rezagos de dicha matanza, los superabamos en numero por 2 unidades, aunque al final fue una experiencia agradable termino con un comentario catastrofico, "ellos no les llegan ni a los tobillos a los representantes nacionales" lo que quiere decir que si algun dia jugaramos con ellos seria practicamente como que ellos tuvieran armas con punteros laser mientras nosotros estuvieramos atados de manos y con los ojos tapados, creen que exajero?? la gente que se dedica a esto no lo hace en broma, si es un deporte costoso, no es de los que puedes practicar con tu pelota de 5 soles en el parque donde jugar es gratis, ademas estamos hablando de gente que compra sus propias armas ^^, si por ahi nos conto uno de los trabajadores que se habian enfrentado a unos patas que tenian armas electronicas que disparaban 11 balas por segundo, mientras que las que te alquilan ahi disparan una por cada vez que jales el gatillo ^^ jajaja.
No por esto la experiencia me ha dejado de parecer buena, ya planeamos una revancha de aca 2 domingos, es que tenemos que juntar como 100 soles sino este domingo que viene nomas jajaja, pero no pienso aceptar mas retos hasta sentirme mas capaz, y dudo que eso sea pronto ^^.
Tomen esto como un comentario fuera de lugar y ya mañana continuo con la programacion, es que la verdad estoy demasiado cansado y ademas coji resfriado en la noche, algunos ya sabran que es ir a trabajar un dia asi :S :S, espero me comprendan, pero seguro mañana ya estoy bien.
Cuidense!