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


von Willi (Gast)


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:
1
//Conways Spiel des Lebens//
2
//Programm hat 100 Zellen, wovon 30 anfänglich leben, 20 Generationen sollen simuliert werden
3
//G Parameter für eine Generation
4
//N Parameter für die Anzahl der lebenden Nachbarn jeder Zelle
5
//n Parameter für die Dimension des Spielfeldes
6
//m Parameter für die Anzahl der lebeneden Zellen
7
//Zelle hat im Inneren des Feldes 8, am Rand 5 und in den Ecken drei Nachbarn
8
9
#include <iostream>
10
11
using namespace std;
12
13
void erzeugeGen()  //Erzeugen einer Anfangsgeneration mit einer gegeben Zahl lebender Zellen
14
15
{ unsigned int**& G; //Deklaration
16
unsigned int n,m;
17
18
while (m !=0)
19
20
G=1;
21
m--;
22
}
23
24
25
void bestimmeGen()  //Erzeugen einer neuen Generation auf Basis einer gegebenen Generation
26
27
{ unsigned int**& G; //Deklaration
28
unsigned int**& N;
29
unsigned int n;
30
 
31
 for()
32
 for()
33
34
 switch
35
  case 'a'; /*Besitzt eine Zelle genau zwei lebende Nachbarzellen, dann ändert sich ihr Zustand
36
        in der nächsten Generation nicht*/
37
38
  case 'b'; /*Besitzt die Zelle genau drei lebende Nachbarzellen, dann wird ihr Zustand in der nächsten
39
        Generation auf "Zelle lebt" gesetzt*/
40
41
  case 'c'; /*Besitzt die Zelle weniger als zwei oder mehr als drei lebende Nachbarzellen, dann wird ihr
42
        Zustand in der nächsten Generation auf "Zelle tot" gesetzt.*/
43
44
}
45
46
47
void bestimmeNachb()  //Bestimmen der Anzahl lebender Nachbarzellen aller Zellen einer gegebenen Generation
48
49
{ unsigned int** G; //Deklaration
50
unsigned int**& N;
51
unsigned int n;
52
53
 for()  //Berücksichtigung aller Zellen
54
 for()
55
56
  for() //Ermitteln der Anzahl der lebenden Nachbarzellen einer Zelle
57
  for()
58
  if()
59
}
60
61
62
void zeigeGen()   //Ausgeben einer gegebenen Generation
63
64
{ unsigned int** G; //Deklaration
65
unsigned int n;
66
67
 for()
68
 for()
69
}
70
71
72
73
int main()   //Hauptprogramm
74
75
{ unsigned int n;  //Deklaration
76
unsigned int m;
77
unsigned int**G = new unsigned int *[n][n];
78
unsigned int**N = new unsigned int *[n][n];
79
80
 cout<<"Die Dimension des Spielfeldes betraegt: "; //Einlesen Der Dimension n des Spielfeldes
81
 cin>>n;
82
 cout<<"Anzahl der zu Beginn lebenden Zellen: ";  //Einlesen der Anzahl m der zu Beginn lebenden Zellen
83
 cin>>m;
84
85
 cout<<       //zufällige Verteilung der Zellen auf dem Spielfeld
86
        // Ausgabe der Anfangsgeneration
87
 erzeugeGen()
88
 zeigeGen()
89
90
 for(G=0; G<=m; G++)     //Durchlaufen aller Generationen
91
 cout<< G++;      //Ausgabe jeder Genration mit Nummer
92
 bestimme Nachbarn()
93
 bestimmeGen()
94
 zeigeGen()
95
96
 for(n=0; n<m; n++)
97
 delete[ ] G[n];
98
 delete[ ] G;
99
100
 for(n=0; n<m> n++)
101
 delete[ ] N[n];
102
 delete [ ] N;
103
104
}

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

von Kalka (Gast)


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

von Mark B. (markbrandis)


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?

von Willi (Gast)


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

von Nico S. (nico22)


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_eventhandlingoverview.html#eventhandlingoverview

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

von Willi (Gast)


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

von Umwelttechniker (Gast)


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...

von Willi (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.