Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Anregungen » Noch so ne Anregung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
24.07.2003, 13:05 Uhr
Oliver
S2-Pixelgeneral


@virtual

Man könnte ja vielleicht jedem Member bestimmte Anzahl an Punkten geben (das müsste irgendein Moderator oder Adminstrator machen).
In dieses "Forum" darf dann nur der was reinschreiben, der eine bestimmte Anzahl an Punkten hat.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
24.07.2003, 13:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


So ein Votingsystem gibt es im Forum, nur diese ist nicht "so" toll implementiert.
Außerdem kann ja jeder in den entsprechenden Foren Quellcodes dokumentiert posten, welche wir dann ggf in die FAQ-Foren verschieben.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
27.07.2003, 11:43 Uhr
Oliver
S2-Pixelgeneral


Ja, warum einfach, wenns umständlich geht

Es sollt ja kein richtiges FAQ Forum sein, das habe ich ja schon gesagt.
Ich meine zum Beispiel so eine Klasse:


C++:

// Headerdatei für Highscorlisten

#ifndef schaltera
#define schaltera
#include <fstream>
#endif
#ifndef schalterb
#define schalterb
#include <cstring>
#endif
using namespace std;

#define uchar unsigned char
#define ushort unsigned short
#define ulong unsigned long

#define LH_NOTFOUND 0
#define LH_OK       1
#define LH_ERROR    2

struct Eintrag
{
    char* name;
    int punkte;
};

void Code(char*str)
{
    unsigned len=strlen(str);
    for(unsigned i =0;i<len;i++)
        str[i]=str[i]*-1;
}

class HListe
{
    ulong anzahl;
    Eintrag *eintrag;

public:

    HListe()
    {
        anzahl=0;
        eintrag=0;
    }

    HListe(const ulong &anz,const char* DEFAULT)
    {
        anzahl=anz;
        eintrag = new Eintrag[anzahl];
        for(unsigned d =0;d<anzahl;d++)
        {
            eintrag[d].name = new char[strlen(DEFAULT)+1];
            strcpy(eintrag[d].name,DEFAULT);
            eintrag[d].punkte=0;
        }
    }

    HListe(HListe &vorh)
    {
        anzahl = vorh.GetSpalten();
        eintrag = new Eintrag[anzahl];
        for(unsigned d =0;d<anzahl;d++)
        {
            eintrag[d].name = new char[strlen(vorh.GetName(d))+1];
            strcpy(eintrag[d].name,vorh.GetName(d));
            eintrag[d].punkte = vorh.GetPunkte(d);
        }
    }

    ~HListe(){
        for(unsigned i=0;i<anzahl;i++)
            if(eintrag[i].name) delete [] eintrag[i].name;
        if(eintrag)delete []eintrag;}

    char* GetName(const ulong &index)
    {
        if(index <0|| index >anzahl) return "<<FEHLER>>";
        return eintrag[index].name;
    }

    int GetPunkte(const ulong &index)
    {
        if(index <0|| index >anzahl) return 0;
        return eintrag[index].punkte;
    }

    ulong GetSpalten() {return anzahl;}


    ulong GetPlatz(const int &PUNKTE)
    {
        for(ulong r = 0; r<anzahl;r++)
        {
            if(PUNKTE > eintrag[r].punkte)
                return r+1;
        }
        return 0;
    }

    void Add(const char*nam, const int &PUNKTE)
    {
        ulong platz;
        for(platz =0;; platz++)
        {
            if(eintrag[platz].punkte < PUNKTE)break;
            if(platz == anzahl-1) return;

        }
      
        for(ulong h = anzahl-1;h !=platz;h--)
        {
            if(eintrag[h].name)
                delete [] eintrag[h].name;
            eintrag[h].name = new char[strlen(eintrag[h-1].name)+1];
            strcpy(eintrag[h].name,eintrag[h-1].name);
            eintrag[h].punkte=eintrag[h-1].punkte;
        }
        if(eintrag[platz].name) delete [] eintrag[platz].name;
        eintrag[platz].name=new char[strlen(nam)+1];
        strcpy(eintrag[platz].name,nam);
        eintrag[platz].punkte = PUNKTE;
    }



    void Save(const char *name)
    {

        ofstream of;
        char*zwisch=0;
        of.open(name,ios::out);
        of << anzahl*2<<"\n";
        for(unsigned i =0;i<anzahl;i++)
        {
        of << int(strlen(eintrag[i].name)*-2)<<"\n";
        if(zwisch)delete [] zwisch;
        zwisch=new char[strlen(eintrag[i].name)+1];
        strcpy(zwisch,eintrag[i].name);
        Code(zwisch);
        of << zwisch<<"\n"<<eintrag[i].punkte*-2<<"\n";
        }
        of << anzahl << " " << (anzahl+3)*2;

        of.close();
    }

