Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ruben3344 en 22 Junio 2018, 01:47 am



Título: Necesito Ayuda sobre Interfaces Graficas en C++ y Desarrollo de Videojuegos
Publicado por: ruben3344 en 22 Junio 2018, 01:47 am
Tengo un nivel intermedio en C++(he empezado hace unos 5-6 meses) y me ha surgido la duda sobre como hacer interfaces graficas. Me he puesto a buscar y cada persona dice una cosa distinta, me he liado y he llegado a la conclusion de que no se ni que quiero hacer aprendiendo este lenguaje, ¿podriais decirme para que puedo usar C++ a parte de por ejemplo juegos? Porque basicamente todo lo que estoy porgramando se basa en programas de consola y claro, me parece algo aburrido ya que quiero aprender a programar cosas que no tengan que ver con las aplicaciones de consola. Volviendo al tema, lo que mas me ha convencido es Qt pero no tengo ni idea si al programar ahi se cambia un poco el lenguaje, no encuentro libros que expliquen desde 0 el Qt, he visto que uno dice que en Visual Studio al hacer interfaces el lenguaje cambia (C++/Cli creo que es).

Gracias de antemano.


Mod: Otra pregunta es: ¿Deberia aprender de guias que tienen ya un tiempo (Ejemplo: 5-6 años) . Es que tengo un libro de C++6 y claro, en el "Hola mundo" en vez de un int main() pone un void main()(en code::blocks pongo eso y vamos, dice que me olvide) o no se usa el using namespace std; y todo lo que he aprendido tendra como 2-3 años como mucho.


Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++
Publicado por: srWhiteSkull en 22 Junio 2018, 02:49 am
Después de leer tú consulta pienso que no tienes un nivel de C++ medio, sino un nivel bajo de C++, incluso principiante.

¿podriais decirme para que puedo usar C++ a parte de por ejemplo juegos? Porque basicamente todo lo que estoy porgramando se basa en programas de consola y claro, me parece algo aburrido ya que quiero aprender a programar cosas que no tengan que ver con las aplicaciones de consola.

Puedes hacer todo, aparte de juegos. El límite lo pone tú imaginación, tú conocimiento del lenguaje, librerías y el ámbito del programa (si haces un programa de contabilidad necesitas saber contabilidad). Se puede hacer de todo, desde sistemas operativos, lenguajes de programación, navegadores, servidores HTTP, base de datos, herramientas de red, cualquier tipo de aplicación o programa, no hay nada que no puedas hacer en C++.

Logicamente, como no vas a programarte tu propia API ya existen montón de librerías que te facilitarán el desarrollo.

Volviendo al tema, lo que mas me ha convencido es Qt pero no tengo ni idea si al programar ahi se cambia un poco el lenguaje, no encuentro libros que expliquen desde 0 el Qt, he visto que uno dice que en Visual Studio al hacer interfaces el lenguaje cambia (C++/Cli creo que es).

Si programas en Windows deberías usar su propio API el cual está super bien documentado.

https://msdn.microsoft.com/es-es/library/bb384843.aspx

También puedes recurrir si estás en Windows a DirectX, que es una librería gráfica para trabajar a medio/bajo nivel con alto rendimiento y con aceleración por hardware (en caso de estar disponible).

https://docs.microsoft.com/en-us/previous-versions/windows/apps/hh465137(v=win.10)

Luego también tienes alternativas a DirectX, como OpenGL, que se maneja de una forma similar.

QT está pensado para la creación y gestión de interfaces en un ámbito multiplataforma. Esto significa que simplemente con el mismo código podrías portarlo a otros sistemas operativos y usando las librerías para la plataforma que quieras portar. Algunas veces esto suele pintarse muy bonito pero lo cierto es que puede dar muchos dolores de cabeza.

C++/CLI es C++ enfocado al entorno dotnet. Normalmente el Visual Studio permite elegir entre una aplicación pura de C++ (Win32) y CLR.

https://msdn.microsoft.com/es-es/library/z6ad605x.aspx

Aparte Microsoft no respeta el estándar de C++, y existen ligeros cambios que pueden tender a la confusión.

https://es.wikipedia.org/wiki/Visual_C%2B%2B

