Console a la quake (dans la console dos!)

Description

Ce programme reprend le principe d une console a la quake, a la difference que pour un debuggage plus simple je l ai ecrit dans une console dos, donc pas besoin de m occuper de l affichage, seulement du concept. Pour ceux qui ne connaissent pas, il s agit d une console permettant de rentrer des commandes, lesquelles permettent de modifier des variables internes ou d executer des operations.
Le code est relativement peu compliqué, et bugge a certains endroits (si quelqu un pouvait m expliquer pourquoi ma commande toggle ne marche qu une fois sur deux ...), mais dans l ensemble c est relativement efficace.
Une seule chose manque, c est de pouvoir passer des chaines comme parametres aux variables/commandes. Apres le code est pas super bien ecrit (pas mal de variables globales, des membres auxquels on accede sans accesseurs O_o) mais ca marche, je corrigerais ca plus tard.
Pour la catégorie, j ai mis ca dans jeux, parceque je vois pas trop ou ca peut aller d autre lol ;)

Source / Exemple :


/*
 Juste le fichier main histoire d avoir un apercu

  • /
#include <stdio.h> #include <string.h> #include "CConsole.h" bool bQuit = false; CConsole g_Console; // Fonction permettant de quitter void Quit () { bQuit = true; } /* Liste les commandes enregistrees
  • /
void List () { std::list<cvar_t*>::iterator iter; for (iter = g_Console.m_varlist.begin(); iter != g_Console.m_varlist.end(); iter++) printf (" %s\n", (*iter)->name); } /* Inverse la valeur d une cvar : 1 <-> 0 FIXMEEEEEEEEEEEEEEEEEEEEEEEE
  • /
void Toggle () { std::list<cvar_t*>::iterator iter; for (iter = g_Console.m_varlist.begin(); iter != g_Console.m_varlist.end(); iter++) { if (strcmp ( (*iter)->name, g_Console.argv (1) ) ==0 ) { // Si on a pas affaire a une instruction if ((*iter)->isType(CVAR_FUNC)) break; if ((*iter)->value) (*iter)->value = 0.0f; else (*iter)->value = 1.0f; printf ("%s %d\n", (*iter)->name, (*iter)->value); } } } // la cvar qui lui correspond cvar_t* cv_quit = new cvar_t("quit", 0, CVAR_FUNC); cvar_t* cv_exit = new cvar_t("exit", 0, CVAR_FUNC); cvar_t* cv_list = new cvar_t("list", 0, CVAR_FUNC); cvar_t* cv_mode = new cvar_t("r_mode", 3.0f, CVAR_VAL); cvar_t* cv_full = new cvar_t("r_full", 1, CVAR_BOOL); cvar_t* cv_tog = new cvar_t("toggle", 0, CVAR_FUNC); int main () { char* buffer; cv_quit->action = &Quit; cv_exit->action = &Quit; cv_list->action = &List; cv_tog->action = &Toggle; g_Console.RegisterCommand (cv_exit); g_Console.RegisterCommand (cv_quit); g_Console.RegisterCommand (cv_list); g_Console.RegisterCommand (cv_mode); g_Console.RegisterCommand (cv_full); g_Console.RegisterCommand (cv_tog); printf ("\t:: Console v1.0 :: \n"); while ( bQuit==false ) { buffer = g_Console.ReadInput( ); g_Console.Execute ( buffer ); } printf ("\t:: Fin de programme :: \n"); return 0; }

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.