如果你们中的任何人一直在关注我的慢学习过程,你就会知道发生了什么。
我创建了一个如下所示的边框矩形:
+--------+
| |
| |
| |
+--------+
Are you ready to play hangman? yes/no:
当然,它更大更矩形。
不幸的是,使用我现在的代码,过去在矩形下面的单词,现在将它们放在中间,如下所示:
+--------+
|abcdefghi... |
Are you ready . . .
| |
| |
+--------+
现在,这个框足够大,可以将所有单词都填入其中,但启动问题应该在字段之下。这一切都始于我将字母表调成数组,然后将其显示在特定坐标处。
这是我的代码:
namespace Hangman
{
class Program
{
protected static int firstColumn;
protected static int firstRow;
protected static void headerWindow(string border, int posX, int posY)
{
try
{
Console.SetCursorPosition(firstColumn + posX, firstRow + posY);
Console.Write(border);
}
catch (ArgumentOutOfRangeException error)
{
Console.Clear();
Console.Write(error.Message);
}
}
private static void printWord()
{
String[] myWordArrays = File.ReadAllLines("WordList.txt");
Random randomWord = new Random();
//int lineCount = File.ReadLines("WordList.txt").Count();
int activeWord = randomWord.Next(0, myWordArrays.Length);
string userSelection = "";
Console.WriteLine("Are you Ready to play Hangman? yes/no: ");
userSelection = Console.ReadLine();
if (userSelection == "yes")
{
foreach (char letter in myWordArrays[activeWord])
{
Console.Write("_ ");
}
Console.WriteLine("\n \nCan you guess what this " + myWordArrays[activeWord].Length + " letter word is?");
Console.ReadLine();
}
else if (userSelection == "no")
{
Console.WriteLine("I'm sorry you feel that way. Press Enter to Exit the program!");
Console.ReadLine();
}
}
//THIS IS THE CREATION OF THE RECTANGLE!!!
private static void headerFile()
{
Console.Clear();
firstColumn = Console.CursorLeft;
firstRow = Console.CursorTop;
int HEADER_HEIGHT = 6;
int columnNumber = Console.WindowWidth - 1;
var xcoord = 0;
var ycoord = 0;
for (int i = 0; i < columnNumber; i++)
{
headerWindow("-", i, 0);
headerWindow("-", i, HEADER_HEIGHT);
}
for (int i = 0; i < HEADER_HEIGHT; i++)
{
headerWindow("|", 0, i);
headerWindow("|", columnNumber, i);
}
headerWindow("+", xcoord = 0, ycoord = 0);
headerWindow("+", xcoord = columnNumber, ycoord = 0);
headerWindow("+", xcoord = 0, ycoord = 6);
headerWindow("+", xcoord = columnNumber, ycoord = 6);
}
//THIS IS THE CREATION OF THE LIST OF UNUSED CHARACTERS FOR THE GAME
private static void letterChoices()
{
string[] alphabetSelection = File.ReadAllLines("alphabet.txt");
for (int i = 0; i < alphabetSelection.Length; i++)
{
headerWindow(alphabetSelection[i] + " ", i + 1, 1);
Console.WriteLine("\n ");
}
//return;
}
//SHOULD I HAVE MORE HERE??
static void Main(string[] args)
{
headerFile();
letterChoices();
printWord();
}
}
}
我很感激没有得到答案,因为我真的需要为自己解决这个问题,但是我已经将方法调用从main移到了headerwindow(),我甚至把它写出来了分开并以不同的方式。啊!
请帮忙!
答案 0 :(得分:3)
那么矩形是用看起来绝对定位的东西创建的,但是文本是基于相对定位的(即它会在光标所在的地方打印)
您可以查看确保标题创建将光标留在您想要的位置,或者使其他两种方法也是绝对定位。
答案 1 :(得分:3)
由于您没有要求直接回答:该修补程序属于方法headerWindow
。同样的修复也可以在letterChoices
中应用,具体取决于您的偏好。
当方法headFile()
完成时,光标在框的左下方闪烁(在“正确”位置写入文本)
在letterChoices
中循环后,光标位于字母表下方,因为它要求headerWindow
写入某个位置。
应该在headerWindow
中更改某些内容,以便它不会将光标保持在刚写入的位置。您已经使用了创建此修复所需的每个属性/方法,因此它不是Console
上的某些神秘修复或隐藏方法。
答案 2 :(得分:1)
所有关于职位......
您需要创建一个使用绝对定位打印文本的方法,并将其称为PrintText("Hello", 20, 15);
答案 3 :(得分:1)
在编写"Are you Ready to play Hangman?"
之前,您需要移动光标。
您可以使用:
Console.SetCursorPosition(column, row);
答案 4 :(得分:1)
你可以在printWord()方法中写'Are You ..'之前将光标设置在(o,HeaderHeight + 1)。
Console.SetCursorPosition(0,hh + 1);
答案 5 :(得分:0)
所以我已经解决了这个问题,并希望使用已完成的代码更新此问题,以解决有同样问题的其他人:
private static void letterChoices()
{
string[] alphabetSelection = File.ReadAllLines("alphabet.txt");
for (int i = 0; i < alphabetSelection.Length; i++)
{
//headerWindow("|", 0, 3);
headerWindow(alphabetSelection[i], i*3+1, 1);
//Console.Write("\n ");
Console.SetCursorPosition(0, 7);
}
它现在正常工作,“|”之间没有任何“额外”空格在两侧,它正确地将第一个'问题'放在标题下面。 :)