c# - 想用用户的输入改变 ForegroundColor
问题描述
我想做一个基于文本的游戏,一开始你可以选择你的角色应该有什么颜色。我到处搜索,但似乎找不到任何东西!这是我的代码(自从我 4 小时前开始,它可能是垃圾)每当我让主角说话时,我都会写“Player();” 我的 Console.WriteLine("XXXXXX"); 之前的一行
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace Adventure_game
{
class Program
{
static void Main(string[] args)
{
//Start
menuspeaker();
Console.WriteLine("Welcome to -- (by: Patrick Sørensen)");
Thread.Sleep(2000);
Console.WriteLine("Note: You can escape the anytime by pressing ESC, but be careful you can not save and any progress will be lost!");
Thread.Sleep(8000);
Console.WriteLine("First of all select your color!");
Thread.Sleep(2000);
Console.WriteLine("Type 1 for Blue");
Thread.Sleep(1000);
Console.WriteLine("Type 2 for White");
Thread.Sleep(1000);
Console.WriteLine("Type 3 for Green");
Thread.Sleep(1000);
Console.WriteLine("Type 4 for Red");
Thread.Sleep(1000);
Console.WriteLine("Type 5 for Yellow");
Thread.Sleep(1000);
Console.WriteLine("Type 6 for Purple");
ConsoleKeyInfo keyInfo = Console.ReadKey();
Thread.Sleep(2000);
if (keyInfo.KeyChar == '1')
{
var Player = Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("");
Console.WriteLine("You have choosen BLUE!");
}
if (keyInfo.KeyChar == '2')
{
var Player = Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("");
Console.WriteLine("You have choosen WHITE!");
}
if (keyInfo.KeyChar == '3')
{
var Player = Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("");
Console.WriteLine("You have choosen GREEN!");
}
if (keyInfo.KeyChar == '4')
{
var Player = Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("");
Console.WriteLine("You have choosen RED!");
}
if (keyInfo.KeyChar == '5')
{
var Player = Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("");
Console.WriteLine("You have choosen YELLOW!");
}
if (keyInfo.KeyChar == '6')
{
var Player = Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine("");
Console.WriteLine("You have choosen PURPLE!");
}
menuspeaker();
Console.WriteLine("Write Ready when you are ready to begin");
menuanswer();
string readyString = Console.ReadLine();
//Ready command
if (readyString.ToLower() == "ready")
{
Thread.Sleep(2000);
}
//Navn
menuspeaker();
Console.WriteLine("Before we begin the story, tell me, what is your name?");
menuanswer();
string nameString = Console.ReadLine();
Thread.Sleep(1000);
menuspeaker();
Console.WriteLine(""+nameString+"?");
Thread.Sleep(2000);
Console.WriteLine("What a wounderfull name!");
Thread.Sleep(2000);
Console.WriteLine("Okay, now we can begin with our adventure!");
Thread.Sleep(500);
Console.WriteLine("Please wait");
Thread.Sleep(5000);
Console.Clear();
//Start på spillet
Fred();
Thread.Sleep(2000);
Console.WriteLine("Fred: Hurry up "+nameString+" the king is waiting!");
Thread.Sleep(5000);
//The Player will speak here vv
Console.WriteLine(""+nameString+": Why are we in such a hurry? What has happend?");
Thread.Sleep(5000);
Fred();
Console.WriteLine("Fred: I don't know, when the alarm went off the guards requested you in the throne room");
Thread.Sleep(5000);
menuspeaker();
Console.WriteLine("Fred and "+nameString+" entered the the big throne room and on the throne sat the King nervous");
Thread.Sleep(6000);
King();
Console.WriteLine("King: I have been waiting quite a while for you " + nameString + " and Fred, how come");
Thread.Sleep(5000);
Fred();
Console.WriteLine("Fred: I had a hard time finding " + nameString + ", why did the alarm go off?");
Thread.Sleep(4000);
King();
Console.WriteLine("King: The princess have been taken by a Big monster!");
Thread.Sleep(2000);
Console.WriteLine("And i want you Fred and " + nameString + " go find the Monsters");
}
static void menuspeaker()
{
Console.ForegroundColor = ConsoleColor.DarkRed;
}
static void menuanswer()
{
Console.ForegroundColor = ConsoleColor.White;
}
static void Fred()
{
Console.ForegroundColor = ConsoleColor.Cyan;
}
static void Player()
{
}
static void King()
{
Console.ForegroundColor = ConsoleColor.Yellow;
}
static void Monster()
{
Console.ForegroundColor = ConsoleColor.DarkGreen;
}
}
}
解决方案
我认为您需要做的是在程序开始时将颜色与玩家联系起来,并在整个程序中记住它。然后,每当特定玩家说话时,您设置控制台颜色,并在说话后将其设置回来。
所以假设你有一个Player
像这样的简单类:
public class Player
{
public string Name { get; set; }
public ConsoleColor Color { get; set; }
public void Speak(string speech)
{
Console.ForegroundColor = Color;
Console.WriteLine(speech);
Console.ForegroundColor = ConsoleColor.White;
}
}
现在每个玩家都有一个Name
和一个ConsoleColor
关联,并且每当Speak()
调用时,控制台将设置为该玩家的颜色,编写演讲,然后将其设置回白色(假设白色是默认颜色)。
在你的主程序中,现在你可能会要求Name
and Color
。
static void Main(string[] args)
{
var player = new Player();
Console.Write("Enter Name : ");
var name = Console.ReadLine();
player.Name = name;
Console.WriteLine("First of all select your color!");
Console.WriteLine("Type 1 for Blue");
Console.WriteLine("Type 2 for Green");
ConsoleKeyInfo keyInfo = Console.ReadKey();
if (keyInfo.KeyChar == '1')
{
player.Color = ConsoleColor.Blue;
}
if (keyInfo.KeyChar == '2')
{
player.Color = ConsoleColor.Green;
}
player.Speak(string.Format("You have chosen {0}", player.Color.ToString()));
Console.ReadLine();
}
现在你可以扩展这个想法,在游戏开始时询问许多玩家的名字和颜色。然后,将它们保存到 aList<Player>
中,并在整个过程中使用它们。
编辑
您甚至可以将来自用户的获取信息包含在Player
类中,这样它的代码就会更整洁,更不容易出错。您可以将此方法包含在Player
该类中:
public void GetPlayerInfo()
{
Console.Write("Enter Name : ");
Name = Console.ReadLine();
Console.WriteLine();
Console.WriteLine("Pick a Color : ");
Console.WriteLine("1 : Red");
Console.WriteLine("2 : Blue");
Console.WriteLine("3 : Green");
var key = Console.ReadLine();
switch (key)
{
case "1":
Color = ConsoleColor.Red;
break;
case "2":
Color = ConsoleColor.Blue;
break;
case "3":
Color = ConsoleColor.Green;
break;
default:
Color = ConsoleColor.White;
break;
}
Console.WriteLine();
}
然后在主端你所要做的就是调用方法:
static void Main(string[] args)
{
var player1 = new Player();
player1.GetPlayerInfo();
player1.Speak(string.Format("You have chosen {0}", player1.Color.ToString()));
var player2 = new Player();
player2.GetPlayerInfo();
player2.Speak(string.Format("You have chosen {0}", player2.Color.ToString()));
Console.ReadLine();
}
推荐阅读
- python - 打印列表时如何制作两个“加入”语句,如果一个涉及“for”循环
- amazon-web-services - Kubernetes LoadBalancer 服务
- android - 如何创建以嵌套 xml 为内容的自定义视图
- excel - 如何计算超过 24 小时的持续时间中的小时数?
- php - 使用 htaccess 将查询重写为路径
- php - PHP:在类内使用 DB 连接
- jquery - 如何停止在后台播放的音频
- atom-editor - 在 Atom 中配置代码折叠以模仿 PatentStorm
- matlab - 函数 'subsindex' 没有为类 'struct' 的值定义
- javascript - 选择框更改时调用网站(HTML、Javascript)