Rechenprogramm zum üben mit Spielcharakter

Du hast eine Idee für ein Projekt?
Antworten
RichardeRicharde
User
Beiträge: 16
Registriert: Montag 29. November 2021, 14:37

Hallo Zusammen,

ich würde gern ein kleines Game entwickeln was die Malfolgen, also das kleine 1x1 übt.

Es soll mehrere Spielmodi geben:
  • üben
    es werden Aufgaben der geählten Reihe(n) trainiert
  • 1 Reihe auf Zeit
    eine vorausgewählte Reihe wird trainiert
    die Zeit in einer HighScore gespeichert
    die Aufgaben kommen im Zufallsprinzip
  • 2 Reihen auf Zeit
    eine vorausgewählte Reihe wird trainiert
    die Zeit in einer HighScore gespeichert
    die Aufgaben kommen im Zufallsprinzip
  • 3 Reihe auf Zeit
    eine vorausgewählte Reihe wird trainiert
    die Zeit in einer HighScore gespeichert
    die Aufgaben kommen im Zufallsprinzip
  • Zufallsmodus
    die Aufgaben kommen komplett zufällig heraus
    highscore
  • Levelmodus
    jeweils 10 Zufallsaufgaben müssen geschafft werden in Zeit X
    war man schnell genug und Fehlerfrei kommen neue Aufgaben in Zeit X-y Sekunden
    Highscore
Die Funktionen können und sollen noch erweitert werden, ich habe einige weitere Varianten im Kopf. Auch soll Multiplikation sowie Division möglich sein.

Im Hintergrund soll zudem ein Versteckter Algorithmus prüfen mit welchen Aufgaben sich ein Spieler besonders leicht tut und diese werden dann weniger häufig ausgegeben, somit wird der Lerneffekt auf "schwierige" Aufgaben verstärkt.

Meine Idee ist es zuerst mal die Methoden zu schreiben
  • in der Anhand von Zufallszahlen die Aufgaben gebildet werden
  • welche die Ausgabe aus und das Ergebnis aufnimmt
Ich bin gespannt wie sich dieses Projekt entwickln wird, werde hier immer mal wieder etwas Code reinschmeißen und bin über sämtlichen Input dankbar.

Viele Grüße
Richarde
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Mir ist nicht so ganz klar was die Punkte 2 bis 4 bedeuten sollen. Also wo da jeweils der Unterschied ist‽
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
RichardeRicharde
User
Beiträge: 16
Registriert: Montag 29. November 2021, 14:37

__blackjack__ hat geschrieben: Montag 29. November 2021, 17:26 Mir ist nicht so ganz klar was die Punkte 2 bis 4 bedeuten sollen. Also wo da jeweils der Unterschied ist‽
Der Unterschied ist ob ich mich vorab für eine Reihe zum üben, 2 Reihen zum üben oder 3 Reihen zum üben Eingrenze...

Für den Anfang reichen mir die Varianten
- Epic - 100 Aufgaben - jede Aufgabe des 1x1 wird genau 1x abgefragt, zufällige Reihenfolge
- Lernen - 30 Aufgaben aus einer Reihe (jede 3 mal) , zufällige Reihenfolge

Da ich das Spiel später gern erweitern möchte und mit den Daten der Spielergebnisse auf Schwächen eingehen will, muss ich die Daten irgendwie Speichern.

Zum einen möchte ich die Lösungszeit je Aufgabe Speichern, zum anderen natürlich für HiScore auch die Gesamtzeit.
Außerdem muss natürlich das Ergebnis gespeichert werden und falls es das für später einfacher macht auch gleich ob das Ergebnis richtig oder falsch ist.

Wie würdet Ihr die Daten Speichern?

Was ist in den Daten?
- Pro Spiel EPIC 100 Ergebnisse und Zeiten, zu jeder Aufgabe eine Zeit und Ergebnis - zugeordnet zu einem Spieleraccount mit Datum und Uhrzeit
- Pro Spiel "Lernen" 30 Ergebnisse und Zeiten einer Reihe, zu jeder Aufgabe 3 Zeiten und Ergebnisse - zugeordnet zu einem Spieleraccount mit Datum und Uhrzeit

Anforderung an die Daten:
- Ermittlung Durchschnittszeit pro Aufgabe je Spieleraccount muss möglich sein (nur richtige Ergebnisse berücksichtigen)
- Ermittlung Durchschnittszeit pro Aufgabe je Spieleraccount mit Datumseinschränkung (nur richtige Ergebnisse berücksichtigen)
- Ermittlung der Aufgaben welche Falsch gelöst wurden (Einschränkung über Datum ebenfalls Sinnvoll)
- Ermittlung der Aufgaben welche Zeit x für Lösung Überschreiten

Das wäre das wichtigste für jetzt.

Es soll, damit der Gamification-Faktor nicht zu kurz kommt, natürlich viele HiScores und Plots sowie Statistiken geben. Später soll noch eine Schwierigkeitsstufe 'unmenschlich' hinzu kommen - in der Hauptsächlich die Aufgaben gelöst werden müssen in denen der Spieler noch zu langsam oder zu schlecht ist - dabei werden dann wieder Ergebnisse gespeichert... es kommen dann also Zerpflückte Datensätze hinzu, die wiederum ein Einfluss auf Durchschnittszeiten im Zeitraum X haben was wiederum zu anderen Aufgaben beim nächsten Versuch führt. Im besten Fall verbessert man sich so recht gut im Kopfrechnen

Ich freue mich über eure Hilfe und hoffe eventuell den ein oder anderen (mit Kindern) für das Projekt zu begeistern.

VG Richarde
dirk009
User
Beiträge: 27
Registriert: Donnerstag 3. Juni 2021, 21:49

Hallo Richarde,

hier eine Beispielimplementierung, die eine Reihe abfragt:

Code: Alles auswählen

import random
import time

def aufgaben_training(reihe):
    print(f'\nDie Aufgaben der {reihe}-er Reihe sollen trainiert werden.')
    aufgaben = []
    for i in range(1,11):
        aufgaben.append((i, reihe, i*reihe))
    random.shuffle(aufgaben)

    prozent = 0
    start = time.time()
    for aufgabe in aufgaben:
        print(f'{aufgabe[0]} * {aufgabe[1]} = ', end=" ")
        ergebnis = input()
        if int(ergebnis) == aufgabe[2]:
            prozent = prozent + 10
            print("Richtig!")
        else:
            print("Falsch!")
    end = time.time()

    print(f"Es wurden {prozent}% in {round(end-start)} Sekunden erreicht.\n")

if __name__ == '__main__':
    print("Welche Zahlenreihe (1-er bis 10-er) soll trainiert werden? ")
    reihe = int(input())
    aufgaben_training(reihe)
Beispielausgabe:

Code: Alles auswählen

Welche Zahlenreihe (1-er bis 10-er) soll trainiert werden? 
1

Die Aufgaben der 1-er Reihe sollen trainiert werden.
3 * 1 =  3
Richtig!
10 * 1 =  10
Richtig!
1 * 1 =  1
Richtig!
8 * 1 =  8
Richtig!
7 * 1 =  7
Richtig!
5 * 1 =  4
Falsch!
2 * 1 =  2
Richtig!
9 * 1 =  9
Richtig!
4 * 1 =  4
Richtig!
6 * 1 =  6
Richtig!
Es wurden 90% in 27 Sekunden erreicht.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@dirk009: das Erstellen der `aufgaben` kann man einfach per List-Comprehension umsetzen.
Statt `prozent` zu berechnen, und damit vorauszusetzen, dass es immer exakt 10 Aufgaben gibt, ist unflexibel. Viel einfacher ist es, die Anzahl der richtige gelösten Aufgaben zu zählen.
`input` kann man einen Prompt übergeben, das `print` davor ist also überflüssig.
Statt `round` rundet man per Formatangabe.
Um Zeiträume zu messen, benutzt man time.monotonic.

Code: Alles auswählen

def aufgaben_training(reihe):
    print(f'\nDie Aufgaben der {reihe}-er Reihe sollen trainiert werden.')
    aufgaben = [
        (i, reihe)
        for i in range(1,11)
    ]
    random.shuffle(aufgaben)

    richtige_aufgaben = 0
    start = time.monotonic()
    for a, b in aufgaben:
        ergebnis = input(f'{a} * {b} = ')
        if int(ergebnis) == a * b:
            richtige_aufgaben += 1
            print("Richtig!")
        else:
            print("Falsch!")
    end = time.monotonic()
    print(f"Es wurden {richtige_aufgaben / len(aufgaben):.0%} in {end-start:.0f} Sekunden erreicht.\n")
Antworten