Guten Abend.
Ich habe mich die letzten Tage mal hingesetzt und mit dem Buch »C++ Lernen und
professionell anwenden« gearbeitet, weil ich gemerkt habe, dass ich durch mehr
oder weniger planlosem drauf los Programmieren/Lernen nicht weit gekommen bin.
Zudem möchte ich mich gleichzeitigt mit dem für mich neuen C++11-Standard an-
freunden.
Diesmal soll der Ansatz ein anderer sein: Ich weiß, worauf ich hin lerne und
ich möchte mich (und meinen Code) verbessern.
Nun dachte ich mir, ich fange mit etwas einfachem an, was sich leicht erweitern
lässt. Ein Projekt, an dem ich wachsen kann.
Und sieh an, wenige Tage danach, hatte ich die Idee zu einem Vokabeltrainer.
Ich habe noch nichts konkretes gecodet und möchte euch erstmal meine Gedanken-
gänge und Pseudo-Code nahelegen um zu fragen, ob ich das ganze richtig angehe …
Von Projektdesign habe ich noch 0 Ahnung.
Zuerst habe ich mir im Groben überlegt, was er können soll. Dazu sind die
Funktionalitäten in 3 Prioritätsstufen gegliedert:
[1]muss,
[2]sollte,
[3]wäre nett wenn
- Vokabel-Datein speichern und laden. [2]
- Vokabel in 3 Sprachen/Unicode-Unterstützung [1]
- Einstellungen speichern und laden. [2]
- 3 Lernmodi anbieten:
- 2- und 3-Sprach-Vokabeltraining, [1]
- Sound-Datei für Vokabeln abspielen [2]
- Beispielsatz-Übersetzungstraining [2]
- Beispielsätze aussprechen [3]
- Bilder-Memorie. [3]
- Auf gemachte Fehlertypen hinweisen:
- Wortverwechslungen [1],
- Sprachenverwechslung [1],
- Zeichendreher [2],
- Wortähnlichkeitsanalyse [3],
- generelles (sprachbezogenes, nicht wortbezogenes)
Fehlerprotokoll merken [2] - GUI [3]
- Code-Kommentierung [1]
Nach diesen Überlegungen habe ich versucht mir zu überlegen,
wie ich das Codegerüst aufbauen will. Dabei kam folgendes heraus:
Multi-Threading für verschiedene Programmebenen:
A) Laden/Speichern, Resourcenmanagement, I/O
B) Programmlogik (Vokabeln raussuchen, zusammenstellen usw.)
C) Sounds abspielen, Rendern (bei Konsole nur für
Farbänderungen etc. zuständig – also unnötig?)
Klassenkonzept (nennt man das so?):
Code:
cGame
{
cLogicManager
cIOManager
cSoundAndRenderManager
}
cStringManager
{
std::vector<std::string> germanStrings;
std::vector<std::string> englishStrings;
std::vector<std::string> japaneseStrings;
std::vector<std::string&> curSentenc;
void typoCut(strings & ...); /* Zerlegt Strings in 60-75 char lange
Zeilen, sorgt für korrekte Leerzeichen
(schmale in deutschen Abkürzungen usw.,
Gedanken und Trennstriche gesondert)
*/
}
cLanguage
{
string& name;
void setNameL(languageID, std::string nameRef&);
std::vector<cWord> words;
std::vector<cSyntaxRule> rules;
}
cWord
{
string& nameG, nameE, nameJ;
int type; // predicate,subject, Object
int subtype; // word kinds like article
}
cSyntaxRule
{
static ID;
auto condition;// Funktionspointer
void setWordtypeSentencePos(int wType, enum{predicate,subject, Object}
}
Die wichtigsten 2 Fragen die sich mir (im Moment) stellen sind:
1) Soll ich erst die reinen Funktionalitäten (Wortanalyse, das Training an sich)
umsetzen und später die Klassen darum herum bauen, oder gleich alles in Klassen packen?
2) Gehe ich die cLanguage vielleicht schon zu feingliedrig an? (Mache ich leider gerne.)
Für eure Unterstützung wäre ich euch sehr dankbar. =)
Mit freundlichen Grüßen
Oparilames