Programmier-Grundstrucktur


Status
Not open for further replies.

Seddy

Still Fresh
Joined
Sep 30, 2008
Messages
23
So, da ich ja jetzt quasi loslegen kann mit programmieren, würde ich gerne die wichtigsten Fragen klären bezüglich der Grundstrucktur klären.
Ich bin für folgende Strucktur:
-Der SDL-Hauptbildschirm ist eine der wenigen globalen Variablen(Pointer), er heißt einfach screen.
-Da wir noch nicht wissen(oder doch?) wie die Buttons der Pandora und des Wiz
angesteuert werden, machen wir für den Anfang folgende Globale Booleans:
Bup,Bdown,Bleft,Bright,BAup,BAdown,BAleft,BAright,BSleft,BSright,Bstart,Bselect
Die normalen Knöpfe sind das Richtungskreuz, die A(ction) Knöpfe sind die vier
Knöpfe rechts, die S(houlders) sind halt die Schultertasen, Start und Select sollte klar
sein, allerdings weiß ich nicht, ob der Wiz einen Start Button hat.
Ich wäre auch bereit so blad wie möglich eine Funktion zu schreiben, die dann nach
jedem WaitEvent(oder PollEvent) aufgerufen wir und die Variablen richtig setzt(am
Anfang natürlich erstmal auf "normale" Tasten gemapped.
-Wenn ein Level oder eine zwischensequenz aufgerufen wird, geschiewt die als
Funktion, wodurch die aufrufende Funktion automatisch Pausiert wird. Mit Threads
können wir uns später immer noch rumärgern wenn das denn gewünscht wird.
-speziell für Hunter.Wolf: das eigentliche Spiel wird über folgende Funktion
aufgerufen:
bool puzzle(short breite,short farben,short anfangsstufem, short bloeke,short
ausloeser,short ziel,bool luft)
ausloeser ist dann 0,1 oder 2 für sofort, mit extra auslöser, mit timeline
ziel weiß ich noch nicht, wird noch geklärt
luft ist true für Dr. Mario, false für QuadraPop
-das die Optionen jedes Mal mit übergeben werden sollen finde ich etwas unsinnig,
da wäre ein globaler struct mit den Optionen drin sinnvoller

Mehr fällt mir jetzt erstmal nicht ein, wenn ihr Kritik oder Zusätze habt immer her damit.
 
Seddy said:
So, da ich ja jetzt quasi loslegen kann mit programmieren, würde ich gerne die wichtigsten Fragen klären bezüglich der Grundstrucktur klären.
Ich bin für folgende Strucktur:
-Der SDL-Hauptbildschirm ist eine der wenigen globalen Variablen(Pointer), er heißt einfach screen.

Ich bin nicht so der Fan von globalen Variablen, aber meinetwegen. Außerdem könnte man ihn dir auch schon im Konstruktur übergeben.
-Da wir noch nicht wissen(oder doch?) wie die Buttons der Pandora und des Wiz
angesteuert werden, machen wir für den Anfang folgende Globale Booleans:
Bup,Bdown,Bleft,Bright,BAup,BAdown,BAleft,BAright,BSleft,BSright,Bstart,Bselect
Die normalen Knöpfe sind das Richtungskreuz, die A(ction) Knöpfe sind die vier
Knöpfe rechts, die S(houlders) sind halt die Schultertasen, Start und Select sollte klar
sein, allerdings weiß ich nicht, ob der Wiz einen Start Button hat.

Der Wiz sollte einen Start Button haben. Und die Tasten sind wie bei einem Gamepad definiert. Sofern ich mich noch erinnere müsste das JoyUp, JoyDown oder sowas... Muss ich sogar selber nochmal genau nachschauen.
-Wenn ein Level oder eine zwischensequenz aufgerufen wird, geschiewt die als
Funktion, wodurch die aufrufende Funktion automatisch Pausiert wird. Mit Threads
können wir uns später immer noch rumärgern wenn das denn gewünscht wird.

Das verstehe ich nicht so richtig... :wacko:
speziell für Hunter.Wolf: das eigentliche Spiel wird über folgende Funktion
aufgerufen:
bool puzzle(short breite,short farben,short anfangsstufem, short bloeke,short
ausloeser,short ziel,bool luft)
ausloeser ist dann 0,1 oder 2 für sofort, mit extra auslöser, mit timeline
ziel weiß ich noch nicht, wird noch geklärt
luft ist true für Dr. Mario, false für QuadraPop

Ziel kannst du auch als Klasse (oder struct), wo ne Menge Variablen drin sind (also sozusagen alle Möglichkeiten). Wenn diese 0 sind, dann ist das kein ziel.

BSP:
Code:
<i>
</i>class Ziel
{
     public:
     (...)
     RED = 0;
     BLUE = 0;
     GREEN = 20;
     YELLOW = 0;
     (...)
}

heißt dann soviel wie, das 20 Grüne steine abgebaut werden müssen.
das die Optionen jedes Mal mit übergeben werden sollen finde ich etwas unsinnig,
da wäre ein globaler struct mit den Optionen drin sinnvoller

kriegst die Optionen per Pointer dann im Konstruktur
 
Thrake said:
Ich bin nicht so der Fan von globalen Variablen, aber meinetwegen. Außerdem könnte man ihn dir auch schon im Konstruktur übergeben.
Ich auch nicht, aber das übergeben finde ich imemr etwas umständlich, da werden die Konstruktoren so lang, und da wirklich jede Funktion die etwas zeichnen muss diese Veriable braucht bringt das an der Stelle schon Sinn.
Das verstehe ich nicht so richtig... :wacko:
Damit meine ich, dass z.B. die Levelauswahlfunktion nicht beendet wird, bevor das Hauptspiel gestartet wird, das finde ich recht komfortabel, um die Rückgabe(gewonnen/nicht gewonnen) direkt verarbeiten zu können.
Ziel kannst du auch als Klasse (oder struct), wo ne Menge Variablen drin sind (also sozusagen alle Möglichkeiten). Wenn diese 0 sind, dann ist das kein ziel.
Finde ich gut.

Und noch eine Änderung, ich hatte mir gedacht meinen "Spiel-Teil" als Funktion zu schreiben, was natürlich Unsinn ist, das Ganze wird eine Klasse mit Kontruktor und der Methode run()(vielleicht setze ich die auch schon ans Ende des Kontruktors, je nachdem wie das benötigt wird).
 
Seddy said:
Thrake said:
Ich bin nicht so der Fan von globalen Variablen, aber meinetwegen. Außerdem könnte man ihn dir auch schon im Konstruktur übergeben.
Ich auch nicht, aber das übergeben finde ich imemr etwas umständlich, da werden die Konstruktoren so lang, und da wirklich jede Funktion die etwas zeichnen muss diese Veriable braucht bringt das an der Stelle schon Sinn.

Ist einfacher als du denkst...

Bsp: Ich deklariere Optionen so
Code:
<i>
</i>Optionen *opt = new Optionen();

übergeben wird er dir so:
Code:
<i>
</i>Spiel spiel(opt);

dein klasse sieht so aus:
Code:
<i>
</i>include "optionen.h"

class Spiel {
public
Spiel(Optionen*);
(..)

private:
Optionen *opt;
(...)
}

dein Konstruktur sieht so aus:
Code:
<i>
</i>Spiel::Spiel(Optionen *topt){
opt = topt
(...)
}

nun hast du mit "opt" die Optionen drin und kannst alles mit opt-> aufrufen oder abfragen ;)

PS: Ich habe das schon sehr oft gemacht, weil ich kein fan von globalen Variablen bin ;)
 
Ok, jetzt bin ich dahinter gestiegen was du eigentlich meinst, ich bin die ganze Zeit davon ausgegangen, dass du mit Pointer auf die Optionen sowas meinst wie Lautstärke der Musik,
welche Aktion will der Spieler auf welcher Taste haben..., aber so bringt das gleich viel mehr
Sinn. Ich würde das sogar direkt so übernemen.
 
Seddy said:
-Da wir noch nicht wissen(oder doch?) wie die Buttons der Pandora und des Wiz
angesteuert werden, machen wir für den Anfang folgende Globale Booleans:
Bup,Bdown,Bleft,Bright,BAup,BAdown,BAleft,BAright,BSleft,BSright,Bstart,Bselect
Die normalen Knöpfe sind das Richtungskreuz, die A(ction) Knöpfe sind die vier
Knöpfe rechts, die S(houlders) sind halt die Schultertasen, Start und Select sollte klar
sein, allerdings weiß ich nicht, ob der Wiz einen Start Button hat.

Ich hab auf dem SVN eine "define.h" geuploaded. da sind zurzeit die Keys definiert.
 
Ok, ich werde deine defines im laufe des Tages übernemen, bezüglich deiner options.h würde ich dich aber in Zukunft bitten ein wenig auf meine Dateinamen zu achten, denn jetzt haben wir einmal options.h und einmal Options.h ;-)
Ich werde meine Options.h mal umbenennen, da der Name für deine Datei vermutlich besser passt.
Ach ja, was mich noch etwas verwunder:
wofür sind die Knöpfe KEY_LEFT_CORNER und KEY_RECHTS_CORNER gut, und warum liegen die auf den selben Tasten wie X und Y?
 
Seddy said:
Ok, ich werde deine defines im laufe des Tages übernemen, bezüglich deiner options.h würde ich dich aber in Zukunft bitten ein wenig auf meine Dateinamen zu achten, denn jetzt haben wir einmal options.h und einmal Options.h ;-)
Ich werde meine Options.h mal umbenennen, da der Name für deine Datei vermutlich besser passt.

Sorry, aber die Klasse ist groß geschrieben. Im Grunde muss eben nur die Header nehmen die klein geschrieben ist ;)
Außerdem habe ich das auch in dem oberen Beispiel gemacht ;)

Ach ja, was mich noch etwas verwunder:
wofür sind die Knöpfe KEY_LEFT_CORNER und KEY_RECHTS_CORNER gut, und warum liegen die auf den selben Tasten wie X und Y?

Das ist natürlich quatsch und ich habe es gefixed.
Left Corner und right Corner sind die schultertasten.

PS: Bitte ladet nur kompilierbaren Code hoch ;)
 
Status
Not open for further replies.
Back
Top