7
votes

Comment puis-je écrire un tampon d'écran de console ANSI C?

Je travaille sur la fabrication d'un jeu basé sur ASCII et que partout où je regarde, les gens disent d'utiliser la console.write () de MSDN, qui est dandy et tout si vous utilisez Windows, mais je ne suis pas. < / p>

Et ainsi, j'essaie d'écrire une fonction, ou un groupe de fonctions en C qui peut alterner entre deux tampons d'écran et les écrire à l'écran, similaire à ce que les pages manqueuses ressemblaient, ainsi que Pico, Vim, et emacs.

J'ai le travail de la mémoire tampon et j'ai trouvé un ancien jeu ASCII pour Linux appelé 0verkill qui utilise c et putchar () pour placer chaque personnage à l'écran, mais toutes mes tentatives de ré-création, entraînent un flux continu de texte, et non un panneau de la taille d'une fenêtre de texte statique. Je ne veux vraiment pas utiliser de bibliothèques externes telles que les malédictions (car cela réduirait la portabilité) et souhaiterait rester aux normes ANSI si possible.

Merci!


0 commentaires

4 Réponses :


5
votes

Je ne veux vraiment pas utiliser de bibliothèques externes telles que les malédictions (car cela réduirait la portabilité)

Quoi? Les bibliothèques telles que les malédictions et les ncurses sont conçues pour rendre ce genre de chose plus portable, car ...

et voudrait rester aux normes ANSI si possible.

... Il n'y a pas de norme ANSI (pour C au moins) pour ce que vous voulez. Chaque système d'exploitation implémente ce type de comportement différemment, donc si vous voulez une manière portable de le faire, vous devez utiliser une bibliothèque. Honnêtement, je détesterais devoir devoir se développer pour un système qui n'a pas les ncurses se sont portés. Imaginez tous les programmes que vous ne seriez pas en mesure d'utiliser sans elle.


3 commentaires

Je suis d'accord avec ce que vous avez dit sur les ncurses étant incroyable, mais bienvenue à OSX, (il y a un port ncurses), mais comment les programmes comme EMACSS (installé par défaut) sont-ils exécutés sans elle?


OS X (au moins, mon système d'exploitation X) a installé des ncurses par défaut.


Eh bien, il semble que je puisse aussi bien plonger dans la documentation des ncurses ... merci pour votre aide!



4
votes

Je pense que ce que vous recherchez est le caractère ANSI Control Caracty ESC [2J qui efface l'écran. Vous appelez cela après tout changement d'état sur "Actualiser" l'écran de la console.

Voir Cette page Pour en savoir plus sur le reste d'eux. En utilisant ces codes, vous pouvez définir des couleurs et des formatage (espacement, alignement, indenter, etc.) sur la console.


3 commentaires

Merci, bien que j'essaie quand j'essaie, il continue à faire défiler la fenêtre du terminal plus longtemps et plus longtemps ... et ne placez pas les anciens putchars sur les nouveaux, jamais Echap [2J fait un espace vide la taille de ma fenêtre de console .


Oui, je pense que c'est tout ce que vous pouvez faire, il fait défiler la fenêtre le nombre de lignes comme votre console, puis vous redessinez tout, puis faites défiler à nouveau. C'est la seule façon dont je suis conscient que ces choses fonctionnent pour donner l'apparence d'une fenêtre statique, mais je ne pense pas que vous puissiez avoir un texte statique réel comme dans un contrôle de Windows (mais même ce n'est pas vraiment statique, c'est Juste être repeint constamment): Vous avez affaire à une console - juste un ruisseau - après tout.


Incorrect. Les deux fenêtres et X ont un concept d'une fenêtre de console défrichée. Les deux permettent également de rédiger des emplacements arbitraires dans la fenêtre de la console



3
votes

Il existe une norme ANSI X3.64, également ISO / CEI 6429 qui décrit le terminal décCR VT100. La norme décrit certains Séquences d'échappement pour le positionnement de la couleur et du curseur qu'un terminal conforme- L'émulateur reconnaîtra, qui sera fondamentalement tous les bornes X, mais sur Windows non nécessairement (éventuellement vous avez besoin de l'utilisateur pour charger ansi.sys ). C'est cette dernière incohérence laidée qui illustre pourquoi vous devriez utiliser des ncurses qui résoudent de tels détails.


1 commentaires

+1 pour la dernière phrase. Pourquoi voudriez-vous écrire une version de buggy, incomplète et difficile à porter d'une bibliothèque vieille vieillie, bien testée et largement portée?



3
votes

Un exemple d'en-tête et d'un fichier source illustrant un moyen d'abstraction des malédictions de l'application. Collecte de poussière; a écrit il y a plus de 15 ans. Cavalier vide.

cursemu.h xxx

cursemu.c xxx

compilation

Nécessite: xxx


0 commentaires