2010-11-10 30 views
2

J'écris actuellement un jeu roguelike à des fins d'apprentissage/amusant. Je l'écris dans la console, et j'ai des problèmes avec la mise à jour laggy de la carte. J'ai fait des tonnes de recherches en ligne et suis tombé sur une solution possible mais elle a été écrite en C++ (je crois).Comment puis-je créer un tableau d'informations Cha incluant des attributs comme la couleur de premier plan?

La solution était d'utiliser WriteConsoleOutput, mais je ne crois pas que ce soit disponible en C#. D'autres recherches ont abouti à une solution C# possible. Passez un tableau à la méthode Console.Write. Cependant, le problème avec cette méthode est que je ne peux pas transmettre (à ma connaissance actuelle) des attributs sur le caractère, comme la couleur de premier plan.

J'ai jeté quelque chose ensemble pour tester le passage d'un tableau à Console.Write. Le code ci-dessous affichera une grille de nombres. Je voudrais avoir la possibilité de changer la couleur de premier plan pour chaque valeur dans la grille. Donc, 1 serait bleu, et 2 serait rouge, etc ...

static void Main(string[] args) 
    { 
     Console.SetWindowSize(80, 35); 
     Console.BufferWidth = 80; 
     Console.BufferHeight = 35; 
     string temp = ""; 

     int[,] aryMap = new int[,] { 
      {0,0,0,0,0}, 
      {1,1,1,1,1}, 
      {2,2,2,2,2}, 
      {3,3,3,3,3}, 
      {4,4,4,4,4}, 
      {5,5,5,5,5} 
     };   

     for (int h = 0; h < 5; h++) 
     { 
      temp += "\n"; 
      for (int w = 0; w < 5; w++) 
      { 
       temp += aryMap[h, w]; 
      } 
     } 
     Console.SetCursorPosition(0, 0); 
     Console.Write(temp); 
     string test = Console.ReadLine(); 
    } 

SOLUTION

J'ai fini à l'aide Mutine qui est une bibliothèque pour faire des interfaces de type console en C#. Fonctionne très bien, et maintenant je ne dois pas créer ma propre console.

http://bitbucket.org/munificent/malison/wiki/Home

+0

Pourrait probablement faire avec un peu d'action StringBuilder si cette méthode est en cours de thrash. – spender

Répondre

1

Vous pouvez soit des séquences d'échappement de sortie ANSI, ou utiliser les propriétés Control.ForegroundColor et Console.BackgroundColor pour définir la propriété avant d'écrire votre personnage.

Je suggérerais les séquences d'échappement ANSI si vous devez écrire en un seul appel.

+0

pouvez-vous me fournir la syntaxe pour changer une couleur de caractères? Je regarde msdn et je vois une liste de séquences d'échappement, mais rien pour formater le personnage d'une couleur différente. – James

+0

bon endroit pour commencer: http://en.wikipedia.org/wiki/ANSI_escape_code – Boo

+0

ESC [1; 33; 44mHELLO – Boo

1

Ce code fonctionne bien: http://www.daniweb.com/code/snippet216395.html
Je suis sûr que vous pouvez le modifier pour répondre à vos besoins.

+0

J'ai examiné le lien, mais ces méthodes ne résolvent malheureusement pas mon problème. Je veux seulement appeler la méthode console.write 1 fois si possible. – James

+0

Vous pouvez l'appeler une seule fois, mais il vous suffit d'envoyer les valeurs correctes. Construire une chaîne avec 'StringBuilder' qui a toutes les balises de couleur et le texte, et l'envoyer à' Console.Write() 'à la fois. Le lien est simplement un exemple de la façon de produire différentes couleurs de la console par personnage. – BeemerGuy

+0

Je dois manquer quelque chose parce que je ne vois pas un exemple de la façon de produire des couleurs différentes par caractère sans appeler Console.Write plus d'une fois. – James