#c_sharp
Вкратце я делаю шахматы в консоли, мне нужно что бы char имел два значения, а точнее мог быть как белого цвета так и чёрного, зависит от выбора что занести в {0}, символ любой. Мне нужно знать возможно ли это реализовать вообще, хоть как-то, мои знания в C# на уровне новичка, так что может я просто не понимаю или не вижу способ реализации. class Char { static void Main() { char One = 'П'; Console.WriteLine("{0}", One); } } Реализовал уже всё кроме некоторых движений фигур, получилось как-то так.
Ответы
Ответ 1
Самое время вспомнить, что C# - объектно-ориентированный язык и добавить пару собственных типов для описания фигур на поле. Для начала зададим цвета фигур перечислением enum FigureColor { White, Black } Теперь определим фигуру. Так как фигура не может менять цвет во время игры - сделаем свойство отвечающее за цвет доступным только для чтения. public class ChessFigure { //буквенное обозначение public char Letter { get; set; } //цвет фигуры public FigureColor Color { get; private set; } //конструктор public ChessFigure(FigureColor color, char letter) { Color = color; Letter = letter; } } Теперь создание и вывод фигуры в консоль можно сделать так ChessFigure one = new ChessFigure(FigureColor.Black, 'П'); if(one.Color == FigureColor.Black) Console.ForegroundColor = ConsoleColor.Red; if(one.Color == FigureColor.White) Console.ForegroundColor = ConsoleColor.White; Console.Write(one.Letter); Console.ResetColor(); Это только идея, которую можно и нужно развивать дальше. Похожий прием можно использовать для клеток шахматной доски. Старайтесь сразу отделять логику программы от ее визуализации, это поможет избежать сложностей с добавлением новых функций и изменением уже имеющихся.Ответ 2
Судя по всему, Вам нужно что-то вроде этого. Думаю, легко адаптируете к своей задаче. using System; class Program { const bool BLACK = true; const bool WHITE = false; public static void display(char c, bool bw) { Console.ForegroundColor = bw ? ConsoleColor.Black : ConsoleColor.White; Console.BackgroundColor = bw ? ConsoleColor.White : ConsoleColor.Black; Console.Write(c); } public static void Main(string[] args) { const string line1 = "RNBQKBRN"; const string line2 = "pppppppp"; const string line3 = " "; string[] lines = { line1, line2, line3, line3, line3, line3, line2, line1 }; bool first = WHITE; for (int i = 0; i < 8; ++i) { bool bw = first; first = !first; for (int j = 0; j < 8; ++j) { display(lines[i][j], bw); bw = !bw; } Console.WriteLine(); } Console.WriteLine(); Console.ReadKey(); } }Ответ 3
Можно и так. class Char { static bool Ones; static string Enter; static void Main() { Console.Clear(); Console.OutputEncoding = Encoding.UTF8; Enter = Console.ReadLine(); switch (Enter) { case "White": Ones = true; break; case "Red": Ones = false; break; default: Main(); break; } Console.Write("┆ "); if (Ones == true) White(); if (Ones == false) Black(); Console.ResetColor(); Console.Write(" ┆"); Console.ReadKey(); } static void White() { Console.ForegroundColor = ConsoleColor.White; Console.Write("П"); } static void Black() { Console.ForegroundColor = ConsoleColor.Red; Console.Write("П"); } }
Комментариев нет:
Отправить комментарий