2010-10-21 30 views
22

Mi objetivo básico aquí es escribir un remake .NET de Kingdom of Kroz. Para aquellos que no están familiarizados con el juego:¿Hay alguna biblioteca de "gráficos" de consola para .Net?

http://www.indiefaqs.com/index.php/Kingdom_of_Kroz

http://www.youtube.com/watch?v=cHwlNAFXpIw

Originalmente se suponía que iba a ser un proyecto de distracción rápida para darme un descanso de todo el WCF empresa genérica/WF/LINQ2SQL/etc trabajo proyectos que ocupan la mayor parte de mi tiempo últimamente. Si bien el resultado de mi esfuerzo es jugable, se ve como un absoluto culo (incluso para un juego basado en consola) debido a la forma en que estoy redibujando todo en cada fotograma.

Conozco algunos enfoques alternativos, pero en las pruebas breves que he hecho todavía no ofrecen un rendimiento significativo o beneficios estéticos. No quiero recurrir a una biblioteca que 'emule' una consola si puedo evitarlo. Preferiría trabajar con la API adecuada de la consola Win32, pero no trabajar con ella directamente si puedo evitarlo. Teniendo en cuenta que es un caso de uso nicho distintivo, ¿cuál sería el mejor enfoque "generalmente" aceptado para esto? ¿Hay alguna técnica de "dibujo" de consola particularmente óptima que uno deba conocer? No me importa nadar en un mar de PInvoke y reunirme siempre que termine con una interfaz de usuario de consola rápida, receptiva y eficiente.

+4

Intente evitar los comentarios o las "respuestas" en la línea de "simplemente use los gráficos adecuados para imitar la visualización de DOS" o "por qué molestarse en absoluto". El principal punto de aprendizaje de este proyecto fue la familiaridad con la consola. – nathanchere

+1

Me gusta esta pregunta, mi instinto me dice que tendrá que codificar usted mismo usando Console.SetCursorPosition y así sucesivamente :( –

Respuesta

6

http://msdn.microsoft.com/en-us/library/ms682073(v=VS.85).aspx

Algunos/muchas de estas funciones puede que tenga que utilizar P/Invoke para, pero que deben hacer lo que necesita. Puede escribir en ubicaciones arbitrarias en el búfer y obtener entradas sin búfer basadas en claves. Por lo general, comienza con GetStdHandle() para obtener identificadores para la entrada y salida de la consola "transmisiones" y luego llama a una de las funciones apropiadas de la lista anterior para hacer algo, como WriteConsoleOutputCharacter() o PeekConsoleInput().

Una vez escribí una biblioteca para crear un sistema de ventanas en proceso usando la consola de Windows y el sencillo Win32 en C. Proyecto divertido, pero no sé dónde está ahora.

+0

No es exactamente lo que buscaba, pero lo suficiente como para comenzar a escribir mi propio envoltorio sin mucho trabajo, ¡así que gracias! – nathanchere

+0

Desafortunadamente, eso es lo que tiene que usar para hacer "gráficos" de consola en Windows. – siride

12

Usted podría intentar Maldiciones-Sharp http://sourceforge.net/projects/curses-sharp/ o libtcod https://bitbucket.org/libtcod/libtcod

maldiciones-aguda es una "A las funciones, orientado a objetos, multi-plataforma de C# envoltorio completo para la biblioteca de control terminal maldiciones."

y libtcod es "... una API gratuita, rápida, portátil y sin complicaciones para desarrolladores de roguelike que proporciona una consola de color verdadero avanzada, entrada y muchas otras utilidades frecuentemente utilizadas en roguelikes".

+1

Por lo que puedo decir, el primero no funciona con la consola estándar y el último no es incluso .Net en absoluto. – nathanchere

+1

¿Realmente lo has comprobado? http: //doryen.eptalys.net/2010/08/libtcod-1-5-1b1-released/Puede obtener la versión de Windows/Linux32/OSX C# en la sección de descarga – Vili

+0

Lo hice, pero hasta donde podía decir, era solo una biblioteca C++ que usaba SDL/OpenGL para simular una consola, y la parte C# es solo una envoltura alrededor de eso. Idealmente quiero usar (y/o ampliar) la consola .Net estándar. – nathanchere

-6

Brah, consulte la biblioteca pdcurses o ncurses. Lo estoy usando en Visual C++ y mientras especifica C#, puede ser útil para usted. Está hecho para juegos de consola y lo estoy usando en varios proyectos. Eliminará la necesidad de utilizar una devolución de llamada refrescando la pantalla, ya que podrá mover el carácter (representado como un carácter ASCII) sin actualizar la pantalla.

+15

"Brah"? De Verdad? – Thomas

Cuestiones relacionadas