0

私はこの2つの方法を持っています

    public void L1Timer()
    {
        Console.Clear();
        int score = tot;
        Console.Write("Chances : " + ch);
        Console.CursorLeft = 40;
        Console.Write("Marks : " + score);
        for (int time = 0; time <= 100000; time++)
        {
            Console.SetCursorPosition(65, 0);
            Console.Write("Time Elapsed : " + time + " Secs");
            Console.CursorLeft = 40;
            stime = time;
            Thread.Sleep(1000);
            Console.Beep();
            //Level1();
        }
    }

    public void Level1()
    {
        Console.WriteLine("\n\n");
        Console.CursorLeft = 40;
        Console.WriteLine("C _ _ E _ _ _ T _ _ N");
        Console.WriteLine("\n\n");
        tot = 0;
        while ((tot <= 70) && (ch > 0))
        {
            Console.Write("Guess : ");
            string gues = Console.ReadLine();
            switch (gues)
            {
                case "E": tot += 10; ch--; L1Timer(); Level1(); break;
                case "L": tot += 10; ch--; break;
                case "B": tot += 10; ch--; break;
                case "R": tot += 10; ch--; break;
                case "A": tot += 10; ch--; break;
                case "I": tot += 10; ch--; break;
                case "O": tot += 10; ch--; break;
                default: tot += 0; ch--; break;
            }
            Console.WriteLine();
        }
    }

最初のメソッドを最初に実行してから、2番目のスレッドを遅らせることなく最初のメソッドタイマーをカウントして2番目の実行を開始したい...私はこれを試しました

            Thread T1 = new Thread(new ThreadStart(L1Timer));

            Thread T2 = new Thread(new ThreadStart(Level1));

            T1.Start();

            T2.Start();

しかし、それは私が望むようには機能しませんでした..最初と2番目を実行しましたが、カーソルを最初の方法に戻したため、ユーザーは2番目の方法を入力して質問に答えることができません...助けてくださいアウト

4

1 に答える 1

0

Here's the basic idea: Console Word Game Example

Run it and watch the time elapsed in the upper right. Hit some letters and check the score/chances. Hit Escape then 'q' or 'r' and see what happens.

This is just a simple example to demonstrate the flow for a "fancy" console interface. I've put almost no real logic behind this "game" that you didn't already post in some fashion in your original question description; thus I don't consider this as "doing your homework for you." This is just "fluff" on top of a game. A real assignment will probably have you put the game logic into a Class. If you declare that class instance as static like I've done with the "Score" and "Chances" variables then the different routines besides Main() can access it and update the screen using values from your classes "game state". Developing the Class to represent the Board and the current Game State is usually the core of the assignment and where your focus should really lie.

Hope it helps...

class Program
{

    static int Score = 0;
    static int Chances = 10;
    static int promptX, promptY;
    static string board = "{No Board Loaded}";
    static System.Diagnostics.Stopwatch SW = new Stopwatch();

    static void Main(string[] args)
    {
        ConsoleKeyInfo cki;
        Console.Title = "Some Word Game";

        bool quit = false;
        bool gameWon = false;
        bool gameOver = false;

        while (!quit)
        {
            Reset();
            ShowBoard("C _ _ E _ _ _ T _ _ N");

            gameWon = false;
            gameOver = false;
            while (!gameOver)
            {
                UpdateStats();

                // make it appear as though the cursor is waiting after the prompt:
                Console.SetCursorPosition(promptX, promptY);
                if (Console.KeyAvailable)
                {
                    cki = Console.ReadKey(true); // don't display key
                    if (cki.Key == ConsoleKey.Escape)
                    {
                        gameOver = true;
                    }
                    else
                    {
                        // if it's A thru Z...
                        if (char.IsLetter(cki.KeyChar)) 
                        {
                            string key = cki.KeyChar.ToString().ToUpper();
                            Console.Write(key);
                            switch (key)
                            {
                                case "E":
                                    Score += 10;
                                    Chances--;
                                    break;

                                case "L":
                                    Score += 10;
                                    Chances--;
                                    break;

                                case "B":
                                    Score += 10;
                                    Chances--;
                                    break;

                                case "R":
                                    Score += 10;
                                    Chances--;
                                    break;

                                case "A":
                                    Score += 10;
                                    Chances--;
                                    break;

                                case "I":
                                    Score += 10;
                                    Chances--;
                                    break;

                                case "O":
                                    Score += 10;
                                    Chances--;
                                    break;

                                default:
                                    Score += 0;
                                    Chances--;
                                    break;
                            }

                            // ... possibly update the board somehow in here? ... 
                            // ... some board logic ...
                            // ShowBoard("updated board in here");

                            // set gameOver to drop out of loop
                            // also set gameWon if the user beat the board

                        }
                        else
                        {
                            Console.Write(" ");
                        }

                    }
                }

                System.Threading.Thread.Sleep(200);
            }

            if (gameWon)
            {
                // ... do something ...
            }
            else
            {
                // ... do something else ...
            }

            quit = QuitProgram();
        }
    }

    static void Reset()
    {
        // reset game variables and clock:
        Score = 0;
        Chances = 10;
        SW.Restart();

        Console.Clear();
        CenterPrompt("Guess: ");
        promptX = Console.CursorLeft;
        promptY = Console.CursorTop;
    }

    static void ShowBoard(string NewBoard)
    {
        board = NewBoard;
        Console.SetCursorPosition(Console.WindowWidth / 2 - board.Length / 2, promptY - 2);
        Console.Write(board);
    }

    static void UpdateStats()
    {
        // hide cursor while we update the stats:
        Console.CursorVisible = false;

        Console.SetCursorPosition(0, 0);
        Console.Write("Score: " + Score.ToString("000"));

        Console.SetCursorPosition(35, 0);
        Console.Write("Chances: " + Chances.ToString("00"));

        TimeSpan ts = SW.Elapsed;
        string totalTime = String.Format("Time Elapsed: {0}:{1}:{2}", ts.Hours, ts.Minutes.ToString("00"), ts.Seconds.ToString("00"));
        Console.SetCursorPosition(Console.WindowWidth - totalTime.Length, 0);
        Console.Write(totalTime);

        // ... add other output statistics in here? ...

        // turn cursor back on for the prompt:
        Console.CursorVisible = true;
    }

    static void CenterPrompt(string message)
    {
        Console.SetCursorPosition(Console.WindowWidth / 2 - message.Length / 2, Console.WindowHeight / 2);
        Console.Write(message);
    }

    static bool QuitProgram()
    {
        Console.Clear();
        CenterPrompt("Thanks for playing! Press 'q' to Quit, or 'r' to Retry.");
        while (true)
        {
            if (Console.KeyAvailable)
            {
                ConsoleKeyInfo cki = Console.ReadKey(true);
                switch (cki.KeyChar.ToString().ToUpper())
                {
                    case "Q":
                        return true;

                    case "R":
                        return false;

                }
            }
        }
    }

}
于 2013-06-06T23:15:33.430 に答える