www.mikrocontroller.net

Forum: PC-Programmierung Conways game of Life wxDevC++


Autor: Willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Leute ich habe ein großes Problem und zwar will ich das Spiel 
Conways game Of Life programmieren. Ich nutze hierzu das Programm 
wxDevC++.
Mittlerweile habe ich es hinbekommen über die Widgets ein ordentliches 
Fenster zu programmieren, allerdings weiß ich nun nicht wo ich das 
Programm hintun soll. Ich habe es mal für die Konsole geschrieben aber 
wie schreibe ich das in den widgets oder muss ich dafür noch was anderes 
tun(zbsp WinApp)
Ich weiß da mom nicht mehr weiter.
Hier mal das Programm für das Fenster:
http://rapidshare.com/files/440639634/Game_of_Life.rar

und hier das Spiel für die Konsole:
//Conways Spiel des Lebens//
//Programm hat 100 Zellen, wovon 30 anfänglich leben, 20 Generationen sollen simuliert werden
//G Parameter für eine Generation
//N Parameter für die Anzahl der lebenden Nachbarn jeder Zelle
//n Parameter für die Dimension des Spielfeldes
//m Parameter für die Anzahl der lebeneden Zellen
//Zelle hat im Inneren des Feldes 8, am Rand 5 und in den Ecken drei Nachbarn

#include <iostream>

using namespace std;

void erzeugeGen()  //Erzeugen einer Anfangsgeneration mit einer gegeben Zahl lebender Zellen

{ unsigned int**& G; //Deklaration
unsigned int n,m;

while (m !=0)

G=1;
m--;
}


void bestimmeGen()  //Erzeugen einer neuen Generation auf Basis einer gegebenen Generation

{ unsigned int**& G; //Deklaration
unsigned int**& N;
unsigned int n;
 
 for()
 for()

 switch
  case 'a'; /*Besitzt eine Zelle genau zwei lebende Nachbarzellen, dann ändert sich ihr Zustand
        in der nächsten Generation nicht*/

  case 'b'; /*Besitzt die Zelle genau drei lebende Nachbarzellen, dann wird ihr Zustand in der nächsten
        Generation auf "Zelle lebt" gesetzt*/

  case 'c'; /*Besitzt die Zelle weniger als zwei oder mehr als drei lebende Nachbarzellen, dann wird ihr
        Zustand in der nächsten Generation auf "Zelle tot" gesetzt.*/

}


void bestimmeNachb()  //Bestimmen der Anzahl lebender Nachbarzellen aller Zellen einer gegebenen Generation

{ unsigned int** G; //Deklaration
unsigned int**& N;
unsigned int n;

 for()  //Berücksichtigung aller Zellen
 for()

  for() //Ermitteln der Anzahl der lebenden Nachbarzellen einer Zelle
  for()
  if()
}


void zeigeGen()   //Ausgeben einer gegebenen Generation

{ unsigned int** G; //Deklaration
unsigned int n;

 for()
 for()
}



int main()   //Hauptprogramm

{ unsigned int n;  //Deklaration
unsigned int m;
unsigned int**G = new unsigned int *[n][n];
unsigned int**N = new unsigned int *[n][n];

 cout<<"Die Dimension des Spielfeldes betraegt: "; //Einlesen Der Dimension n des Spielfeldes
 cin>>n;
 cout<<"Anzahl der zu Beginn lebenden Zellen: ";  //Einlesen der Anzahl m der zu Beginn lebenden Zellen
 cin>>m;

 cout<<       //zufällige Verteilung der Zellen auf dem Spielfeld
        // Ausgabe der Anfangsgeneration
 erzeugeGen()
 zeigeGen()

 for(G=0; G<=m; G++)     //Durchlaufen aller Generationen
 cout<< G++;      //Ausgabe jeder Genration mit Nummer
 bestimme Nachbarn()
 bestimmeGen()
 zeigeGen()

 for(n=0; n<m; n++)
 delete[ ] G[n];
 delete[ ] G;

 for(n=0; n<m> n++)
 delete[ ] N[n];
 delete [ ] N;

}

Ich habe in Foren gelesen dass DOS keine gute Idee ist.
Aber ich habe bisher nur in DOS gearbeitet und keine Ahnung wie und wo 
ich das anders programmieren soll. Es soll ja nacher so funktionieren 
dass ich am anfang mein erstelltes Fenster habe und dadurch die 
Eigenschaften wählen kann und das Programm laufen lasse.

also eure Hilfe ist hier gefragt denn ich komme echt nicht mehr weiter.

mfg Willi

Autor: Kalka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey,

also bei "Fenster-Anwendungen" läuft alles in der Regel nach dem EVA 
Prinzip ab - dass heißt wenn der Benutzer etwas macht, dann wird eine 
entsprechende Funktion aufgerufen und das Programm schläft dann bis zur 
nächsten Interaktion.

