Probleme Pogramm neu zu starten
-
Hallo,
Ich habe jetzt mein erstes Programm geschrieben. Ein Memoryspiel. Jetzt möchte ich dieses gerne neu starten. Geht im Moment nur über den umständlichen weg schliessen und dann neu öffnen. Für das MemoryFeld habe ich eine Klasse namens "MemoryFeld" geschrieben. Beim starten wird der Konstruktor dieser Klasse automatisch aufgerufen und das Spiel wird initialisiert. Habe ich eine möglichkeit diese initialsierung bzw den Konstruktor im Spiel erneut aufzurufen? Wenn ja wäre es super wenn mir jemand helfen kann. Falls Ihr ne andere Idee habt und ich völlig falsch liege ist das auch OK.
MFG
Mr.Blond
-
Methoden zur Initialisierung aus dem Konstruktor in eine andere Funktion auslagern, die dann vom Konstruktor aufgerufen wird. Dann kannst du zum "Neustarten" ganz einfach diese Funktion aufrufen.
-
Dasd schrieb:
Methoden zur Initialisierung aus dem Konstruktor in eine andere Funktion auslagern, die dann vom Konstruktor aufgerufen wird. Dann kannst du zum "Neustarten" ganz einfach diese Funktion aufrufen.
Wie genau ist das gemeint? Sory. Bin aber noch n Newbee. Ich hab folgende Klasse:
struct pos {int x; int y;}; class MemoryFeld{ public: MemoryFeld(); void KarteOeffnen(int x, int y); void SchliesseKarten(); void NeuesSpiel(); void Umdrehen(); void ComputerZug(); int OffeneKarten; int player; pos OffeneKartenPos[2]; int Paare[2]; // das Feld fuer die Indizes der Bilder int InitFeld[7][6]; // das Spielfeld int SpielFeld[7][6]; // Kopie des Spielfeldes int Copy[7][6]; // Bilder, die bereits aufgedeckt wurden pos Aufgedeckt[21][2]; };folgenden Konstruktor:
MemoryFeld::MemoryFeld(){ int bild=0; int Feld[42]; OffeneKarten=0; player = 0; Paare[0]=0; Paare[1]=0; // Initialisiere Aufgedeckt mit -1 for (int i=0; i<21;i++) for (int j=0; j<2; j++){ Aufgedeckt[i][j].x=-1; Aufgedeckt[i][j].y=-1; } //Belegen von Feld for (int i=0; i<42; i++){ Feld[i]= bild; if(((i+1) % 2 == 0)) bild++; } // Mischen von Feld randomize(); random_shuffle(Feld,Feld+42); // Kopieren aus Feld in InitFeld for (int i =0; i<7; i++) for (int j = 0; j<6; j++){ InitFeld[i][j]=Feld[j*7+i]; SpielFeld[i][j]=22; } }In meinem Hauptformular wird bei Programmstart ein Opject vom typ MemoryFeld erstellt. Dieses heisst "SpielFeld". Wie mache ich das mit dem Auslagern der Funktion jetzt genau?
-
*seufz*
Du erstellst in deiner Klasse eine neue Funktion in die der Quelltext des Konstruktors kommt. Im Konstruktor selbst wird diese Funktion lediglich aufgerufen. Dann kannst du diese neue Funktion auch von außen nutzen.
-
Hallo,
oder du erzeugst eine Memberfunktion reset (oder init oder sonst wie), welche im wesentlichen den Code des Konstruktors enthält.
Eine andere Lösunge wäre, du erstellst eine Instanz deiner Memoryklasse dynamisch, löschst und erzeugst sie dann bei Bedarf.Ciao
-
Danke Leute!
Hab das jetzt mit ner extra Funkton und dem geichen Code wie im Konstruktor gemacht.
Manchmal sieht man den Wald vor lauter Bäumen nicht.MFG
Mr.Blond
(Mein Name ist Programm)