BPS #20: Kopfrechnen-Spiel - Auswertung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Xeres

Moderator

Betreff: BPS #20: Kopfrechnen-Spiel - Auswertung

BeitragSo, Mai 27, 2012 10:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Das war die Aufgabe

Postet hier eure Ergebnisse, Codes, Gedanken. Lernt von den anderen, seht euch deren Quelltext an und versucht euren eigenen zu verbessern.

Diskussion
Postet zu euren Codes stets eine kurze Erklärung mit euren Gedanken in denen ihr simpel gesagt die Frage "Wieso habe ich XY auf diese Art gelöst?" beantwortet. Beiträge, die nur den Code enthalten werden wir aus dem Thread entfernen.

Nächste Aufgabe
In einer Woche wird die Musterlösung nach editiert und in 2 die nächste Aufgabe eingestellt.

Viel Spaß & viel Erfolg!

Musterlösung:
BlitzBasic: [AUSKLAPPEN]
; BPS: Holzchopf - Kopfrechnen-Spiel

; Eine mögliche Lösung ist, dem Benutzer fix 10 Aufgaben zu stellen.
; Eine richtige Antwort gibt Pluspunkte, eine falsche Punkteabzug,
; die Punkte sind dabei abhängig von der Zeit, die fürs Beantworten
; benötigt wurde.
; Dazu wird beim Eröffnen der Frage die Zeit genommen, ebenso zum
; Zeitpunkt der Eingabe (Eingabe = Beantworten der Frage, unabhängig
; davon, ob etwas sinnvolles oder überhaupt etwas eingegeben wurde),
; die Zeiten werden dann subtrahiert und man erhält so die benötigte
; Zeit für die Aufgabe.
; Um nun etwas damit anfangen zu können, wird pro aufgabe eine Zeit
; vorgegeben. Kommt die richtige Antwort bevor die Richtzeit durch
; ist, ist der Punktezuschlag höher, nach der einfachen Formel:
; Punktezuschlag = Richtzeit - Benötigte Zeit
; Um dabei nicht Punkteabzug für eine richtige, aber zu langsam be-
; antwortete Frage zu kriegen, wird der Punktezuschlag auf ein mini-
; mum angehoben, sollte dieser darunter liegen.
; Der Punkteabzug für falsche Antworten errechnet sich ähnlich:
; Punkteabzug = Benötigte Zeit
; Hierbei gibts keine Limite. Braucht der Benutzer eine Minute, um
; auf ein falsches Resultat zu kommen, ist das nun mal weniger gut,
; als in einer Sekunde die selbe falsche Antwort zu geben.
; Die Vorgabezeit ist unabhängig von der Art der Rechnung immer
; gleich. Egal ob Addition, Subtraktion, Multiplikation oder Divi-
; sion.
; Die Richtzeit ist durch die Konstante TIME_PER_TURN und der mini-
; male Punktezuschlag durch MIN_SCORE festgelegt.

SeedRnd MilliSecs()

; Richtzeit pro Rechung in ms
Const TIME_PER_TURN = 10000
; Mindestpunktezuschlag für eine richtige Antwort
Const MIN_SCORE = 1000
; Rechnungen pro Spiel
Const TURNS_PER_GAME = 10

Local score ; Punktestand
Local turn ; Frage
; einfache Hauptschleife
While Not KeyHit(1)
Cls
; Eröffnungsbild anzeigen
If turn=0
Locate 0,0
Print
Color 255,255,0
Print "Willkommen zum Kopfrechnen-Spiel!"
Print
Color 255,255,255
Print "Anschliessend werden dir "+TURNS_PER_GAME+" Rechenaufgaben"
Print "gestellt. Für eine richtige Antwort erhälst du"
Print "Punkte, abhängig davon wie schnell du warst. Eine"
Print "falsche Antwort führt jedoch zu Punkteabzug."
Print
Print "Drücke eine Taste, um das Spiel zu starten."
WaitKey()
turn = 1
; Gameover-Bild anzeigen
ElseIf turn>TURNS_PER_GAME
Locate 0,0
Print
Color 255,255,0
Print "Das Spiel ist um."
Print
Color 255,255,255
Print "Du hast "+score+" Punkte erreicht."
Print
Print "Drücke eine Taste, um nochmal zu spielen."
WaitKey()
turn = 1
score = 0
; Fragen anzeigen
Else
Locate 0,0
Print
Color 255,255,0
Print "Aufgabe "+turn
turn = turn +1
Print
Color 255,255,255
; Startzeit merken
Local startTime = MilliSecs()
; Aufgabe generieren
Local v1,v2,result
Local op=Rand(1,100)
; Addition
If op<=50
v1 = Rand(1,100)
v2 = Rand(1,100)
result = v1+v2
Print v1+"+"+v2+"=?"
; Subtraktion
ElseIf op<=75
v1 = Rand(1,100)
v2 = Rand(1,100)
result = v1-v2
Print v1+"-"+v2+"=?"
; Multiplikation
ElseIf op<=90
v1 = Rand(1,10)
v2 = Rand(1,20)
result = v1*v2
Print v1+"*"+v2+"=?"
; Division
Else
v1 = Rand(1,10)
v2 = Rand(1,20)
result = v1*v2
Print v1+"*?="+result
result = v2
EndIf
Print
; Eingabe speichern
Local in$ = Input("Eingabe:")
Print
; Endzeit (nach Input) merken
Local endTime = MilliSecs()
Local time = endTime-startTime
; eingegebenen Text als Zahl speichern
Local inVal = in
; Resultat prüfen
Local addscore
If inVal=result ; richtig
; Punktezuschlag
addscore = TIME_PER_TURN-time
; Mindespunkte anrechnen
If addscore<MIN_SCORE Then addscore=MIN_SCORE
Color 0,255,0
Print "Richtig!"
Print "Du erhälst "+addscore+" Punkte"
Print
Print
Else ; falsch
addscore = -time
Color 255,0,0
Print "Falsch."
Print "Das gibt "+Abs(addscore)+" Punkte Abzug"
Print
Color 255,255,255
Print "Richtig wäre: "+result
EndIf
score = score +addscore
Print "Punktestand: "+score
Delay 3000
FlushKeys
EndIf
Wend
End
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group