Mathematische Grundlagen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

g0lfdrivingl3o

Betreff: Mathematische Grundlagen

BeitragDi, Okt 29, 2013 1:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

klingt zwar blöd aber kann man mir mal bitte jemand den Code für mathematische Grundlagen wie Addition, Subtraktion und Multiplikation erklären? Ich möchte in einem Spiel ein Verkaufssystem einbauen und brauche das dafür..

Ich füge hier mal noch nachträglich den Code dazu ein, damit es besser nachvollziehbar wird:
Code: [AUSKLAPPEN]

;Gemüseanzeige
Locate 400,420
Write "M: " Write AnzahlMOH$ ;DIESER WERT SOLL MIT DEM UNTEN EINGEGEBENEN ADDIERT WERDEN
Write "K: " Write AnzahlKAR$ ;DIESER WERT SOLL MIT DEM UNTEN EINGEGEBENEN ADDIERT WERDEN

;Punkteanzeige
Locate 550,420
Color 100,100,100
Write "Punkte: " Write Punkte$

;############ H U D #################;

Color 500,500,500
Locate 10,20
Write "Kartoffeln: " Write PreisKAR

Locate 10,40
Write "Möhren: " Write PreisMOH

Locate 200,20
KaufKAR$ = Input$ ("Wieviele Kartoffeln? :")


Locate 200,40
KaufMOH$ = Input$ ("Wieviele Möhren? :")


While Not KeyHit(1)
If KeyDown(2) Then Goto farm1
Wend


Außerdem soll der Stückpreis(Festpreis) dann noch mit der Anzahl multipliziert werden und von dem "Vermögenswert" abgezogen werden..

Danke Wink
Der Phaeton. Einzigartig wie ein Kunstwerk.

Tennisball

BeitragDi, Okt 29, 2013 2:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Vielleicht hast du ja schon versucht, deine Eingaben (Strings) mit Integern oder mit anderen Strings zu multiplizieren. Dann müsstest du auf die Fehlermeldung "Operator cannot be applied to strings" gestoßen sein. Das bedeutet, dass du deine Eingabe erst zu Integer (Int) oder Float (Float) casten musst, bevor du damit 'rechnen' kannst.

Beispiel:
BlitzBasic: [AUSKLAPPEN]
Local qtyCarrots% = Int( Input("Wie viele Karotten moechtest du kaufen? ") )
Print( "Das macht dann " + ( qtyCarrots * 2 ) + " Taler bitte." )


Außerdem solltest du dir überlegen von Print und co. auf Text und co. umzusteigen, falls du etwas mehr planst als nur die Ausgabe von ein paar Strings. Erstens wird damit der Code viel übersichtlicher, da du für jede Textausgabe nur eine Zeile anstatt zwei brauchst. Und zweitens wird während Input das Programm komplett angehalten. Das bedeutet, dass dein Programm nichts anderes machen kann, bis der Benutzer seine Eingabe bestätigt.

Gruß,
Tennisball

Midimaster

BeitragDi, Okt 29, 2013 10:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenn es um Preise geht, würde ich immer in "Cents" rechnen: Alle deine Variablen werden INTEGER, also Ganzzahlen ohne Komma. Ein EUR wird also besser als 100 Cent betrachtet! "2,34 EUR" verarbeitest Du besser als 234.

Das Addieren, Subtrahieren und Multiplizieren ist dann kein Problem. z.B. der Kauf von Karotten:

BlitzBasic: [AUSKLAPPEN]

Global VorratKarotten%=100, PreisKarotten%=119
Global MeinGeld%=10000, MeineKarotten%=0

KaufeKarotten(33)
Print "Du hast noch " + GeldString(MeinGeld)

Function KaufeKarotten (Anzahl%)
Kosten% = Anzahl * PreisKarotten
VorratKarotten = VorratKarotten - Anzahl
MeinGeld = MeinGeld - Kosten
MeineKarotten = MeineKarotten + Anzahl

Print " Dieser Kauf kostet " + GeldString(Kosten)
End Function


Sobald Du Geld darstellen willst, zerlegst Du den Wert in die hinteren beiden Stellen (Cents) und den vorderen Rest:

BlitzBasic: [AUSKLAPPEN]
 Print "Karotten kosten heute " + GeldString(PreisKarotten)

Function GeldString$(Wert%)
Geld$=Int(Wert/100) + "." + (Wert Mod 100) + " EUR"
Return Geld
End Function



An Deiner Stelle würde ich abgeschlossene Vorgänge immer gleich in Funktionen einschließen. Dann bleibt Dein Code übersichtlich und bedienbar.

Schau mal auf meine drei Tutorials. Das dürfte genau zu Deinem Thema passen:

1. Variablen addieren:
https://www.blitzforum.de/foru...hp?t=33456

hier die Kapitel I, II, III und vielleicht noch IV



2. Functionen benutzen:
https://www.blitzforum.de/foru...hp?t=33468

hier die Kapitel I und II



3. Typische Spielschleifen:
https://www.blitzforum.de/foru...hp?t=33468

hier die Kapitel I, II, III und vielleicht noch IV


Und noch ein letzter Tipp: Geh es "klein" an. Bau erst mal den Code für das Kaufen von Karotten komplett zu einenm lauffähigen Spiel fertig: "Das Karottenkauf-Spiel. Der Spieler kann nur solange Karotten kaufen, wie sein Geld und der Vorrat reicht."

Wenn das mal läuft, kannst du einen zweiten Artikel dazunehmen. Dabei wirst Du auf neue Probleme stossen. Im "Karotten- und Kartoffel-Spiel" kann der User frei wählen was er als nächstes kauft"

Erst in einem dritten Schritt würde ich es auf beliebige viele Gemüsesorten erweitern. Auch hier wirst Du mit ganz neuen Problemen konfrontiert werden.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
  • Zuletzt bearbeitet von Midimaster am Di, Okt 29, 2013 10:49, insgesamt 4-mal bearbeitet

DAK

BeitragDi, Okt 29, 2013 10:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Natürlich sollte dann auch der Variablentyp von AnzahlMOH$ und AnzahlKAR$ nicht String ($) sonder Integer (%) sein.

@Dem was Midimaster gesagt hat:
Der Grund dafür ist, wenn du Floats (Gleitkommazahlen) verwendest, werden die sehr ungenau, wenn sie groß werden. Das heißt, z.B. für 100€ hast du eine Genauigkeit von 0.1 ct (Werte aus der Luft gegriffen zwecks Beispiel. Wie viel es wirklich ist, weiß ich grad nicht), für 100000€ aber nur 1€, was heißt, dass die Centwerte wegfallen.

Wenn man was Genaues will, sollte man deswegen Integer verwenden, da die immer die gleiche Genauigkeit haben (dafür geringere Minimal- und Maximalwerte als Float).
Gewinner der 6. und der 68. BlitzCodeCompo

Midimaster

BeitragDi, Okt 29, 2013 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Ungenauigkeit der Float-Variablen ist nicht der einzige Grund. Bei Beträgen wie "1.35" läßt sich relativ leicht ein String "1.35 EUR" erzeugen, der auch nach einem Geldbetrag aussieht.

Bei "1.30" oder "1.00 " wird es schon unschön: Hier würde bei Floats dann plötzlich "1.3 EUR" bzw. "1 EUR " angezeigt.

Teilst Du einen Betrag wie "4.35" durch 2 hast Du bei INTEGER nachher "2.17 EUR" stehen. Bei Float aber "2.175 EUR".

Um sowas zu vermeinden müsste zusätzliche Funktionen schreiben. Mit INTEGER haste deutlich weniger Arbeit.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group