    char Load(const char*name)
    {
        int lengen;
        int gleiche, gleiche2;
        ifstream ifs;
        ifs.open(name,ios::in);
        if(!ifs.good()){ifs.close(); return LH_NOTFOUND;}
        this->~HListe();
        ifs >> anzahl;
        anzahl/=2;
        eintrag = new Eintrag[anzahl];
        for(unsigned i = 0;i<anzahl;i++)
        {
            ifs >> lengen; lengen*=-2;
            eintrag[i].name = new char[lengen+1];
            ifs >> eintrag[i].name;
            ifs >> eintrag[i].punkte;
            eintrag[i].punkte/=-2;
            for(;lengen>0;lengen--)
                eintrag[i].name[lengen-1]*=-1;
        }
        ifs >> gleiche>>gleiche2;
        if(gleiche!=anzahl||gleiche!=(gleiche2/2-3)||anzahl!=(gleiche2/2-3)) return LH_ERROR;

        for(i=0;i<anzahl-1;i++)
            if(eintrag[i].punkte<eintrag[i+1].punkte){ifs.close(); return LH_ERROR;}
        ifs.close();
        return LH_OK;
    }

    HListe &operator=(HListe &vorh)
    {
        this->~HListe();
        anzahl=vorh.GetSpalten();
        eintrag= new Eintrag[anzahl];
        for(unsigned i =0;i<anzahl;i++)
        {
            eintrag[i].name = new char[strlen(vorh.GetName(i))+1];
            strcpy(eintrag[i].name,vorh.GetName(i));
            eintrag[i].punkte=vorh.GetPunkte(i);
        }
        return *this;
    }

    unsigned GetVorhanden(const char * NAME)
    {
        ulong wieviel=0;
        for(ulong z =0;z<anzahl;z++)
        {
            if(!strcmp(NAME,eintrag[z].name))
                wieviel++;
        }
        return wieviel;
    }

    short Prozent(const char*NAME)
    {

        return ((GetVorhanden(NAME) / (float)anzahl *100));
    }


    
    
};






Eine Umfrage:

entweder:

oder:


PS: Der Code ist jetzt nicht so schön formatiert.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
27.07.2003, 11:54 Uhr
Oliver
S2-Pixelgeneral


So und jetzt könnte man noch eine kleine Dokumentation schreiben, so in der Art:

___________________________________
Load(...); // Liste laden
Save(...); // Liste speichern
GetSpalten(...); // Spaltenanzahl
GetName(...); // Name auslesen
GetPunkte(...); // Punkte auslesen
GetVorhanden(...); // wie oft ist ein Name in der Liste vorhanden
Prozent(...); // Wie oft ist ein Name vorhanden in Prozent
Add(...); // neuen Eintrag
operator=(...);// Zuweisung
GetPlatz(...); // welchen Platz würde er belegen, wenn er sich einträgt?
___________________________________

Das kann man natürlich auch ausführlicher machen...
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
27.07.2003, 12:09 Uhr
0xdeadbeef
Gott
(Operator)



Ich bleib lieber bei

C++:
#include <list>


Das ist irgendwie kürzer
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
27.07.2003, 12:11 Uhr
Oliver
S2-Pixelgeneral


Ich mein jetzt das Forum, das eben war nur ein Beispiel, wie ein Beitrag in diesem Forum aussehen könnte...
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
27.07.2003, 13:54 Uhr
Oliver
S2-Pixelgeneral


Dann in eine Headerdatei speichern.

Da brauchst du auch nur zu schreiben:


C++:
#include <hliste.h>





--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
27.07.2003, 14:08 Uhr
virtual
Sexiest Bit alive
(Operator)


Das FAQ Forum hat den Nachteil, daß man pro post nur 8KB posten kann. Da ich es gewohnt bin, in den Headern von dem Quellcode schon eine Doxygen compatible Inlinedou unterzubrignen, sind 8KB auch bei kleinen Klassen schnell erreicht. Ich denke eine Grenze auf 50-70 KB wäre in einem solchen Fall schon eher angebracht
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 27.07.2003 um 14:09 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
27.07.2003, 14:08 Uhr
0xdeadbeef
Gott
(Operator)


Schon klar. Und wenn ich das Ding auf unicode umstellen will, darf ich die ganze Klasse nochmal schreiben, was?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
27.07.2003, 14:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


vielleicht bau ich in das forum eine "pro-forum-größen-beschränkung" ein, also das man für jedes Forum einstellen kann wie groß max ein post sein darf...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ Anregungen ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: