JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=589f2577091ed6b7c310d1d8512a1b6cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Tutorial für ein Dos Quiz

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Tutorials
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
C++progging
Senior JLI'ler


Alter: 31
Anmeldedatum: 03.10.2005
Beiträge: 244
Wohnort: Sauerland
Medaillen: Keine

BeitragVerfasst am: 15.02.2006, 16:04    Titel: Tutorial für ein Dos Quiz Antworten mit Zitat

Hier verrate ich die Tipps und Tricks ,für jeden ,der ein eigenes Dos
Quiz schreiben will.

Es gibt kein Quiz ohne Fragen, und darum kümmern wir uns zuerst.
Wir brauchen erstmal eine Struktur für die Fragen und so sieht sie aus:
CPP:
struct Frage
{
    char* frage;//Hier werden die Fragen und die möglichen Antworten
                   //eingetippt
    char richtig;//werden wir gleich sehen ;)
};

Gut,jetzt werden wir die Arrays(=Felder) für die Fragen schreiben:
CPP:
Frage Frage1[3];
Frage Frage2[3];
//usw. es müßen nicht nur 2 Arrays zu 3 Fragen sein
//bei Wirst du Millionär 1.3 sind es 14 Arrays zu 10 Fragen(140 Fragen)

So gibt man die Fragen ein:
CPP:
Frage1[0].frage ="Frage?\na:Antwort1\nb:Antwort2\nc:Antwort3"
Frage1[0].richtig = 'a';

Wir werden gleich mit "if" prüfen,ob die Antwort richtig ist.
Zuerst schauen wir uns an, wie es aussieht ,wenn die Frage Angezeigt wird:


Frage?
a:Antwort1
b:Antwort2
c:Antwort3


So wird die Richtigkeit der Eingabe geprüft:
CPP:
if(Frage1[zufall].richtig == antwort)
{
    std::cout << "Richtig!" << endl;//endl ist wie \n,nur dass es nur bei std::cout klappt
}

else
{
    std::cout << "Falsch!" << endl;
}

Jetzt kommt das wichtigste:Der Zufall.
Erst muß diese Funktion geschrieben werden:
CPP:
//erst aber müßen folgende Lib includiert werden:
#include <time.h>
#include <stdlib.h>


//jetzt die Funktion:
int random(int minVal, int maxVal)
{
    return int(rand()/float(RAND_MAX)*(maxVal-minVal)+minVal);
}

Hier ein Beispielprogramm für den Zufall:
CPP:
#include <iostream>
#include <stdlib.h>
#include <time.h>
int random(int minVal, int maxVal);
//ein Feld
int Feld[3];
Feld[0] = 23;
Feld[1] = 223;
Feld[2] = 2223;
int main (int agrc,char* agrv[])
{
   srand( static_cast<unsigned> (time(NULL)) );//ganz wichtig!Immer vor dem ersten radom aufruf!
     int zufall = rand()%100;
    zufall = random(0,3);

    std::cout << Feld[zufall] << endl;
    return 0;
}

_________________
http://gtsp.gt.funpic.de
NEU: http://gtspforum.gt.funpic.de - das dazugehörige board
ProjectX for PSP - Jetzt runterladen!!
unter http://www.pspsource.de/news.php?extend.4537
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 15.02.2006, 16:40    Titel: Antworten mit Zitat

hi c++-progging

ich finde es ja gut, dass du stolz auf dein Programm bist, und uns diese Techniken beibringen willst; allerdings glaube ich, dass du dich da etwas zu hoch ansetzt. Dies hat u.A. folgende Gründe:

1. deine Idee mit der C++AG, naja, ich denke, da kann man sich sein eigenes Urteil bilden...
2. meiner meinung nach könnte sich hier (fast) jeder, der sich daran setzt, das auch so (bessser od. auch schlechter) machen. Dafür braucht eigentlich keiner ein Tutorial

