我知道如何使用 SetCursorPosition 或 CursorLeft 和 CursorTop 设置到控制台中的特定点>一起。这不是问题。
但是,我怎样才能获得该点的价值?是不是像 Console.Cursor 这样的东西?所以我可以在那个位置得到角色?也许是这样的:
char c = Console.GetCharAtCursor();
没有运气?
答案 0 :(得分:4)
AFAIK,您必须将整个控制台缓冲区作为二维缓冲区读取,并使用光标的X和Y坐标作为该缓冲区的索引。参见:
[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
public static extern bool GetConsoleScreenBufferInfo(
IntPtr consoleHandle,
out CONSOLE_SCREEN_BUFFER_INFO consoleScreenBufferInfo);
您可以在此处阅读缓冲区结构:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682093(v=vs.85).aspx
<强>更新强>
如果您对使用控制台API进行游戏编写感兴趣,有人会为控制台编写空间入侵者(实际上是powershell),但所有API都是托管代码,而不是脚本。他有精灵/路径例程等 - 来源在http://ps1.soapyfrog.com/2007/08/26/grrr-source-code-including-invaders/
结束答案 1 :(得分:1)
'CursorLeft'和'CursorTop'有吸气剂,所以你可以阅读它们:var cleft = Console.CursorLeft
答案 2 :(得分:0)
我不喜欢这里为我的简单应用程序发布的冗长答案,因此我想出了一种解决方法–我将整个控制台缓冲区存储在2D数组中,然后在该数组中建立索引。为我的应用程序工作(在控制台中生成冰柱):
class SearchResultsListView(ListView): #new
model = Article
context_object_name = 'article_list'
template_name = 'search_results.html'
def get_queryset(self):
query =self.request.GET.get('q')
card_dict = Card.objects.values('card_type').get(card_name=query)
results = Article.objects.filter(
Q(cardvar__card_name__iexact=query) |
(Q(cardvar__card_type=card_dict['card_type']) &
~Q(score=0))
).order_by('cardvar', '-entry_date_time')
return results