有没有适用于 .Net 的控制台“图形”库?

26

我的基本目标是编写一个.NET版的Kroz王国。对于那些不熟悉游戏的人:

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

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

原本它只是一个快速分散注意力的项目,让我从大多数时间都在进行的通用企业WCF/WF/LINQ2SQL等工作项目中休息一下。虽然我付出的努力得到了可玩的结果,但它看起来像是绝对糟糕的(即使对于基于控制台的游戏),因为我正在每个帧中重新绘制所有内容。

我知道还有一些替代方法,但在我进行的简短测试中,它们仍然没有提供显着的性能或美观效果。如果可能的话,我不想使用一个“模拟”控制台的库。我更愿意使用适当的Win32控制台API,但如果可能的话,不直接与它进行交互。记住这是一个明显的利基用例,什么是通常接受的最佳方法?有没有特别优化的控制台“绘图”技术值得注意?我不介意在PInvoke和马歇尔任何一个中穿梭,只要最终得到一个快速、响应和高效的控制台UI就行。


4
请尽量避免评论或“答案”类似“只需使用适当的图形来模仿DOS显示”或“为什么要费心”。此项目的主要学习重点是熟悉控制台。 - nathanchere
1
我喜欢这个问题,但我的直觉告诉我你需要使用Console.SetCursorPosition等编写它自己的代码 :( - Sam Saffron
3个回答

13

1
据我所知,前者不能与标准控制台一起使用,而后者甚至根本不是 .Net。 - nathanchere
1
你真的看了吗?http://doryen.eptalys.net/2010/08/libtcod-1-5-1b1-released/您可以在下载部分获取Windows/Linux32/OSX C#版本 - Vili
1
为了速度和控制,如果没有使用1)这个库或2)API调用控制台(http://www.tomshardware.co.uk/forum/65918-25-technique-fast-win32-console-drawing),你将无法达到想要的效果,而这只会让它变得更加复杂。就功能而言,您可能需要编写自己的包装器。 - invert
1
@FerretallicA,你是在说“标准的.NET控制台”吗?Curses-Sharp可以与标准控制台输出一起使用,但一旦你开始创建像面板和窗口这样的东西,System.Console就成为了一个主要的痛点。 - Agent_9191
我尝试了这两个。libtcod具有更多的功能和特性,更多的颜色以及更好的性能;所以我选择了它。 - ashes999
显示剩余2条评论

8

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

这些函数中的一些/许多可能需要使用P/Invoke,但它们应该能够满足您的需求。您可以在缓冲区的任意位置编写并获取基于键的非缓冲输入。通常,您可以使用GetStdHandle()获取控制台输入和输出“流”的句柄,然后从上面的列表中调用适当的函数之一执行某些操作,例如WriteConsoleOutputCharacter()或PeekConsoleInput()。

我曾经使用Windows控制台和纯Win32在C上编写了一个创建进程内窗口系统的库。有趣的项目,但我不知道它现在在哪里。


这不完全是我想要的,但足以让我开始写自己的包装器,而不需要太多的努力,所以谢谢! - nathanchere
不幸的是,在Windows上进行控制台“图形”时,这就是你必须使用的。 - siride

-6
考虑查看 pdcursesncurses 库。我在 Visual C++ 中使用它,虽然您正在指定 C#,但它可能对您有用。它是为控制台游戏而设计的,我在几个项目中使用它。它将消除利用回调刷新屏幕的需要,因为您将能够移动字符(表示为 ASCII 字符)而无需刷新屏幕。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接