Was du tun musst, ist einen Timer zu aktivieren. Inwiefern das genau 
geht, musst du leider selbst erarbeiten. So ein Timer hat dann in der 
Regel eine Funktion, welche regelmäßig (einstellbar in ms) aufgerufen 
wird.

In dieser Funktion musst du dann das neue "Spielbrett" berechnen und 
zeichnen.

Willst du z.B., dass das Spiel auf einem Play-Button startet, musst du 
in der Button-Click Funktion den Timer aktivieren. Eventuell vorhoer 
noch einige Parameter festlegen (Spielgröße, Timergeschwindigkeit,..?).
Willst du einen Stop-Knopf machen, so musst du eben in der 
entsprechenden Click-Funktion des Knopfes den Timer wieder deaktivieren.

Grüße,
  Kalka

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sicher gibt es ein Tutorial für wxWidgets, in dem erklärt wird, wie man 
ein einfaches Programm schreibt das Folgendes macht:

-Ein Fenster mit einem Button darstellen
-Wenn der Benutzer auf den Button klickt, passiert etwas (im einfachsten 
Fall: Programm wird beendet)

Davon ausgehend kann man dann aufbauen: Mehr Buttons, andere 
Eingabeelemente als Buttons, mehr und unterschiedliche Reaktionen auf 
die Benutzereingaben, ...

Qt hat für sowas die sehr feinen "Signals and Slots". Bei wxWidgets kenn 
ich mich leider nicht aus, aber irgendwas in der Richtung wird es wohl 
geben?

Autor: Willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten

Also das mit dem Timer wird wahrscheinlich klappen aber ich habe noch 
nie mit dem Timer gearbeitet. Es ist auch das erste mal dass ich Widgets 
nutze. Ich musste mir das alles selbst erarbeiten weil wir das auf der 
UNI noch nicht gesehen haben genausowenig wie Timer. Es ist halt so dass 
wir vorher JAVA gemacht haben und erst dieses Semester mit C++ 
angefangen haben und wir das jetzt ein Projekt machen müssen. Ich werd 
versuchen aber glaube nicht dass ich da weiterkomme

Autor: Nico Sch. (nico22)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann dir die Dokumentation von wxWidgets wärmstens ans Herz legen, 
sie ist sehr vollständig.

Zunächst arbeitet wxWidgets mit Events; wenn du einen Button anklickst, 
wird ein Event generiert und du musst einen Handler registrieren, also 
eine Funktion schreiben, die beim Klick aufgerufen wird und ebenfalls 
diesen Handler registrieren.

Das ist sehr ausführlich hier beschrieben:
http://docs.wxwidgets.org/stable/wx_eventhandlingo...

Der Timer ist hier beschrieben:
http://docs.wxwidgets.org/stable/wx_wxtimer.html

Du leitest die Timer-Klasse ab und schreibst deine eigene 
::Notify-Funktion.

Fertig ist der Fisch.

Nico

Autor: Willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werde mir das auf jeden Fall mal ansehen aber für mein Projekt ist 
es dazu bereits zu spät. Morgen ist die vorführung.

Ich werd wohl ienfach ien Programm schreiben mit dem ich verschiedene 
Programm wie Word, Exel, Editor... aufrufen und starten kann.
Hoffe das reicht für die Punkte aber, was besseres krieg ich mom eh 
nicht auf die Reihe da ich auch noch ein JAVA-Projekt habe, auch conways 
Spiel des Lebens, da finzt wenigstens alles

Autor: Umwelttechniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Darf man bei euch schon mit 15 auf die Uni oder lernt man bei euch im 
Studium nicht mehr wie man Bücher benutzt?
Normal hat jede Hochschule ne Bibliothek wo man Bücher ausleihen kann, 
dort sollte auch ein C++ und/oder wxWidgets Buch dabei sein.

Sorry für das kommende, aber ich studiere ne Fachrichtung die nichts mit 
EDV oder Elektronik am Hut hat (-> Umwelttechnik) und habe mir während 
der letzten 2 Semesters C++ und wxWidgets beigebracht und verfeinere es 
gerade, wenn du so simples wie das Grundverständnis für GUIs nicht auf 
die Reihe bekommst solltest du das Studium wechseln (ernsthaft!).
Noch dazu gestern angefangen und morgen schon fertig sein müssen...

Autor: Willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es ist ja nicht so dass ich auch informatik sutdiere oder elektronik, 
sondern elektrotechnik, die haben nix  mit elektronik am hut.
Du hattest wenigstens 2 Semester Zeit, wir haben erst dieses Semster 
angefangen und dabei nunr Konsole gesehen und auch nur noch das 
einfachste vom einfachsten. Ich war als die Porjektideen vorgestellt 
wurden halt so stur dass ich dachte das hinzubekommen, mittlerweile 
läuft das spiel ja uf Java, und nun hab ich das alte Programm für C++ 
komplett gelöscht und ein neues angefangen, wird halt ne Nachtschicht 
aber das wird noch fertig

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.