#ifndef Men�_H
#define Men�_H

#include <Knopf.h>
#include <Tabelle.h>
#include <Diagramm.h>
#include <AuswahlBox.h>
#include "Map.h"
#include <Rahmen.h>

using namespace Framework;

class Men�Verloren
{
private:
    LRahmen *ram;
    TextFeld *verloren;
    Knopf *neu;
    Knopf *beenden;
    int ref;

public:
    // Kontruktor
    Men�Verloren( Schrift *zSchrift );
    // Destruktor
    ~Men�Verloren();
    // nicht constant
    int doMausEreignis( MausEreignis &me );
    bool tick( double tickVal );
    void render( Bild &zRObj );
    // Reference Counting
    Men�Verloren *getThis();
    Men�Verloren *release();
};

class Men�Spiel
{
private:
    TextFeld *scoreT;
    Knopf *beenden;
    Map *map;
    Men�Verloren *verloren;
    double timePuffer;
    bool beendet;
    int ref;

public:
    // Konstruktor
    Men�Spiel( Schrift *zSchrift, Bildschirm *zScreen, KSGClient::MinigameServerClient *klient );
    // Destruktor
    ~Men�Spiel();
    // nicht constant
    void reset();
    void doMausEreignis( MausEreignis &me );
    void doTastaturEreignis( TastaturEreignis &te );
    bool tick( double tickVal );
    void render( Bild &zRObj );
    // constant
    bool istBeendet() const;
    // Reference Counting
    Men�Spiel *getThis();
    Men�Spiel *release();
};

class Men�Wiederhohlung
{
private:
    TextFeld *scoreT;
    Knopf *beenden;
    Map *map;
    Datei *datei;
    double nowTime;
    double nextTime;
    bool beendet;
    char tastenSt�nde;
    double timePuffer;
    int ref;

public:
    // Konstruktor
    Men�Wiederhohlung( Schrift *zSchrift, Bildschirm *zScreen, Datei *datei, Text *zOptionen );
    // Destruktor
    ~Men�Wiederhohlung();
    // nicht constant
    void doMausEreignis( MausEreignis &me );
    void doTastaturEreignis( TastaturEreignis &te );
    bool tick( double tickVal );
    void render( Bild &zRObj );
    // constant
    bool istBeendet() const;
    // Reference Counting
    Men�Wiederhohlung *getThis();
    Men�Wiederhohlung *release();
};

class Men�Statistik
{
private:
    TextFeld *ansichtT;
    AuswahlBox *ansicht;
    KontrollKnopf *optionen;
    ObjTabelle *gesammtT;
    ObjTabelle *optionenT;
    ObjTabelle *worldBestT;
    LDiag *gesammtD;
    LDiag *optionenD;
    Knopf *remove;
    Knopf *zur�ck;
    Schrift *schrift;
    TextRenderer *tr;
    KSGClient::MinigameServerClient *klient;
    Men�Wiederhohlung *wiederH;
    Bildschirm *screen;
    bool asyncFinished;
    bool beendet;
    int ref = 1;

public:
    // Konstruktor
    Men�Statistik( Schrift *zSchrift, Bildschirm *zScreen, KSGClient::MinigameServerClient *klient );
    // Destruktor
    ~Men�Statistik();
    // nicht constant
    void reset();
    void doMausEreignis( MausEreignis &me );
    bool tick( double tickVal );
    void render( Bild &zRObj );
    // constant
    bool istBeendet() const;
    bool istWiederhohlung() const;
    // Reference Counting
    Men�Statistik *getThis();
    Men�Statistik *release();
};

class Men�Optionen
{
private:
    TextFeld *breiteT;
    TextFeld *breite;
    TextFeld *h�heT;
    TextFeld *h�he;
    TextFeld *aGr��eT;
    TextFeld *aGr��e;
    TextFeld *timerT;
    TextFeld *timer;
    TextFeld *shipT;
    AuswahlBox *ship;
    KontrollKnopf *autoKam;
    KontrollKnopf *fortsetzen;
    Knopf *abbrechen;
    Knopf *ok;
    bool beendet;
    int ref;

public:
    // Konstruktor
    Men�Optionen( Schrift *zSchrift, Bildschirm *zScreen );
    // Destruktor
    ~Men�Optionen();
    // nicht constant
    void reset();
    void doMausEreignis( MausEreignis &me );
    void doTastaturEreignis( TastaturEreignis &te );
    bool tick( double tickVal );
    void render( Bild &zRObj );
    // constant
    bool istBeendet() const;
    // Reference Counting
    Men�Optionen *getThis();
    Men�Optionen *release();
};

class Men�
{
private:
    Knopf *spielen;
    Men�Spiel *spielenF;
    Knopf *optionen;
    Men�Optionen *optionenF;
    Knopf *statistik;
    Men�Statistik *statistikF;
    Knopf *beenden;
    Bild *hintergrund;
    LRahmen *ram;
    bool beendet;
    int status;
    int ref;

public:
    // Konstruktor
    Men�( Schrift *zSchrift, Bildschirm *zScreen, KSGClient::MinigameServerClient *klient );
    // Destruktor
    ~Men�();
    // nicht constant
    void reset();
    void doMausEreignis( MausEreignis &me );
    void doTastaturEreignis( TastaturEreignis &te );
    bool tick( double z );
    void render( Bild &zRObj );
    // constant
    bool istBeendet() const;
    // Reference Counting
    Men� *getThis();
    Men� *release();
};

#endif