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
usingnamespacestd;
12
13
voiderzeugeGen()//Erzeugen einer Anfangsgeneration mit einer gegeben Zahl lebender Zellen
14
15
{unsignedint**&G;//Deklaration
16
unsignedintn,m;
17
18
while(m!=0)
19
20
G=1;
21
m--;
22
}
23
24
25
voidbestimmeGen()//Erzeugen einer neuen Generation auf Basis einer gegebenen Generation
26
27
{unsignedint**&G;//Deklaration
28
unsignedint**&N;
29
unsignedintn;
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
voidbestimmeNachb()//Bestimmen der Anzahl lebender Nachbarzellen aller Zellen einer gegebenen Generation
48
49
{unsignedint**G;//Deklaration
50
unsignedint**&N;
51
unsignedintn;
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
voidzeigeGen()//Ausgeben einer gegebenen Generation
63
64
{unsignedint**G;//Deklaration
65
unsignedintn;
66
67
for()
68
for()
69
}
70
71
72
73
intmain()//Hauptprogramm
74
75
{unsignedintn;//Deklaration
76
unsignedintm;
77
unsignedint**G=newunsignedint*[n][n];
78
unsignedint**N=newunsignedint*[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
bestimmeNachbarn()
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
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
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?
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
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
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
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...
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