Eigenes Projekt · Station 7 von 10

Karteikarten

Eine Lernkarten-App: Vorderseite, Rückseite, richtig oder falsch, und Karten, die man nicht kann, kommen öfter dran.

Karteikarten

Ziel

Ein Werkzeug zum Lernen bauen, das sich merkt, welche Karten schon sitzen.

Umsetzung

  • Karten mit Vorder- und Rückseite, sortiert in Kategorien. Ein Tipp auf die Karte dreht sie um.
  • Jede Karte hat Punkte: „Falsch“ erhöht sie, „Richtig“ senkt sie, und die nächste Karte wird nach diesen Punkten gewichtet gezogen.
  • Startseite mit Kategorien und die Lernansicht; Bearbeiten und Einstellungen sind noch in Arbeit. Die Daten liegen in SQLite.
  • Die Oberfläche habe ich später überarbeitet: ein einheitliches Farbschema für helles und dunkles Windows, Kacheln für die Kategorien und eine große Lernkarte.

Code

Karten nach Punkten gewichtet ziehen

DatabaseService.cs
public async Task<Card?> GetRandomCardAsync(int categoryId)
{
    var cards = await _db.Table<Card>()
        .Where(c => c.CategoryId == categoryId)
        .ToListAsync();

    if (cards.Count == 0)
        return null;

    int totalWeight = cards.Sum(c => c.Points);

    if (totalWeight == 0)
        return cards[new Random().Next(cards.Count)];

    int randomValue = new Random().Next(0, totalWeight);
    int cumulative = 0;

    foreach (var card in cards)
    {
        cumulative += card.Points;
        if (randomValue < cumulative)
            return card;
    }

    return cards.Last();
}

Je mehr Punkte eine Karte hat, desto wahrscheinlicher kommt sie als Nächste dran.

Was ich gelernt habe

Ein Datenmodell mit Tabellen und Beziehungen in einer App zu verwenden. Die Lernlogik durfte dabei ruhig einfach anfangen.

Es ist ein unerwarteter Fehler aufgetreten. Neu laden 🗙

Verbindung wird wiederhergestellt …

Verbindung fehlgeschlagen. Nächster Versuch in Sekunden.

Verbindung fehlgeschlagen. Bitte erneut versuchen oder die Seite neu laden.

Die Sitzung wurde vom Server pausiert.

Die Sitzung konnte nicht fortgesetzt werden. Bitte erneut versuchen oder die Seite neu laden.