Mod: Otra pregunta es: ¿Deberia aprender de guias que tienen ya un tiempo (Ejemplo: 5-6 años) . Es que tengo un libro de C++6 y claro, en el "Hola mundo" en vez de un int main() pone un void main()(en code::blocks pongo eso y vamos, dice que me olvide) o no se usa el using namespace std; y todo lo que he aprendido tendra como 2-3 años como mucho.

El C++ está constantemente evolucionando y cada vez más rápido, es bueno que estés actualizado y sepas los cambios existentes en las versiones pero dependerá del compilador que uses.

La versión estable más reciente es la C++17.

https://es.wikipedia.org/wiki/C%2B%2B17

Pero normalmente se programa para la C++11.

https://es.wikipedia.org/wiki/C%2B%2B11


Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++
Publicado por: ruben3344 en 22 Junio 2018, 03:34 am
Muchas gracias por responder, me has aclarado las cosas. En el tema de la API de Windows he encontrado un enlace donde explican a hacer lo mismo pero este es algo mas reciente y mas completo, ¿me recomiendas leerme el enlace que te voy a dejar abajo o el que me has pasado tu? Te agradeceria a que si tienes tiempo me pudieses pasar alguna guia, libro sobre como programar en la API (en la pagina de microsoft explican bastante pero no creo que sea toda la informacion a aprender). Tambien me vendria bien que me pudieses recomendar algun libro para aprender un buen nivel de C++.

Enlace Aplicacion de Escritorio mas reciente: https://docs.microsoft.com/es-es/cpp/windows/walkthrough-creating-windows-desktop-applications-cpp (https://docs.microsoft.com/es-es/cpp/windows/walkthrough-creating-windows-desktop-applications-cpp)


Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++
Publicado por: ruben3344 en 22 Junio 2018, 13:37 pm
Viendo mas he visto que en el desarrollo de videojuegos no se utiliza WinApi y viendo lo que me has dicho voy a aprender WinApi para el tema de desarrollar aplicaciones de escritorio en Windows y DirectX para videojuegos. Lo que no sé es si DirectX es todo lo que voy a tener que saber para programar juegos, ¿alguna recomendacion para programar juegos aparte de DirectX? ¿Hay mucha diferencia de programar para juegos en PC y juegos para consolas?
Por cierto, he visto un libro que parece muy bueno "C++ Deitel" ademas enseña en C++11 podrian decirme si es realmente bueno(os dejo el pdf aunque mi idea seria comprarmelo en fisico).
https://docs.google.com/file/d/0B_eXfddvHj9wekJmamR1QjNrMzQ/preview (https://docs.google.com/file/d/0B_eXfddvHj9wekJmamR1QjNrMzQ/preview)


Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++ y Desarrollo de Videojuegos
Publicado por: SrMcLister en 22 Junio 2018, 14:54 pm
Muy interesante tu pregunta, estoy a la espera de más info!!
Yo también tengo un nivel intermedio de C++ y me gustaría aumentarlo en dirección a interfaces graficas, videojuegos etc...
 ;-) ;-) ;-)


Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++
Publicado por: srWhiteSkull en 22 Junio 2018, 21:01 pm
Viendo mas he visto que en el desarrollo de videojuegos no se utiliza WinApi y viendo lo que me has dicho voy a aprender WinApi para el tema de desarrollar aplicaciones de escritorio en Windows y DirectX para videojuegos. Lo que no sé es si DirectX es todo lo que voy a tener que saber para programar juegos, ¿alguna recomendacion para programar juegos aparte de DirectX? ¿Hay mucha diferencia de programar para juegos en PC y juegos para consolas?
Por cierto, he visto un libro que parece muy bueno "C++ Deitel" ademas enseña en C++11 podrian decirme si es realmente bueno(os dejo el pdf aunque mi idea seria comprarmelo en fisico).
https://docs.google.com/file/d/0B_eXfddvHj9wekJmamR1QjNrMzQ/preview (https://docs.google.com/file/d/0B_eXfddvHj9wekJmamR1QjNrMzQ/preview)

DirectX puedes usarlo en combinación del WinApi, sobre todo para aplicaciones multimedia.

Diferencias programando en consola y PC? Si, que si programas a bajo nivel necesitas conocer la arquitectura de la consola para acceder a determinadas funciones de esta. Yo así la experiencia que he tenido programando juegos fue con diferentes tecnologías y dispositivos, por ejemplo para un SO Symbia trabajé con J2ME, para Xbox 360 con dotnet (usando C# + DirectX), para Nintendo DS con C (OpenGL), en Android con Java (OpenGL)... incluso usando ensamblador para un procesador MIPS (que solían usarse en las consolas).

Lo otro ya te lo dije, la alternativa a DirectX es OpenGL, porque OpenGL está soportado en la gran mayoría de dispositivos que no son productos de Microsoft. Luego existen otro tipo de librerías encaminadas exclusivamente al desarrollo de videojuegos, ya que DirectX y OpenGL no están enfocadas solo a los videojuegos y son muy básicas. Por ejemplo está Ogre3D, que trabaja en una capa superior (menos complciado).

https://www.ogre3d.org/

Conocimientos para juegos, pues dependerá de que juegos pero en la mayoría de casos será necesario tener un conocimiento bueno de la trigonometría, geometría(líneas de bezier, etc...), también sobre los shaders, algo de sonido, iluminación, imagen, algoritmia avanzada, etc... un programador de videojuegos debe ser alguien multidisciplinar, que tenga conocimientos en varios ámbitos aparte de la programación.

Te pondría una lista de enlaces pero me tomaría tiempo, lo mejor es que te centres en un trabajo en concreto, por ejemplo intenta desarrollar un pequeño juego un experimento, poco pretencioso que puedas acabar en dos meses y según te vayan saliendo dudas de como se hace esto o aquello acudes al foro (a este u otro) y se te vaya facilitando la información. Yo muchas cosas las aprendía así, haciendo experimentos, y es más todos los juegos que desarrollé nunca los acabé aunque eran funcionales, pero era simplemente para aprender y adquirir conocimiento, por eso no te hablo por hablar, te hablo por experiencia aunque nunca haya sido un programador de videojuegos profesional.

También trabajé con motores, que son "programas" diseñados para generar un ejecutable por medio de scripts y componentes personalizables.


Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++ y Desarrollo de Videojuegos
Publicado por: ruben3344 en 22 Junio 2018, 21:19 pm
Muchas gracias por lo aclarado. Por ultimo, alguna recomendacion de algun libro para el tema de desarrollo de interfaces o de videojuegos.

Lo dicho, muchas gracias


Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++ y Desarrollo de Videojuegos
Publicado por: Beginner Web en 22 Junio 2018, 21:44 pm
Resumiendo su pregunta lo que el intento decir es que se aburrio de la programacion back end y quiere hacer el front end en/con videojuegos

C++ , Como programar, Deitel & Deitel , 6ta Edicion  ;-)


Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++ y Desarrollo de Videojuegos
Publicado por: ruben3344 en 22 Junio 2018, 22:15 pm
Resumiendo su pregunta lo que el intento decir es que se aburrio de la programacion back end y quiere hacer el front end en/con videojuegos

C++ , Como programar, Deitel & Deitel , 6ta Edicion  ;-)

Tengo entendido que el programador front-end es el que "se relacion con el usuario"(tipo javascript) y el back-end el que hace que lo anterior funcione, ¿es eso asi?.


Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++ y Desarrollo de Videojuegos
Publicado por: DoeJohn en 23 Junio 2018, 15:35 pm
Hola

Yo creo que, para alguien que no lleva mucho tiempo, ponerse directamente con OpenGL o similar va a ser un poco duro y te va a costar más avanzar que si usas alguna librería.

Por ejemplo, para interfaces gráficas tienes librerías como wxWidgets (https://wxwidgets.org/), GTK (https://www.gtk.org/) o Qt (https://doc.qt.io/). Personalmente uso Qt, es mucho más que una interfaz gráfica, es un frameworks completo para desarrollar todo tipo de aplicaciones móviles o de escritorio.

Para los juegos igual, hay estupendas librerías como SDL (https://www.libsdl.org/) o SFML (https://www.sfml-dev.org/) que te van a permitir avanzar mucho más rápido. Y también los motores, que ahora están "de moda", como Unreal Engine (https://www.unrealengine.com/en-US/what-is-unreal-engine-4), Unity (https://unity3d.com/es), cocos (http://www.cocos2d-x.org/) o Godot (https://godotengine.org/).

Un saludo


Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++ y Desarrollo de Videojuegos
Publicado por: srWhiteSkull en 23 Junio 2018, 18:46 pm
Tengo entendido que el programador front-end es el que "se relacion con el usuario"(tipo javascript) y el back-end el que hace que lo anterior funcione, ¿es eso asi?.

No le hagas caso, yo creo que se refiere a que ahora te interesa el frontend, la parte de la interfaz con la que interacciona el usuario con la aplicación y que te aburriste de la lógica del programa que supuestamente él interpreta que es el backend. Son términos t´picos en el desarrollo Web que si se aplican en tú caso no tienen nada que ver. Me imagino que sólo bromea sin tener mucha idea.

Hola

Yo creo que, para alguien que no lleva mucho tiempo, ponerse directamente con OpenGL o similar va a ser un poco duro y te va a costar más avanzar que si usas alguna librería.

Por ejemplo, para interfaces gráficas tienes librerías como wxWidgets (https://wxwidgets.org/), GTK (https://www.gtk.org/) o Qt (https://doc.qt.io/). Personalmente uso Qt, es mucho más que una interfaz gráfica, es un frameworks completo para desarrollar todo tipo de aplicaciones móviles o de escritorio.

Para los juegos igual, hay estupendas librerías como SDL (https://www.libsdl.org/) o SFML (https://www.sfml-dev.org/) que te van a permitir avanzar mucho más rápido. Y también los motores, que ahora están "de moda", como Unreal Engine (https://www.unrealengine.com/en-US/what-is-unreal-engine-4), Unity (https://unity3d.com/es), cocos (http://www.cocos2d-x.org/) o Godot (https://godotengine.org/).

Un saludo

No necesariamente, todo eso que has puesto está muy bien, pero son cosas diferentes. Si estás interesado en el desarrollo de videojuegos OpenGl y DirectX le iran muy bien aprenderlos y no tiene por que ser dificil... eso son leyendas urbanas tipo como esa de que ensamblador es un lenguaje dificil. Requiere un conocimiento, de un aprendizaje, que no necesita años y es lo mismo como si usara todas esas librerías que has mencionado, necesitas leer documentación y examinar ejemplos, pero nada que no se resuelva en poco tiempo, quizás un par de meses. Por eso digo que la mejor forma de aprender en programación siempre es la práctica ¿Qué quieres aprender a usar DirectX? pues hazte un pequeño juego/experimento primero en 2D usando un par de imágenes como un juego de ping-pong o un flappybird o cualquier cosa sencilla que puedas desarrollar en dos semanas, y ahí en el mismo desarrollo te pones aprender. Primero te encontrarás con el problema de como iniciar DirectX, la configuración de pantalla, etc... luego el funcionamiento de un juego que simplemente consiste en crear un bucle y dentro de ese bucle realizar determinados procesos o configurar los eventos para que cuando pulses una tecla u ocurra una colisión o alguna acción se redirija el flujo del programa a esa función o lo que sea, etc... Cuando encuentres una duda, consultar documentación, examinar los ejemplos, y en caso de encontrarte perdido pregunta, foro, amigo programador, maestro, etc... es simple. Si has podido aprender C++, has trabajado con punteros y los entiendes, has hecho programas en consola, que nadie te diga que hay cosas más difíciles, para un programador no hay nada difícil, simplemente hay que invertir tiempo y trabajar duro.

Un buen sitio para aprender... yo lo he usado, es un maravilloso portal de ejemplos de OpenGL y un buen lugar para aprender (si te defiendes con el inglés).
http://nehe.gamedev.net/


Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++ y Desarrollo de Videojuegos
Publicado por: ruben3344 en 2 Agosto 2018, 01:58 am
No le hagas caso, yo creo que se refiere a que ahora te interesa el frontend, la parte de la interfaz con la que interacciona el usuario con la aplicación y que te aburriste de la lógica del programa que supuestamente él interpreta que es el backend. Son términos t´picos en el desarrollo Web que si se aplican en tú caso no tienen nada que ver. Me imagino que sólo bromea sin tener mucha idea.

No necesariamente, todo eso que has puesto está muy bien, pero son cosas diferentes. Si estás interesado en el desarrollo de videojuegos OpenGl y DirectX le iran muy bien aprenderlos y no tiene por que ser dificil... eso son leyendas urbanas tipo como esa de que ensamblador es un lenguaje dificil. Requiere un conocimiento, de un aprendizaje, que no necesita años y es lo mismo como si usara todas esas librerías que has mencionado, necesitas leer documentación y examinar ejemplos, pero nada que no se resuelva en poco tiempo, quizás un par de meses. Por eso digo que la mejor forma de aprender en programación siempre es la práctica ¿Qué quieres aprender a usar DirectX? pues hazte un pequeño juego/experimento primero en 2D usando un par de imágenes como un juego de ping-pong o un flappybird o cualquier cosa sencilla que puedas desarrollar en dos semanas, y ahí en el mismo desarrollo te pones aprender. Primero te encontrarás con el problema de como iniciar DirectX, la configuración de pantalla, etc... luego el funcionamiento de un juego que simplemente consiste en crear un bucle y dentro de ese bucle realizar determinados procesos o configurar los eventos para que cuando pulses una tecla u ocurra una colisión o alguna acción se redirija el flujo del programa a esa función o lo que sea, etc... Cuando encuentres una duda, consultar documentación, examinar los ejemplos, y en caso de encontrarte perdido pregunta, foro, amigo programador, maestro, etc... es simple. Si has podido aprender C++, has trabajado con punteros y los entiendes, has hecho programas en consola, que nadie te diga que hay cosas más difíciles, para un programador no hay nada difícil, simplemente hay que invertir tiempo y trabajar duro.

Un buen sitio para aprender... yo lo he usado, es un maravilloso portal de ejemplos de OpenGL y un buen lugar para aprender (si te defiendes con el inglés).
http://nehe.gamedev.net/



Gracias. Como ves he tardado un buen tiempo en responder porque he estado tan ocupado informandome que se me olvido jaja. Ahora me ha surgido una duda (por mas que miro no encuentro info). Cuando empiezas a buscar trabajo como programador de C++, Que es lo que mas piden las empresas? Estoy perdido en ese tema.


Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++ y Desarrollo de Videojuegos
Publicado por: srWhiteSkull en 2 Agosto 2018, 17:57 pm
...Cuando empiezas a buscar trabajo como programador de C++, Que es lo que mas piden las empresas? Estoy perdido en ese tema.

Buscan una persona con titulación universitaria y bastante experiencia, demostrable, con trabajos desarrollados en C++. Lo ideal es que si tienes ya la carrera es que hagas proyectos por tu propia cuenta que aborden TODO, redes, gráficas, .NET, linux, acceso al hardware o dispositivos a bajo nivel, gran control de la programación orientada a objetos, sonido, etc... Mínimo para un programador junior te pedirán un año, lo que podrían ser tres o cuatro trabajos bien currados con miles de líneas de código.

Olvídate de currar en una empresa con un nivel bajo y sólo con unos meses de práctica.

Por otro lado yo no soy el más adecuado para aconsejarte porque nunca estuve en una empresa como programador de C++, pero esa es la conclusión que he sacado después de ver las ofertas en bolsas de trabajo.

Me acuerdo una vez que solicité trabajo para currar en Ubisoft, hace años, me dijeron que era necesario haber desarrollado un juego (publicado) para poder entrar, por lo menos para que puedan tomar tú solicitud de trabajo en cuenta (por supuesto me quedé fuera) :xD



Título: Re: Necesito Ayuda sobre Interfaces Graficas en C++ y Desarrollo de Videojuegos
Publicado por: ruben3344 en 2 Agosto 2018, 20:06 pm
Buscan una persona con titulación universitaria y bastante experiencia, demostrable, con trabajos desarrollados en C++. Lo ideal es que si tienes ya la carrera es que hagas proyectos por tu propia cuenta que aborden TODO, redes, gráficas, .NET, linux, acceso al hardware o dispositivos a bajo nivel, gran control de la programación orientada a objetos, sonido, etc... Mínimo para un programador junior te pedirán un año, lo que podrían ser tres o cuatro trabajos bien currados con miles de líneas de código.

Olvídate de currar en una empresa con un nivel bajo y sólo con unos meses de práctica.

Por otro lado yo no soy el más adecuado para aconsejarte porque nunca estuve en una empresa como programador de C++, pero esa es la conclusión que he sacado después de ver las ofertas en bolsas de trabajo.

Me acuerdo una vez que solicité trabajo para currar en Ubisoft, hace años, me dijeron que era necesario haber desarrollado un juego (publicado) para poder entrar, por lo menos para que puedan tomar tú solicitud de trabajo en cuenta (por supuesto me quedé fuera) :xD



Gracias  ;-)