Wie soll es weiter gehen .... ?



  • Hallo,
    ich bin 15 Jahre alt (werde bald 16 :D) und habe alle Grundlagen in C++ duchgenommen. Jetzt weiß ich aber nicht wie es weiter gehen soll immerhin glaube ich nicht das man mit meinem Wissen ein tolles Programm schrieben kann :(, obwohl ich alle Grundlagen systematisch durchgearbeitet habe. Jetzt wolle ich euch mal fregen, wie ich weiter machen soll? Soll ich jetzt erstnoch die Grundlagen beschäftigen (alle header´s durchnehmen die bei meinem buch dabei sind), oder soll ich erst was grafisches machen = OpenGL, Direkt3D (wenn ich was grafisches machen soll, dan aber nur OpenGL und sofort 3d und nicht erst was mit einem ach so tollen engine wie allegro z.B., sonder rein OpenGL - WILL AUSSERDEM PLATFORUNABHÄNGIB PROGRAMMIEREN). Eine weiter möglichkeit wäre es, wenn ich mich mit Datanbanken beschäftige (nur leider kenne ich keine plattformunabhängigen, die nicht so problemlos sind ...), ausserdem wäre es noch toll was mit ner GUI zu machen (damit mann nicht mehr mit der Konsole arbeiten muss ... die sieht nämlich nicht sehr professionell aus. Noch eine sache die ich machen könnte: Asembler lernen, nur bräuchte ich da großen beistandt von euch 😃

    Also, kann mir jemand sagen, was ich jetzt machen soll??

    Danke im vorraus.



  • Ach, .... noch eine idee wäre es, wenn ich was halbgrafisches machen würde ... z.B. ist das sowas, womit man eine Stormkurfe zeigen kan.......



  • Hast Du denn auch schon was programmiert?!
    Oder nur THEORETISCHE Grundlagen?!

    Mit lesen allein ist es nicht getan.

    Dann schreib' erstmal ein paar Programme.

    Für Datenbanken vielleicht mal www.mysql.org anschauen. Falls Du leichtgewichtigeres willst für den Anfang: www.sqlite.org.

    Grafik-Toolkits?! Mal die FAQ durchstöbern. Z.B. wxwidgets, GTK, GTKmm, QT, ... sind plattformunabhängig.



  • ja, ich weiß wie man was grafisches usw. macht, darum geht es mir aber auch garnicht. Ich weiß wies geht, nur weiß ich nicht womit ich anfangen soll ......



  • wenn du bisher wirklich nur "durchgelernt" hast, dann musst du erstmal ANFANGEN ZU PROGRAMMIEREN. Das ist das Allerwichtigste. GUIs, Datenbanken, OpenGL & Co sparst du dir besser fuer spaeter auf, sobald du wirklich gut programmieren kannst. Aber um ueberhaupt mal soweit zu kommen, musst du moeglichst viel Code schreiben: ganz egal ob's jetzt die Uebungsaufgaben aus deinem C++ buch sind, Aufgaben die du dir von anderen Leuten holst, kleine Tools die du dir selbst ausdenkst......

    Du musst dafuer auch gar nicht gross noch irgendwas lernen, du kannst sowas schon:
    du koenntest ein Tic-Tac-Toe auf der Konsole schreiben, oder Schiffe versenken. Neulich hab ich ein Schachprogramm gesehen (GNU Chess, eines der bekanntesten Schachprogramme ueberhaupt) die nur auf der Konsole arbeiten.... dafuer brauchst du keine GUI, keine Datenbanken, nada... Oder denk dir selbst was aus. Ich hab vor kurzem mal ein Programm geschrieben, dass mir alle doppelten MP3s sucht, die ich auf der HD hab. Auch das laesst sich mit deinem Wissensstand bewerkstelligen. Aber du musst vor allem programmieren, programmieren, programmieren 🙂



  • TIC _ Tac - TOE hört sich doch interessant an ... aber 1. Wie soll man das Feld und die spielsteine darstellen? 2. Wie soll man "sagen" wo man sein nächsten stein hinsetzten will?

    Das programm muss ja einfach nur versuchen eine 3 reihezu bilden und verhindern, dass der gegner das selbe tut, oder?



  • ich was schrieb:

    ... aber 1. Wie soll man das Feld und die spielsteine darstellen? 2. Wie soll man "sagen" wo man sein nächsten stein hinsetzten will?...

    Siehst du mal, nachdem du die Grundlagen von C++ gelernt hast, fängst du
    jeeetzt in diesem Moment, zum ersten mal an auch zu programmieren(=denken).
    😃 😉 😃



  • ich was schrieb:

    TIC _ Tac - TOE hört sich doch interessant an ... aber 1. Wie soll man das Feld und die spielsteine darstellen? 2. Wie soll man "sagen" wo man sein nächsten stein hinsetzten will?

    Das programm muss ja einfach nur versuchen eine 3 reihezu bilden und verhindern, dass der gegner das selbe tut, oder?

    1. einfach ASCII-Ausgabe auf der Konsole
    2. numerier die Felder durch und lies eine Zahl von der Konsole ein

    Kapsel die Ein/Ausgabe in eigene Funktionen/Klassen, dann kannste die auch später austauschen und grafisch machen. Implementier den Spieler als eigene Klasse, laß sowohl den Menschlichen Spieler, als auch den KI-Spieler davon erben. Dann kann Dein Programm gleich viel mehr: Human vs. Human, aber auch Human vs. KI und KI vs. KI

    Mach Dir bei der KI erst große Gedanken, wenn Du schon was hast. Für den Anfang reicht es völlig zufällig zu setzen. Später vielleicht wenigstens gegnerische 3er Blocken. Und wenn alles fertig ist kannste was ausgeklügelteres nehmen.

    Das wichtigste überhaupt ist, daß Du anfängst.



  • ich was schrieb:

    TIC _ Tac - TOE hört sich doch interessant an ... aber 1. Wie soll man das Feld und die spielsteine darstellen? 2. Wie soll man "sagen" wo man sein nächsten stein hinsetzten will?

    Das programm muss ja einfach nur versuchen eine 3 reihezu bilden und verhindern, dass der gegner das selbe tut, oder?

    *g* Willkommen in der Welt der Programmierung 😃 Ich glaub du erkennst jetzt so langsam, worums dabei wirklich geht 🙂

    Aussehen koennte das Ganze z. B. so:
    http://bluetiger.bauchlandung.org/img/coding/blueTicTacToe.jpg
    (Screenshot aus dem TicTacToe, das ich vor Jahren mal geschrieben hab 😉 )



  • So ein programm würd ich mit ncurses machen.
    Kannst dazu ja mal im web was suchen.

    Weiter oben schreibst du du willst plattformunabhänig programmieren, dass geht damit aber leider nicht!

    Ich würd am Anfang aber sowieso erstmal was kleines auf der konsole machen, und da wirds erstmal egal sein ob des plattformunabhänig ist



  • Danke. Ihr seid ja alle voll nett ... wenn ich ein guten nick gefunden habe, werde ich mich mal anmelden 🙂

    Also in der schule habe ich mir mal paar gedanken gemacht und ich weiß schon mehr oder weniger wie ich das amchen:

    So soll das Feld aussehen:
    Die / sollen eigentlich solche grade linien sein (Strg + Alt + < >) aber unter Linux kann ich die nicht da darstellen 😞 )

    A / B / C /
    +---+---+---+
    1 / / / / Felder 1,2,3
    +---+---+---+
    2 / / / / Felder 4,5,6
    +---+---+---+
    3 / / / / Felder 7,8,9
    +---+---+---+

    so, jedes Feld soll jetzt eine Variable bekommen (unsigned float): A1, A2, A3, B1, B2, B3, C1, C2, C3, ... oder auch einfach nur Feld[8] oder Feld[2][2], aber ich werde mal ersteres nehmen.

    So ein code habe ich auch schon (ich wette ihr werdet grinsen, aber das ist auch mein "erst programmierter code" ... also seid rücksichtsvoll 😃 - is ausserdem ein "low-Level code):

    [cpp]
    #include <stdio.h>

    zugabfrage(extern char nzug) {
    ..............
    }
    int setztezug(extern char nzug) {

    ...........

    printf(" A / B / C /");
    printf(" +----+----+----+");
    printf(" 1 / %f / %f / %f /",A1,B1,C1);
    printf(" +----+----+----+");
    printf(" 2 / %f / %f / %f /",A2,B2,C2);
    printf(" +----+----+----+");
    printf(" 3 / %f / %f / %f /",A3,B3,C3);
    printf(" +----+----+----+");

    ................
    }

    int KI(bool xodero) {
    ..............
    }

    int main() {
    char janein, nzug; // janein frag immer ob man noch eine runde spielen will ; nzug speichert den nächsten zug
    unsigned float wahl,schleife=9.0,A1,A2,A3,B1,B2,B3,C1,C2,C3 // wahl ´sagt´ wer gegen wen spielt,
    int punkte // ja, was wohl ...

    printf ("Gegen wen wollen Sie Spielen?:\n 1. Human vs. Human\n 2. Human vs. KI\n 3. KI vs. KI");
    scanf ("%f",&wahl); // ist das & richtig, oder zeigt es jetzt auf ein Speicher?
    // "pointer" haben mich durcheinander gebracht 😃

    switch(wahl) {
    case 1:
    while(schleife != 0) {
    int zugabfrage(extern char nzug); // fragt immer den spieler ab (nzug) ... wir brauche noch eine bool variabel, //damit man jetzt weil ob O oder X dran ist.
    int setztezug(extern char nzug); // setzt diesen zug dan auch ... muss dan auch die bool variable bekommen.
    break;
    }

    case 2:
    while(schleife != 0) {
    int zugabfrage(extern char nzug); // fragt immer den spieler ab (nzug) ... wir brauche noch eine bool variabel, //damit man jetzt weil ob O oder X dran ist.
    int setztezug(extern char nzug); // setzt diesen zug dan auch ... muss dan auch die bool variable bekommen.
    int KI(bool /*bekommt auch noch eine bool abfrage, die schau ob die zahl gleich null ist, wenn ja wird die funktion KI() und das 2te setztezug nicht ausgeführt+/);
    int setztezug(extern char nzug);
    break;
    }

    case 3:
    while(schleife != 0) {
    int KI(extern char nzug); // setzt diesen zug dan auch ... muss dan auch die bool variable bekommen.
    int setztezug(extern char nzug);
    break;
    }

    default:
    printf ("ungültige option");
    return 1;
    }



  • Sorry ... hier noch einmal mit richtig gesetzten code tags ... das andere kann gelöscht werden

    Danke. Ihr seid ja alle voll nett ... wenn ich ein guten nick gefunden habe, werde ich mich mal anmelden 🙂

    Also in der schule habe ich mir mal paar gedanken gemacht und ich weiß schon mehr oder weniger wie ich das amchen:

    So soll das Feld aussehen:
    Die / sollen eigentlich solche grade linien sein (Strg + Alt + < >) aber unter Linux kann ich die nicht da darstellen 😞 )

    A / B / C /
    +---+---+---+
    1 / / / / Felder 1,2,3
    +---+---+---+
    2 / / / / Felder 4,5,6
    +---+---+---+
    3 / / / / Felder 7,8,9
    +---+---+---+

    so, jedes Feld soll jetzt eine Variable bekommen (unsigned float): A1, A2, A3, B1, B2, B3, C1, C2, C3, ... oder auch einfach nur Feld[8] oder Feld[2][2], aber ich werde mal ersteres nehmen.

    So ein code habe ich auch schon (ich wette ihr werdet grinsen, aber das ist auch mein "erst programmierter code" ... also seid rücksichtsvoll 😃 - is ausserdem ein "low-Level code):

    #include <stdio.h>
    
    zugabfrage(extern char nzug) {
    ..............
    }
    int setztezug(extern char nzug) {
    
    ...........
    
    printf("      A /  B / C  /");   
    printf("   +----+----+----+");
    printf(" 1 / %f / %f / %f /",A1,B1,C1);
    printf("   +----+----+----+");
    printf(" 2 / %f / %f / %f /",A2,B2,C2);
    printf("   +----+----+----+");
    printf(" 3 / %f / %f / %f /",A3,B3,C3);      
    printf("   +----+----+----+");
    
    ................
    } 
    
    int KI(bool xodero) {
    ..............
    }
    
    int main() {
    char janein, nzug; // janein frag immer ob man noch eine runde spielen will ; nzug speichert den nächsten zug
    unsigned float wahl,schleife=9.0,A1,A2,A3,B1,B2,B3,C1,C2,C3  // wahl ´sagt´ wer gegen wen spielt, 
    int punkte // ja, was wohl ...
    
    printf ("Gegen wen wollen Sie Spielen?:\n 1. Human vs. Human\n 2. Human vs. KI\n 3. KI vs. KI");
    scanf ("%f",&wahl); // ist das & richtig, oder zeigt es jetzt auf ein Speicher? 
                        // "pointer" haben mich durcheinander gebracht :D
    
    switch(wahl) {
    case 1:
    while(schleife != 0) {
    int zugabfrage(extern char nzug); // fragt immer den spieler ab (nzug) ... wir brauche noch eine bool variabel, //damit man jetzt weil ob O oder X dran ist.
    int setztezug(extern char nzug);   // setzt diesen zug dan auch ... muss dan auch die bool variable bekommen. 
    break;
    }
    
    case 2:
    while(schleife != 0) {
    int zugabfrage(extern char nzug); // fragt immer den spieler ab (nzug) ... wir brauche noch eine bool variabel, //damit man jetzt weil ob O oder X dran ist.
    int setztezug(extern char nzug);   // setzt diesen zug dan auch ... muss dan auch die bool variable bekommen. 
    int KI(bool /*bekommt auch noch eine bool abfrage, die schau ob die zahl gleich null ist, wenn ja wird die funktion KI() und das 2te setztezug nicht ausgeführt+/);
    int setztezug(extern char nzug);
    break;
    }
    
    case 3:
    while(schleife != 0) {
    int KI(extern char nzug);   // setzt diesen zug dan auch ... muss dan auch die bool variable bekommen. 
    int setztezug(extern char nzug);
    break;
    }
    
    default:
    printf ("ungültige option");
    return 1;
    }
    


  • man bin ich blöd 🙂 ... ich habe ja ganz vergessen euch fragen zu stellen 😃

    1. Wie erstellt man zufallszahlen? jaja, mit rand, aber wie macht man das genau? etwa so:

    rand = variable;
    

    ????
    und was für ein header brauche ich dafür? math.h ?
    2. Wie kann man eine funktion dazu "bringen nochmal zu starten"??? Mit return 1; ???



  • Gut, bei der ersten farge hat mir die Bordsuche geholfen 😃
    int iZufallsZahl = rand()%9; in #include <cstdlib> ... das ist doch so richtig, oder?



  • Wetten du wirst nie mehr eine antwort von den anderen bekommen? Du hast zuviel gepostet ... ide checken das nicht



  • kenner des forums schrieb:

    Wetten du wirst nie mehr eine antwort von den anderen bekommen? Du hast zuviel gepostet ... ide checken das nicht

    haha und genau deswegen werde ich posten 😛

    Und eine Funktion kann sich selbst nochmal aufrufen. Du musst nur drauf achten, dass du keine Endlosschleife daraus bastelst.

    void blub()
    {
       static bool again = true;
    
       if (again)
       {
          blub();
          again = false;
       }
       else
          again = true;
    }
    

    Keine Ahnung, ob das so stimmt 😛 habs mir grad schnell ausgedacht. Die sollte sich immer nochmal ein Mal ausführen, wenn du sie aufrufst.



  • und genau jetzt hast du imho eine Endlosschleife geschaffen 😃
    da bei dem zweiten Aufruf eine neue lokale Variaqble again erstellt wird, in dieser steht dann wieder true also wird die Funktion nicht enden.
    Um den fehler zu korrigieren müsstest du die variable again mit übergeben 😉



  • Kann man das nicht mir goto machen? also mein genaues problem ist folgender: Wenn man eine Falscheingabe macht, soll die funktion nochmal widerholt werden, aber das ganze soll in der funktion selber passieren. Meint ihr ich soll nochmal ein topic im C forum erstellen?



  • Hotblack* schrieb:

    und genau jetzt hast du imho eine Endlosschleife geschaffen 😃
    da bei dem zweiten Aufruf eine neue lokale Variaqble again erstellt wird, in dieser steht dann wieder true also wird die Funktion nicht enden.
    Um den fehler zu korrigieren müsstest du die variable again mit übergeben 😉

    nein, sie ist static, sie wird nur einmal erstellt



  • was nun? schrieb:

    Kann man das nicht mir goto machen? also mein genaues problem ist folgender: Wenn man eine Falscheingabe macht, soll die funktion nochmal widerholt werden, aber das ganze soll in der funktion selber passieren. Meint ihr ich soll nochmal ein topic im C forum erstellen?

    Nein, erstens: NIEMALS gotos....

    zweitens:

    std::string eingabe;
    bool validInput = false;
    
    do
    {
    cout << "Eingabe: " << flush;
    cin >> eingabe;
    
    if (eingabe entspricht korrekter Eingabe)
       validInput = true;
    
    } while (!validInput);
    

Anmelden zum Antworten