为什么一个方法被塞进另一个方法? C#

时间:2015-07-23 06:37:31

标签: c# methods

如果你们中的任何人一直在关注我的慢学习过程,你就会知道发生了什么。

我创建了一个如下所示的边框矩形:

+--------+
|        |
|        |
|        |
+--------+
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(),我甚至把它写出来了分开并以不同的方式。啊!

请帮忙!

6 个答案:

答案 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);

        }

它现在正常工作,“|”之间没有任何“额外”空格在两侧,它正确地将第一个'问题'放在标题下面。 :)