【问题标题】:how to display a variable in console c#如何在控制台c#中显示变量
【发布时间】:2015-08-11 09:38:04
【问题描述】:

我正在尝试创建一个简单的主机游戏,让您通过喂自己来照顾自己。

using System;

namespace Project1
{
static class Program
{
    static void Main(string[] args)
    {
        int hunger = 100;

        Console.WriteLine("Enter your name: ");

        string name = Console.ReadLine();

        Console.WriteLine("Good choice, " + name);

        Console.WriteLine("Press SPACE to continue");

        while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Spacebar))
        {
            // do something
            int h = hunger - 2;
        }
        Console.WriteLine("You are hungry," + name);
        Console.WriteLine("Press F to feed");

        while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.F))
        {
            // do something
            int food = hunger;
        }
    }

}
}    

修改后如何显示当前饥饿值呢?我想显示食物水平,以便玩家知道要喂它并且不会意外地喂它。有没有办法回到前面的行,所以我不需要永远复制和粘贴东西?谢谢。

【问题讨论】:

  • 你需要了解控制流和创建函数/方法。

标签: c#


【解决方案1】:

看起来这将是非常广泛的正确回答,所以我将把它留得很抽象。您需要将可重用的逻辑放入方法中。你需要一个“游戏循环”或“输入循环”。您需要了解变量并将它们传递给方法。

您可能还想引入一个Player 类,而不是各种变量来保存单独的值。

您的游戏循环可能如下所示:

ConsoleKey input = null;
do
{
    var player = DoGameLogic(input, player);
    PrintGameInfo(player);
    input = ReadInput(player);
}
while (input != ConsoleKey.Q)

当您按顺序完成所有这些并且想让输出看起来不错时,请查看Writing string at the same position using Console.Write in C# 2.0Advanced Console IO in .NET

【讨论】:

    【解决方案2】:

    您可以使用Console.CursorLeftConsole.CursorTop 修改光标的位置并覆盖以前的值。

    Cursor.Left = 0;
    Console.Write("Hunger: {0:0.00}", hunger);
    

    编辑:正如“CodeMaster”所述,您可以这样做:

    Console.Write("Test {0:0.0}".PadRight(20), hunger);
    

    如果长度不同,请确保您已覆盖以前的数据。

    【讨论】:

    • 这实际上只回答了问题的一小部分。执行此操作时,您需要确保在覆盖屏幕的某些部分时,不会将之前打印的文本留在那里。
    【解决方案3】:

    这是你想要达到的目标吗:-

    static void Main(string[] args)
        {
            const int MAX_FEED_LEVEL = 3; //configure it as per your need
            const int HIGHEST_HUNGER_LEVEL = 0; //0 indicates the Extreme hunger
    
            int hunger = MAX_FEED_LEVEL, foodLevel = HIGHEST_HUNGER_LEVEL;
            string name = string.Empty;
            char finalChoice = 'N', feedChoice = 'N';
    
            Console.Write("Enter your name: ");
            name = Console.ReadLine();
            Console.Write("Good choice, {0}!", name);
            Console.WriteLine();
            do
            {
                Console.WriteLine();
                Console.WriteLine("current hunger level : {0}", hunger);
                if (hunger > 0)
                    Console.WriteLine("You are hungry, {0}", name);
    
                Console.Write("Press F to feed : ");
                feedChoice = (char)Console.ReadKey(true).Key;
                if (feedChoice == 'F' || feedChoice == 'f')
                {
    
                    if (foodLevel <= MAX_FEED_LEVEL && hunger > HIGHEST_HUNGER_LEVEL)
                    {
                        hunger = hunger - 1; //decrementing hunger by 1 units
                        foodLevel += 1; //incrementing food level
                        Console.WriteLine();
                        Console.WriteLine("Feeded!");
                        Console.WriteLine("Current Food Level : {0}", foodLevel);
                    }
                    else
                    {
                        Console.WriteLine();
                        Console.WriteLine("Well Done! {0} you're no more hungry!", name);
                        goto END_OF_PLAY;
                    }
                }
                else
                {
                    Console.Clear();
                    Console.WriteLine();
                    Console.Write("You chose not to feed !");
                }
    
                Console.WriteLine();
                Console.Write("want to continue the game ? (Y(YES) N(NO))");
    
                finalChoice = (char)Console.ReadKey(true).Key;
    
            } while (finalChoice == 'Y' || finalChoice == 'y');
        END_OF_PLAY:
            Console.WriteLine();
            Console.Write("===GAME OVER===");
            Console.ReadKey();
        }
    

    【讨论】:

      最近更新 更多