Nichts für ungut; ich bewundere deinen Enthusiasmus, mit dem du daran gehst; allerdings (sieh das bitte eher als konstruktive Kritik / Warnung ) sind viele so vor gegangen wie du, und die haben genau so schnell wieder mit der ganzen Sache aufgehört weils zu langweilig wurde. Halte dich bitte in Zukunft etwas zurück, was diese Sachen angeht. Das soll allerding nicht heißen, dass du das jetz alles aufgeben sollst; sondern nur, dass du dich mit deinen persöhnlichen Erfolgen so wie wir im Hintergrund halten sollst. Natürlich kannst du deine neu entstandenen Projekte im Projektforum vorstellen, aber, ich denke du weißt was ich meine. Trotz alldem gibt es hier vllt. sogar wirklich den einen oder anderen, der dein Tutorial zur Kenntnis nimmt, um die "Hintergründe" von WdM zu verstehen.

Gruß DirectXer Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 15.02.2006, 16:56    Titel: Antworten mit Zitat

nur mal so eine Frage:

Muss es nicht
CPP:
std::cout << "irgendwas" << std::endl;

heißen?

nur endl klappt bei mir nicht.

bzw arbeitest du nicht mit VC++ 2005?
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 15.02.2006, 18:25    Titel: Antworten mit Zitat

naja, das Tutorial ist unvollständig Wink
Es zeigt nur wie du die Fragen speicherst und naja, we man ne Zufallszahl erzeugt.
Du solltest vielleicht wenigstens den ganzen Code beschreiben, oder besser noch ein Beispielprojekt hochladen, so das man es auch nachvolziehen kann. Dann wäre es noch praktisch, zu schreiben wie man meinetwegen die Fragen aus einer Datei lädt, was ja für die erweiterbarkeit besser ist. Außerdem solltest du std::string statt char* benutzen, das erspart dir ne Menge Arbeit.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
C++progging
Senior JLI'ler


Alter: 31
Anmeldedatum: 03.10.2005
Beiträge: 244
Wohnort: Sauerland
Medaillen: Keine

BeitragVerfasst am: 16.02.2006, 14:39    Titel: Antworten mit Zitat

Ein Beispiel:
CPP:
//Fragen.cpp
struct Frage
{
     char *frage;
     char richtig;
};
Frage Frage1[3];
Frage Frage2[3];

Frage1[0].frage ="Frage1,Nr.1 \na:A1\nb:A2\nc:A3";
Frage1[0].richtig = 'a';
Frage1[1].frage ="Frage1,Nr.2 \na:A1\nb:A2\nc:A3";
Frage1[1].richtig = 'b';
Frage1[2].frage ="Frage1,Nr.3 \na:A1\nb:A2\nc:A3";
Frage1[2].richtig = 'c';

Frage2[0].frage ="Frage2,Nr.1 \na:A1\nb:A2\nc:A3";
Frage2[0].richtig = 'a';
Frage2[1].frage ="Frage2,Nr.2 \na:A1\nb:A2\nc:A3";
Frage2[1].richtig = 'b';
Frage2[2].frage ="Frage2,Nr.3 \na:A1\nb:A2\nc:A3";
Frage2[2].richtig = 'c';

Nun das Hauptprogramm:
CPP:
//quiz.cpp
//Fragen.cpp muss auch eingebunden werden
#include <iostream>
#include <stdlib.h>
#include <time.h>
int random(int minVal, int maxVal);
char antwort;
 int main (int agrc,char* agrv[])
{
   srand( static_cast<unsigned> (time(NULL)) );//ganz wichtig!Immer vor dem ersten radom aufruf!
     int zufall = rand()%100;
    zufall = random(0,3);

    std::cout << Frage1[zufall].frage  << endl;
    std::cin >> antwort;
if(Frage1[zufall].richtig == antwort)
{
    std::cout << "Richtig!" << endl;
}

else
{
    std::cout << "Falsch!" << endl;
}

 
    zufall = random(0,3);

    std::cout << Frage2[zufall].frage  << endl;
    std::cin >> antwort;
if(Frage2[zufall].richtig == antwort)
{
    std::cout << "Richtig!" << endl;
}

else
{
    std::cout << "Falsch!" << endl;
}

 
    return 0;
 
}

Wer ein echtes Quiz haben will,muss den Code nur erweitern und
anpassen.Die Färbung bekommt man durch libs die
man hier bekommt:
http://ic.sidewindershome.net
man muss nur noch das PSDK runterladen,die Adresse ist unter
download angegeben
_________________
http://gtsp.gt.funpic.de
NEU: http://gtspforum.gt.funpic.de - das dazugehörige board
ProjectX for PSP - Jetzt runterladen!!
unter http://www.pspsource.de/news.php?extend.4537


