Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
magynhard Super JLI'ler
Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 19.06.2003, 14:23 Titel: Fenster bei Konsolenanwendung "leeren" |
|
|
Ich möchte bevor ich jetzt dann richtige in die Windows & DX Programmierung übersteige erst noch ein Konsolen-Anwendungs-Spiel machen.
Ich suche derzeit nach einem Befehl, der mir das Fenster praktisch leert, praktisch wie der Befehl cls damals unter DOS, damit ich die Anwendung schöner und einheitlicher gestalten kann. _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
|
|
Nach oben |
|
|
gl_echse JLI'ler
Anmeldedatum: 01.01.2003 Beiträge: 105
Medaillen: Keine
|
Verfasst am: 19.06.2003, 14:36 Titel: |
|
|
Code: | #include <stdlib.h>
#include <iostream.h>
//...
system("cls");
|
bei reinen dos-anwendungen musst du allerdings
verwenden. |
|
Nach oben |
|
|
magynhard Super JLI'ler
Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 19.06.2003, 15:41 Titel: |
|
|
Danke, ich hab's ausprobiert und es funktioniert "eigentlich" mit
system("cls");
Jedoch gibt es jetzt noch ein Problem, das sieht Code-mäßig so aus:
Code: |
FelderAusgeben(GegFSp1,GegFSp2);
cout << "test";
system("cls");
cout << "test2";
|
In der Funktion Felder ausgeben werden "Spielfelder" (hab ich mit Zeichen, also mit char-Feldern kreiert) ausgegeben.
Nur gibt's da ein Problem, wenn ca. die Hälfte der FelderAusgeben-Funktion abgearbeitet ist, also das halbe Feld fertig ist, wird scheinbar schon das system("cls") ausgeführt, was ich natürlich nicht so haben will, da ja nur "test2" sichtbar sein soll.
Warum wird nicht erst die ganze Funktion abgearbeitet? Ich verstehe das nicht...
Kannst du oder jemand anderst weiterhelfen? _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 19.06.2003, 15:58 Titel: |
|
|
Versuch's mal mit cout.flush() vorher. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
gl_echse JLI'ler
Anmeldedatum: 01.01.2003 Beiträge: 105
Medaillen: Keine
|
Verfasst am: 19.06.2003, 16:17 Titel: |
|
|
jep. mach am ende der felder cout.flush(); oder cout<<flush; oder wenn du eh einen zeilenumbruch machst: cout<<endl; bzw. cout.endl(); da endl "\n" und flush ist. |
|
Nach oben |
|
|
gl_echse JLI'ler
Anmeldedatum: 01.01.2003 Beiträge: 105
Medaillen: Keine
|
Verfasst am: 19.06.2003, 17:17 Titel: |
|
|
ich persönlich würde eher einen singelton für den screen deklarieren, in dem du dann dein screen 1-3 mal bufferst, um so noch etwas zu verändern usw. also, dass du quasi jedesmal in den buffer schreibst, und wenn er fertig ist "flushst" du ihn. wäre sicher etwas praktischer. |
|
Nach oben |
|
|
magynhard Super JLI'ler
Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 19.06.2003, 19:40 Titel: |
|
|
Danke funktioniert!
Könnt ihr mir noch genau erklären was das flush genau macht?
Letzteres habe ich leider nicht so ganz verstanden _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 19.06.2003, 20:13 Titel: |
|
|
Du arbeitest ja mit Streams. Du füllst sie und sie werden nach und nach in den Zielpuffer geschrieben. Mit flush() leerst du den Stream. Alles was sich noch in ihm befindet wird in den Zielpuffer kopiert.
Zu gl_echses Vorschlag: Ein Singleton ist eine Klasse, von der es nur eine Instanz geben kann und darf. Ob es für dich Sinnvoll wäre, weiß ich nicht, dass muss jeder selber entscheiden. Die kommen hauptsächlich bei Managerklassen zum Einsatz. ;)
Ein Singleton kann z.B. so aufgebaut sein(Meyers Singleton Muster)
Code: |
class CBla
{
public:
static CBla & Get()
{
static Bla instance;
return instance;
}
void DoSomething() { cout << "Hallo\n"; }
};
// Den benutzt man dann so:
CBla::Get().DoSomething();
|
Man hat also eine globale Instanz der Klasse und es ist gesichert, dass auch nur diese eine existiert!
[Nachtrag]
Der Konstruktor muss private sein, damit man von außerhalb nicht weitere Instanzen anlegen kann. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
magynhard Super JLI'ler
Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 19.06.2003, 20:36 Titel: |
|
|
So leid es mir tut, aber ich weiß nicht was genau Streams sind und was du mit dem Zielpuffer (hört sich nach Speicher an, wo zwischengespeichert wird) meinst.
Auch was mit Instanz genau gemeint ist, weiß ich net so ganz, der Code ist für mich daher leider nicht erkennbar, vom Sinn.
*schäm* _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 19.06.2003, 21:16 Titel: |
|
|
Ein Stream ist ein Fluss von Daten, in diesem Falle Zeichen.
Zielpuffer ist in diesem Falle der Textspeicher auf deiner Grafikkarte.
Eine Instanz einer Klasse:
Code: |
// Das ist die Klasse
class Bla
{
};
// Das sind Instanzen der Klasse
Bla a, b, c, d;
|
Wenn du dir den Code richtig angeschaut hättest, hättest du auch selber darauf kommen können.. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
magynhard Super JLI'ler
Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 19.06.2003, 22:25 Titel: |
|
|
Ok, dann weiß ich jetzt mal wieder etwas mehr
Hab den Code auch "richtig" angeschaut, naja ich finde ihn aber irgendwie schon umständlich - selbst draufgekommen wäre ich nicht, da mein C++ Wissen (noch) nicht sehr groß ist
In ein paar Monaten kann ich dann vermutlich darüber schmunzeln _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
|
|
Nach oben |
|
|
gl_echse JLI'ler
Anmeldedatum: 01.01.2003 Beiträge: 105
Medaillen: Keine
|
Verfasst am: 20.06.2003, 13:11 Titel: |
|
|
IMHO solltest du das besser so machen:
Code: |
//bla.h
//...
class cBla
{
private:
cBla();
~cBla();
static cBla* Instance;
public:
static cBla* getInstance();
static void destroyInstance();
//....
};
#define CBLA cBla::getInstance()
//Bla.cpp
#include "Bla.h"
cBla* cBla::Instance = 0;
cBla* cBla::getInstance()
{
if(0 == Instance)
Instance = new cBla;
return Instance;
}
void cBla::destroyInstance()
{
if(Instance)
{
delete Instance;
Instance=0;
}
}
|
|
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 20.06.2003, 13:38 Titel: |
|
|
Was sind die Vorteile dieses Modells? :P
Keine, es ist nur komplizierter. So muss man vorgehen, wenn die Reihenfolge wichtig ist, in der die d'tors aufgerufen werden. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
gl_echse JLI'ler
Anmeldedatum: 01.01.2003 Beiträge: 105
Medaillen: Keine
|
Verfasst am: 20.06.2003, 13:41 Titel: |
|
|
bei deiner methode ist das problem, dass bei jedem get()-aufruf eine neue instanz "eröffnet" wird, was dann ja wohl kein singleton ist. das mit dem #define ist nur ein beispiel, dass den vorteil hat, nicht alles mit extern definieren zu müssen, bzw. wieder eine neue instanz anzufordern. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 20.06.2003, 13:47 Titel: |
|
|
gl_echse hat Folgendes geschrieben: | bei deiner methode ist das problem, dass bei jedem get()-aufruf eine neue instanz "eröffnet" wird, was dann ja wohl kein singleton ist. das mit dem #define ist nur ein beispiel, dass den vorteil hat, nicht alles mit extern definieren zu müssen, bzw. wieder eine neue instanz anzufordern. |
Schwachsinn. Gugg dir mal an, was das Schlüsselwort "static" bedeutet. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
|