Länderhauptstädte Quiz



  • also..bis jetzt habich mal sowas:

    #include <stdio.h>

    int main()
    {
    int Punktezahl1;
    int antwortstart1;
    int antwort1;

    printf("(Begrüssung und Einleitung)");
    printf("Spiel starten? (Y oder N) ");
    scanf("%i",&antwortstart1);

    if (antwortstart1==Y)
    {
    printf("Wie heisst die Hauptstadt von Italien?");
    prinftf("(A) Rom, (B) Bern, (C) london");
    scanf("%i",&antwort1);
    getchar();
    if (antwort1==A);
    {
    Punktezahl1++;
    }

    }
    else
    {
    }
    }

    return 0;
    }

    komm nicht weiter und blicks auch nicht so mehr.. 😞



  • Hallo

    Also ich würde c++ nehmen (persönliche Meinung) oder irgendwas mit.net, wenn du eine ordentlich GUI haben willst, aber das dürfte erstmal etwas viel sein. Warum machst du jetz nicht erstmal mit den anderen Ländern weiter? Desweiteren solltest du dir überlegen, ob du die Namen hardcoden willst oder nicht lieber eine txt-datei mit den Namen ausliest. Dazu solltest du dir mal fstream für c++ oder file für c anschauen.

    chrische



  • könntest du mir nicht schnell das programm schreiben, etwa indiesem styl wie ich bereits geschrieben habe?...
    es genügt wen du es mit einer frage bis zum schluss machst..
    das erweitern auf 20 fragen ist kein problem.das machich selber. den rest jedoch, kannich nicht programmieren. z.b das mit den 10 Sekunden Countdown.

    Wäre sehr froh.



  • den rest jedoch, kannich nicht programmieren.

    Dann ist diese Aufgabe wohl nichts für dich. Sag das deinem Auftraggeber. In Anbetracht deiner Bereitschaft, das selbst zu schaffen (irgendwo in der Nähe von Null), ist das wohl die einzige Möglichkeit.

    Natürlich kannst du auch jemanden dafür bezahlen, dass er deine Arbeit macht. Mach doch mal ein Angebot.





  • ich bin gerade dabei die sprache zu lernen. habe erst seit 2-3 monaten programmieren in der schule.

    ich will es aber selber in di hand nehmen.

    mein gröstes problem bei dieser aufgabe ist es mit dem counter. ich würde gerne erfahren, wie man 10 sekunden einstellt für eine frage.

    aber bessser wäre es schon natürlich.wen ich di ganze programmieraufgabe in text format hätte. so kan ich mich sicher sein,dasich es richtig mache bzw. falsch.



  • Hallo

    Du kannst doch nicht erwarten, dass das einfach jemand für dich macht, ohne das du ihn dafür bezahlst. Du hast doch schon gute Anfänge, also mache da weiter. Wenn du die erste Frage schaffst, dann wird das mit den nächsten 19 doch auch kein Problem sein. Die Frage der Zeit würde ich an deiner Stelle erstmal hinten anstellen und den Anfang fertig bekommen. Bei konkreten Fragen wird dir hier gerne geholfen, aber ein einfaches code hinlegen, wird es nicht geben.

    chrische



  • dj_rr schrieb:

    mein gröstes problem bei dieser aufgabe ist es mit dem counter. ich würde gerne erfahren, wie man 10 sekunden einstellt für eine frage.

    Meine Empfehlung: Lass den Countdown erst mal weg, und sieh zu, dass der Rest funktioniert. Der Countdown ist mit Standardmitteln sowieso nicht machbar.

    aber bessser wäre es schon natürlich.wen ich di ganze programmieraufgabe in text format hätte. so kan ich mich sicher sein,dasich es richtig mache bzw. falsch.

    Jaja 🙄



  • für nen counter z.b. das hier: http://cppreference.com/stddate/difftime.html



  • ja. der rest ist auch kein problem.. die 19 fragen sind natürlich funktionieren schlisslich gleich wie die einte frage. jedoch möchte ich nur mal mit dieser frage das ganze anstellen. dann kann ich locker mit 19 fragen weiterarbeiten. das problem ist, ich komm nicht weiter mit den countdown von 10 sekunden. wie mache ich das den?



  • weisst du, das problem ist, dass so ein satz wie eben folgendermaßen rüberkommt:

    "programmier mir die komplette methode für den ersten fall, dann kopier ich es 19 mal und tausch die städte aus."

    oder sinngemäß übertragen auf ein anderes thema:

    "mach mir mal die mathehausaufgaben, ich schreib sie dann ab."



  • dj_rr schrieb:

    jedoch möchte ich nur mal mit dieser frage das ganze anstellen. dann kann ich locker mit 19 fragen weiterarbeiten.

    Ja dann schreib das doch mal für eine Frage. Dass du eine Schleife drumherum packen kannst, die das ganze 20x macht, glaube ich dir so gerade eben.

    das problem ist, ich komm nicht weiter mit den countdown von 10 sekunden. wie mache ich das den?

    Ich habe das Gefühl, ich rede mit einer Wand.



  • Hallo

    C++ (C) und time und du bekommst viele Treffer bei einer realtiv unbekannten underground Suchmaschine namens google. Man denkt doch mal etwas mit.

    chrische



  • c countdown tuts auch....



  • Ich habe hier mal nen alten Code rausgekramp...vielleicht hilft der ja...ist allerdings C++. Verbesserungen erwünscht^^:

    #include <conio.h> //getch()
    #include <iostream>
    #include <fstream> //Datei
    #include <string>  
    #include "windows.h"  //FlushConsole...  
    
    using namespace std;
    
    #define ANT 4          //ANTWORTEN PRO FRAGE - 3 Antworten...4 Ist Platzhalter für richtige Antwort
    #define Fragen_ANZ 999 //Anzahl der MAximalen Fragen in der Datei...999 sollte reichen ;)
    //TXT File
    string Fragen = "fragen.txt";               //Datei mit gespeicherten Fragen
    
    //Language
    char OpenError[] = "Fehler beim \x94 \bffnen der Fragen!\n";
    char PressKey[] = "Bitte eine Taste zum Fortfahren dr\x81 \bcken";
    char Correct[] = "RICHTIG!!!";
    char Wrong[] = "Leider Falsch";
    char Input[] = "Bitte Antworten: ";
    char Points[] = "Du hast soviel Fragen korrekt beantwortet: ";
    
    inline void P_Key()                             //Funktion für Tastendruck
    {
        FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
        getch();
    }
    
    inline string Parse(string str,string *ret) //Frage rausfiltern
    {
         short int x = 0;
         short int y = -1;              //Fragenzähler
         short int answer = -1;
         string newstr;
         string buffer;
         char *xxx;
    
         do
         {
             if(str[x] == '|') //Wenn | dann wurde entweder die Frage oder eine antwort eingelesen
             {  
                       y++;    
             }
    
             if(y < 0)         //Solange y < 0 wird Frage eingelesen
             {
                  newstr += str[x];
    
             }  
             else
             {
                  if(str[x] != '|' && str[x] != '$') //Kein | und $ in die Frage lesen
                      ret[y] += str[x]; 
                  if(str[x] == '$')                 //Wenn $ = Korrekte Antowrt in Element 4 Speichern
                            ret[3] = (char)y+48+1;
             }             
    
             x++;         
         }while(x < str.length());
    
         return newstr;  
    }
    
    int main(int argc, char *argv[])
    {
        ifstream read;                               //Objekt zum Lesen der Datei
        read.open(Fragen.c_str(),ios_base::in);      //Datei Öffnen
    
        string content[Fragen_ANZ];                 
        string antworten[ANT];
        string Antwort;
    
        int Punkte = 0;
    
        if(!read)                                    //Wenn Nicht zu öffnen, dann ende
        {
            cout << OpenError << PressKey;
            P_Key();                                 //Auf Tastaturschlag warten
            return -1 ;    
        }
        else
        {
            int x = 0;
            while (read.good())                      //Fragen ins Array einlesen
            {
                  getline(read,content[x],'\n');
    
                  cout << Parse(content[x],antworten);
                  cout << "\n[1] " << antworten[0];
                  cout << "\n[2] " << antworten[1];
                  cout << "\n[3] " << antworten[2];
                  cout << "\n\n" << Input << "\n";
                  cin >> Antwort;
    
            if(Antwort == antworten[3])
            {
                       cout << "\n\n" << Correct << "\n\n";
                       Punkte += 1;
            }
            else
                       cout << "\n\n" << Wrong << "\n\n";
    
                  x++;
                      //Antworten Löschen um Platz für die nächsten zu machen ;)
                  for(int i = 0; i < ANT;i++)
                          antworten[i] = "";
            }
        }
    
        cout << Points << Punkte;
        P_Key();
        return 0;
    }
    

    Hier noch eine kleine Erklärung:

    Die Fragen und Antworten werden aus Fragen.txt eingelesen
    Mittels der Funktion *inline string Parse(string str,string ret) ordentlich abgespeichert.

    D.H. in der Rückgabe wird die Aktuelle Frage gespeichert und im ret Array die Antworten. Dabei ist im 4 Element die Korrekte Nr des Antwort-elements(+1) gespeichert(String Format).

    So und die Textdatei sollte so aussehen z.B.:

    Was ist die Hauptstadt von Italien?|Berlin|Bonn|Rom$
    Wie gross ist 1 byte?|14bit|8bit$|66bit
    Was war am 11.September 2001|WTC-Anschlag$|Dein Geb.|Armageddon
    

    Pro Zeile eine Frage + Antworten.
    Frage|1.Antwort|2.Antwort|3.Antwort usw...
    Hinter der korrekten Antwort kommt ein $

    Ich weiß, da geht noch einiges 😉 Z.B. Könnte man gleich alles in 1 Array einlesen etc...den code habe ich vor längerer Zeit mal gechrieben und eben ein bissl auskommentiert 🙂

    Wegen dem Counter. Mit den Time funktionen kannst Du locker sowas einbauen. Wenn du willst, dass das Ding auch noch angezeigt wird, dann brauchst du z.B.
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cur) der WinAPI
    Aber cin wird dann nicht mehr funzen.

    Grüsse 🙂



  • Der code oben hat noch einen Fatalen schönheitsfehler, probier den:

    #include <conio.h> //getch()
    #include <iostream>
    #include <fstream> //Datei
    #include <string>  
    #include "windows.h"  //FlushConsole...  
    
    using namespace std;
    
    #define ANT 4          //ANTWORTEN PRO FRAGE - 3 Antworten...4 Ist Platzhalter für richtige Antwort
    //TXT File
    string Fragen = "fragen.txt";               //Datei mit gespeicherten Fragen
    
    //Language
    char OpenError[] = "Fehler beim \x94 \bffnen der Fragen!\n";
    char PressKey[] = "Bitte eine Taste zum Fortfahren dr\x81 \bcken";
    char Correct[] = "RICHTIG!!!";
    char Wrong[] = "Leider Falsch";
    char Input[] = "Bitte Antworten: ";
    char Points[] = "Du hast soviel Fragen korrekt beantwortet: ";
    
    inline void P_Key()                             //Funktion für Tastendruck
    {
        FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
        getch();
    }
    
    inline string Parse(string str,string *ret) //Frage rausfiltern
    {
         short int x = 0;
         short int y = -1;              //Fragenzähler
         short int answer = -1;
         string newstr;
         string buffer;
         char *xxx;
    
         do
         {
             if(str[x] == '|') //Wenn | dann wurde entweder die Frage oder eine antwort eingelesen
             {  
                       y++;    
             }
    
             if(y < 0)         //Solange y < 0 wird Frage eingelesen
             {
                  newstr += str[x];
    
             }  
             else
             {
                  if(str[x] != '|' && str[x] != '$') //Kein | und $ in die Frage lesen
                      ret[y] += str[x]; 
                  if(str[x] == '$')                 //Wenn $ = Korrekte Antowrt im letzten Element Speichern
                            ret[ANT-4] = (char)y+48+1;
             }             
    
             x++;         
         }while(x < str.length());
    
         return newstr;  
    }
    
    int main(int argc, char *argv[])
    {
        ifstream read;                               //Objekt zum Lesen der Datei
        read.open(Fragen.c_str(),ios_base::in);      //Datei Öffnen
    
        string content;                 
        string antworten[ANT];
        string Antwort;
    
        int Punkte = 0;
    
        if(!read)                                    //Wenn Nicht zu öffnen, dann ende
        {
            cout << OpenError << PressKey;
            P_Key();                                 //Auf Tastaturschlag warten
            return -1 ;    
        }
        else
        {
            int x = 0;
            while (read.good())                      //Fragen ins Array einlesen
            {
                  getline(read,content,'\n');
    
                  cout << Parse(content,antworten);
                  cout << "\n[1] " << antworten[0];
                  cout << "\n[2] " << antworten[1];
                  cout << "\n[3] " << antworten[2];
                  cout << "\n[4] " << antworten[3];
                  cout << "\n\n" << Input << "\n";
                  cin >> Antwort;
    
            if(Antwort == antworten[3])
            {
                       cout << "\n\n" << Correct << "\n\n";
                       Punkte += 1;
            }
            else
                       cout << "\n\n" << Wrong << "\n\n";
    
                  x++;
                      //Antworten Löschen um Platz für die nächsten zu machen ;)
                  for(int i = 0; i < ANT;i++)
                          antworten[i] = "";
            }
        }
    
        cout << Points << Punkte;
        P_Key();
        return 0;
    }
    

    Grüsse



  • Für den countdown brauchst du eine andere Methode Werte einzulesen. Das normale cin wartet bis man was eingegeben hat (ich wüste nicht, dass es einen Timeout hat). Du musst aber eine Schleife verwenden in der ein Tastendruck abgefragt wird und zwar so, dass nicht gewartet wird, wenn keine Taste gedrückt wurde. Dann kannst du in der Eingabeschleife auch die Zeit runterzählen und dann beenden, wenn man zu lang braucht.

    Nein, ich schreib dir keinen Code dazu. Das ganze geht sowieso nicht mit dem Standard und du musst dich erst mal entscheiden, welche zusätzliche API du verwenden willst.



  • Für sowas würde ich sagen, dass GetAsyncKeyState das richtige ist 🙂

    Grüsse


Anmelden zum Antworten