Zuletzt bearbeitet von C++progging am 16.02.2006, 15:28, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 39
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 16.02.2006, 15:07    Titel: Antworten mit Zitat

Hi!

Code:

zufall = random(0,3);

    std::cout << Frage1[zufall].frage  << endl;
    std::cin >> antwort;
if(Frage1[zufall].richtig == antwort)
{
    std::cout << "Richtig!" << endl;//endl ist wie \n,nur dass es nur bei std::cout klappt
}

else
{
    std::cout << "Falsch!" << endl;
}



Machst du das für jede Frage??? Wink
Was mir so auffällt, irgendwie ist der Aufbau und die Struktur und alles nichso toll durchdacht! Smile

Aber immer weiter so, daraus lernt man!

grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dragon
Super JLI'ler


Alter: 38
Anmeldedatum: 24.05.2004
Beiträge: 340
Wohnort: Sachsen
Medaillen: Keine

BeitragVerfasst am: 16.02.2006, 18:07    Titel: Re: Tutorial für ein Dos Quiz Antworten mit Zitat

C++progging hat Folgendes geschrieben:

CPP:
#include <iostream>
#include <stdlib.h>
#include <time.h>
int random(int minVal, int maxVal);
//ein Feld
int Feld[3];
Feld[0] = 23;
Feld[1] = 223;
Feld[2] = 2223;
int main (int agrc,char* agrv[])
{
   srand( static_cast<unsigned> (time(NULL)) );//ganz wichtig!Immer vor dem ersten radom aufruf!
     int zufall = rand()%100;
    zufall = random(0,3);

    std::cout << Feld[zufall] << endl;
    return 0;
}

Kleiner Tipp: Das geht auch einfacher und ohne zusätzliche Funktion
CPP:
#include <iostream>
#include <stdlib.h>
#include <time.h>
int random(int minVal, int maxVal);
//ein Feld
int Feld[3];
Feld[0] = 23;
Feld[1] = 223;
Feld[2] = 2223;
int main (int agrc,char* agrv[])
{
   srand( static_cast<unsigned> (time(NULL)) );//ganz wichtig!Immer vor dem ersten radom aufruf!

     int zufall = rand()%100; // Warum machst du das eigentlich?

    zufall = rand()%4; // ist doch viel schneller und einfacher ;-)

    std::cout << Feld[zufall] << endl;
    return 0;
}


Es gibt noch viele Verbesserungs- und Optimierungsmöglichkeiten in deinem Quelltext. Ich würde die Struktur Frage ungefähr so machen

CPP:
struct Frage
{
    std::string frage;
    std::string antworten[4];
    int richtig;
};

_________________
Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kronos
Senior JLI'ler



Anmeldedatum: 19.03.2004
Beiträge: 290

Medaillen: Keine

BeitragVerfasst am: 16.02.2006, 19:52    Titel: Antworten mit Zitat

Ich kann mich DXer eigtl. nur anschließen.
Vielleicht hast du hier etwas zu hoch angesetzt, finde es aber trotzdem toll, wie du an die Sache heran gehst Wink. Wie DXer schon erläutert hatte..
Ich würde die Fragestruktur auch so aufbauen wie Dragon es vorgeschlagen hatte, aber am besten noch mit Konstruktor ala
CPP:
struct Frage {
    Frage(const char* _frage) { frage = _frage; } // nach belieben noch mit antworten
    std::string frage;
    std::string antworten[4];
    unsigned richtig;
}

_________________
David hat Folgendes geschrieben:
Solang meine Beiträge konstruktiver sind als deiner bin ich zufrieden...

Kein Kommentar notwendig. :rolleyes:
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 16.02.2006, 21:05    Titel: Antworten mit Zitat

hm, ne, imemr auf 4 Antworten zu beschränken ist auch nicht so toll finde ich. Man könnte auch aus der "richtig"-Variable einen String amchen, das man auch mal Namen oder so eingeben muss. Dann isses halt schwerer n 50:50 Joker zu machen, aber solange es dne eh net gibt Wink
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 33
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 17.02.2006, 13:27    Titel: Antworten mit Zitat

wenn man selber was eingeben muss, muss man aber immer genau auf die korrekte schreibweise achten weil wenn man nur einen buchstaben anders
hat die Lösung als falsch interpretiert wird.
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Tutorials Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum