Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Tutorial: Tetris en c++

Iniciado por Loover, 15 de Diciembre de 2008, 03:05:13 AM

« anterior - próximo »

HarvesterOfAcorns

Joe, que yo venía a propósito del tutorial y se me fue la bola, aunque mi cuestión es bastante general y quizás debería plantearla en el foro de programación, pero por no andar buscando la ubicación correcta la dejo aquí y si después hay que cambiarla pues espero me disculpe por las molestia a quien corresponda hacerlo. El caso es que veo que para el "Main Loop" usas un bucle while, como es lógico pues parece que es la forma más usada de repetir los procesos que intervienen en un juego, pero me he dado cuenta que este tipo de soluciones consumen muchos recursos de la CPU, uso portátil modesto y lo canta sin necesidad de recurrir al medidor de rendimiento del sistema, yo voy tras un tetris en javascript como iniciación a este mundo y me pasaba lo mismo con el bucle while así que decidí hacerlo llamando en primera instancia a la función que procesa el juego para que luego ésta se llame a si misma mediante el método setTimeout del objeto window, en una especie de llamada recursiva, aunque me da que no tienen mucho que ver con la recursividad. Mi cuestión es si esto se puede hacer en C++ o povocaría problemas más graves que los que trato de solucionar.

zunou

Cita de: HarvesterOfAcorns en 21 de Diciembre de 2008, 01:28:39 AM
Si es que cada vez es más difícil encontrar una idea original y no lo digo por mi sugerencia que ni siquiera es brillante, supongo que debe haber alguna fórmula matemática que exprese como disminuyen, yo diría que de forma exponencial, las posibilidades de crear algo original a medida que el tiempo pasa. Cierto es que en los primeros tiempos de los videojuegos los recursos de desarrollo eran muy limitados, probablemente inexistentes en la mayoría de los casos, pero por otro lado las posibilidades de de hacer algo nuevo estaban prácticamente intactas. ¿Habrá que ponderarle el mérito a los padres de todo esto?

Reto a alguno de los moderadores, que posea vasto conocimiento de juegos, para que cree un foro que se llame "Expón tu idea original para un juego y te apuesto lo que quieras a que no es original"... ah, que además de vasto conocimiento también tenga pasta vasta, por si acaso.  ^_^'


Pues si, pero creo que es practicamente imposible que cada juego sea unico y original, es mas nuca lo ha siado, siempre ha pasado lo mismo, alguien tenia una idea original, y al poco tiempo todos los juegos tenian esa idea, ligeramente modificada, lo mismo que pasa ahora, tambien lo que creo que pasa es que la tecnologia actual es la misma que la de hace 16 años, no me refiero a los procesadores, memoria, etc... sino a la manera de jugar, a la experiencia de juego, cuando las 2d ya casi no aportaban nada nuevo, apareció el 3d que tenia un monton de posibilidades por explotar,

hoy en dia lo unico nuevo que puede aportar el 3d es mejores gráficos, y en cuanto a originalidad, se ve que cada vez tarda mas en aparecer algo nuevo, asi que tal vez lo que hace falta otro salto como el de el 2d al 3d, yo pienso que será la realidad virtual la que lo cambie todo :D ¿os imaginais las posibilidades que tiene?

aun así un juego puede ser bueno sin ser original, si no mira metal gear, es lo mismo de siempre con otro guión, pero es uno de los juegos mas exitosos, al gta4 le pasa lo mismo, o peor, porque tene menos posibilidades que el anterior, lo unico que aporta son mejores gráficos, y fisica, peeero es un superventas  ^_^, al final lo que importa es que tenga lo que la gente pide..... una locura ¿eh?....

AK47

Cita de: HarvesterOfAcorns en 21 de Diciembre de 2008, 01:49:39 AM
Joe, que yo venía a propósito del tutorial y se me fue la bola, aunque mi cuestión es bastante general y quizás debería plantearla en el foro de programación, pero por no andar buscando la ubicación correcta la dejo aquí y si después hay que cambiarla pues espero me disculpe por las molestia a quien corresponda hacerlo. El caso es que veo que para el "Main Loop" usas un bucle while, como es lógico pues parece que es la forma más usada de repetir los procesos que intervienen en un juego, pero me he dado cuenta que este tipo de soluciones consumen muchos recursos de la CPU, uso portátil modesto y lo canta sin necesidad de recurrir al medidor de rendimiento del sistema, yo voy tras un tetris en javascript como iniciación a este mundo y me pasaba lo mismo con el bucle while así que decidí hacerlo llamando en primera instancia a la función que procesa el juego para que luego ésta se llame a si misma mediante el método setTimeout del objeto window, en una especie de llamada recursiva, aunque me da que no tienen mucho que ver con la recursividad. Mi cuestión es si esto se puede hacer en C++ o povocaría problemas más graves que los que trato de solucionar.

Usar setTimeOut es el unico metodo en javascript para hacer un bucle de render de juego, por llamarlo de alguna manera. Bueno, tienes la funcion setInterval o algo asi, pero es mas o menos lo mismo. En C++ podrias hacer algo asi y de hecho se hace, ya que se tiene un bucle que esta constantemente mirando si hay mensajes del SO y en caso negativo se procesa el juego (en el caso positivo se procesan estos mensajes). Te recomiendo que sigas usando javascript y hagas varios juegos pequeños para empezar a familiarizarte con las estructuras de datos y demas cosas que son habituales a la hora de programar un juego. Luego si quieres algo mas potente puedes tirar de python + cocos2D. De esta forma te dedicas a hacer juegos y no a pelearte con los detalles de C++. Una vez que tengas los conceptos perfectamente claros, aprender C++ (que no es obligatorio) te sera mucho mas facil y seguro (en el sentido que la parta de los algoritmos ya lo tendras aprendido).

Vaya rollo que he soltado!  ^_^

Loover

De cocos2d nada, los machotes usan IndieLib. :)

PD: Muy bueno el cocos2d este por lo que veo.
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Loover

Gracias a Ethernet ahora el tuto es aún más multiplataforma, ya no hace falta cambiar líneas de código para que funcione en Linux. Los ifdefs son mano de santo, oye.

Si hay algún guru de Mac por aquí y quiere intentar compilarlo y crear un archivo de proyecto, se lo agradecería eternamente :D
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

HarvesterOfAcorns

Una locura zunou, sin duda lo es acertar con lo que la gente quiere. Oo

Gracias Ak47, en parte seguiré tu consejo, aunque tengo que decir que javascript no es la panacea a la falta de experiencia, es bastante puñetero el jodio y a la larga creo que más problemático que C++ con el que ya tenía alguna relación.

Loover, por lo que intuyo de los mensajes en el foro creo que estás implicado en el desarrollo de IndieLib, no tenéis documentación en español? Porque no la utilizaste para el tutorial, hubiera sido interesante, no?

Loover

CitarLoover, por lo que intuyo de los mensajes en el foro creo que estás implicado en el desarrollo de IndieLib,

Sí, somos 156 monos amaestrados en un programa de realidad virtual y yo. Todo a mi alrededor son pieles de banana.

Citarno tenéis documentación en español?

Los monos fueron entrenados en una base militar americana. Sólo hablan Inglés, y yo soy muy vago para traducir lo que escriben al español.

CitarPorque no la utilizaste para el tutorial, hubiera sido interesante, no?

Tutorial de lógica para principiantes = tutorial que debe ser sencillo, sin implicar engines, etc, usé SDL por usar algo conocido y multiplataforma, pero tan sólo dibujo rectángulos.

Planeo hacer un tutorial más adelante, añadiéndole gráficos y efectos al tetris. Para ese sí que usaré IndieLib.

Aparte estoy preparando un nuevo tutorial sobre como hacer un editor de pantallas tipo el del juego Aquaria o Braid, usando IndieLib también.
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

AK47

Cita de: HarvesterOfAcorns en 23 de Diciembre de 2008, 11:36:27 PM
Una locura zunou, sin duda lo es acertar con lo que la gente quiere. Oo

Gracias Ak47, en parte seguiré tu consejo, aunque tengo que decir que javascript no es la panacea a la falta de experiencia, es bastante puñetero el jodio y a la larga creo que más problemático que C++ con el que ya tenía alguna relación.

Loover, por lo que intuyo de los mensajes en el foro creo que estás implicado en el desarrollo de IndieLib, no tenéis documentación en español? Porque no la utilizaste para el tutorial, hubiera sido interesante, no?


HarvesterOfAcorns, tienes esta libreria para js: http://www.tommysmind.com/gamejs/ Aun asi tirar de python con cocos2D tambien es un buen camino, o sino C# y XNA. Basicamente lo que te quiero decir es que ahora mismo yo aprenderia las bases de la programacion de juegos con un entorno que sea facil, y luego si ves alguna necesidad aprendes C++ pero con el bagaje de conceptos basicos bien asentado :)

Loover

Y si quieres resultados rápidos, también puedes probar con Game Maker.

IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

HarvesterOfAcorns

Cita de: Loover en 23 de Diciembre de 2008, 11:46:16 PM

Sí, somos 156 monos amaestrados en un programa de realidad virtual y yo. Todo a mi alrededor son pieles de banana.

Ooooh!  ^_^ que monería!

Cita de: Loover en 23 de Diciembre de 2008, 11:46:16 PM
Los monos fueron entrenados en una base militar americana. Sólo hablan Inglés, y yo soy muy vago para traducir lo que escriben al español.

Por fin los militares americanos hacen algo útil

Cita de: Loover en 23 de Diciembre de 2008, 11:46:16 PM
Planeo hacer un tutorial más adelante, añadiéndole gráficos y efectos al tetris. Para ese sí que usaré IndieLib.

Aparte estoy preparando un nuevo tutorial sobre como hacer un editor de pantallas tipo el del juego Aquaria o Braid, usando IndieLib también.

Es un lujo tenerte por aquí

Muy buena la librería,  AK47, muy agradecido.

Pitxardo

Gran tutorial  :)

Me ha gustado mucho, pero hay algo que no entiendo (aunque no he revisado el codigo aun, soy un huevon  :P), y no tiene que ver con el juego en si, si no con unos de los comentarios de gamedev, mas concretamente con este.

Pregunta de novato: cual es el problema con eso que comenta?


Y un poco quisquillos si, porque hay cosas como lo que te comentan del return 1; else return 0; que en mi opinion, aunque la segunda forma es mas corta y rapida, es menos legible para un novato. Seran pasos innecesarios los dos return's, pero un novato lo entendera muchisimo mejor ;)


PD: Lo publicare en mi blog, aunque este tenga 0 visitas y este medio muerto   :-[

davur

Cita de: Pitxardo en 30 de Diciembre de 2008, 01:43:45 PMMe ha gustado mucho, pero hay algo que no entiendo (aunque no he revisado el codigo aun, soy un huevon  :P), y no tiene que ver con el juego en si, si no con unos de los comentarios de gamedev, mas concretamente con este.

Pregunta de novato: cual es el problema con eso que comenta?

El mismo usuario lo dice: no reserves memoria dinámicamente si no existe la necesidad de hacerlo. Reservar memoria dinámicamente introduce tres problemas: el coste de la reserva, la fragmentación de la memoria y la posibilidad de acceder a zonas de memoria inválidas u olvidarse de liberar la memoria cuando corresponde.

Inconvenientes que pueden resolverse todos ellos mezclando los dos enfoques de reserva de memoria (estática y dinámica): punteros inteligentes, "pools" de memoria, etc...

ethernet

En realidad el guiri no tenía nada más que hacer que tocar las narices :). Tendrá razón, pero es un detalle bastante poco importante y mucho menos cuando el tutorial no pretendía tratar ese tema.

En general, casi todos los post de ese hilo se podrían tirar a la basura.

Loover

#43
CitarLo publicare en mi blog, aunque este tenga 0 visitas y este medio muerto

Se agradece un montón!

...

De todos modos el guiri tenía razón :) Al final cambié esa parte. No recuerdo porqué usé news la primera vez, pero bueno, ya no hay un solo new en todo el tutorial. Realmente no hacían falta.

Pero sí, son bastante tocapelotas estos guiris. Bueno, en general la gente es tocapelotas en un foro donde no te conocen. Aquí son más buenos :)

Miedo me da lo que van a decir del nuevo, porque estoy liando un tinglado gordo con el editor. Y fijo que bastantes cosas no las habré hecho de la manera más adecuada.
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

davur

No creo que sea cuestión de "tocar las pelotas". He leído todo el hilo, y la enorme mayoría de respuestas (por no decir todas) son constructivas y tienen más razón que un santo. Creo que, tanto como tomarse el esfuerzo de redactar un tutorial es un acto muy generoso y de agradecer, el exponerlo en un foro como GameDev y obtener ese tipo de respuestas (que no hacen sino mejorar aún más el tutorial original) también es de agradecer.

Y lo digo porque hay personas que son especialmente puntillosas con los tutoriales destinados a principiantes (entre las que me encuentro). Entre enseñar buenas prácticas desde un primer momento y forzar al estudiante a pasar por un proceso traumático hasta descubrir que lo que le enseñaron era de todo menos adecuado media una distancia considerable.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.