Wiederholungs Probleme

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

Raiden93

BeitragSo, Apr 11, 2010 4:13
Antworten mit Zitat
Benutzer-Profile anzeigen
es ist klar das es kürzer ist aber so habe ich die Option die preise schnell zu ändern anstatt immer viel überlegen zu müssen.

Hubsi

BeitragSo, Apr 11, 2010 8:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Sache mit dem Array wie ich es schonmal vorschlug ist nichts?

Code: [AUSKLAPPEN]
upgrade_kosten(0)=25
upgrade_kosten(1)=50
upgrade_kosten(2)=100
upgrade_kosten(3)=250

goldmine=goldmine-upgrade_kosten(level)


Flexibel, einfach, kurz.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Starwar

BeitragSo, Apr 11, 2010 11:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Raiden93 hat Folgendes geschrieben:
es ist klar das es kürzer ist aber so habe ich die Option die preise schnell zu ändern anstatt immer viel überlegen zu müssen.

Tja, das tolle am Programmieren ist ja gerade, dass man üblerlegen muss, oder? Wink
So, dann mach mal die Mine Level 1-1200.
Viel Spaß beim Tippen. Wink
Die Formel hat auch den Vorteil, dass die Kosten für's nächste Level für den Spieler planbar sind.
Spiel ein wenig mit der Formel rum und du wirst sehen wie sie sich bei Änderung der Werte verhält.
Wenn dir das aber schon zu viel ist, sehe ich für deine Zukunft beim Programmieren schwarz (ATan2 Wink)
MFG

Raiden93

BeitragSo, Apr 11, 2010 12:53
Antworten mit Zitat
Benutzer-Profile anzeigen
ich werde erstmal das mit dem array nehmen aber werde mich auch mal mit der formel beschäftigen

Midimaster

BeitragSo, Apr 11, 2010 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
@starwar
jetzt wird aber aber persönlich Evil or Very Mad . Ich halte deine "formel" für überzogenen humbuck! Was, wenn er in Level 31 mal möchte, dass gar kein Gold nötig ist...

Ich war neulich beim Frauenhofer Institut zu Besuch zum Thema "Song-Erkennung" und die haben dort 12.000.000 Songvarianten lieber einzeln abgespeichert und vergleichen einen Testsong mit allen 12.000.000, als zu versuchen mit einem Algorhythmus die Ähnlichkeit zweier Songs zu beweisen.

Und Sibelius Notensatz setzt auf über 13.000 Spezial-Ausnahme-Reglen für ihr Notensatzprogramm, statt einen Algo zu finden der alles abdeckt.

Alle doof, oder was?


@Raiden93
mach so weiter, wie du es geplant hast. Eine Liste ist für deine Zwecke die geschickteste Lösung.
  • Zuletzt bearbeitet von Midimaster am So, Apr 11, 2010 13:47, insgesamt einmal bearbeitet

Raiden93

BeitragSo, Apr 11, 2010 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Das lustige an allem ist ja das ich eigendlich hauptsächlich nur wissen wollte ob ich das Gold über eine FUnction abziehen sollte da es bei Case 2 ins unendliche abzieht.

Eingeproggt

BeitragSo, Apr 11, 2010 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das Risiko eingehend hier die Klappe n bisserl zu weit aufzureißen aber die Formel ist und bleibt die beste und einfachste Lösung für genau dieses Problem.
Ich kenne mich mit Audioprogrammierung nicht so gut aus aber denk mir halt mal dass dort soooo viele Faktoren mitspielen dass bis jetzt einfach noch niemand den Aufwand eingegangen ist da ne allgemein gültige Vorschrift aufzustellen.
Wie dem auch sei... so ansteigende Kosten macht man mit ner simplen einzeiligen Formel.
Ich gehe sogar so weit, in einigen Fällen das Spieldesign etwas einzuschränen dass es für mich einfacher zu programmieren ist. Mal ehrlich... würdest du wirklich um in Level 31 abweichende Werte bieten zu können 31 mal Copy & Paste machen und dann die Werte überall manuell anpassen?
Und sollte das uuuuunbedingt nötig sein dann macht man die Formel und danach halt für ein oder 2 Sonderfälle extra If's...

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Thunder

BeitragSo, Apr 11, 2010 13:54
Antworten mit Zitat
Benutzer-Profile anzeigen
@Midimaster:

BlitzBasic: [AUSKLAPPEN]
goldabzug=25*2^(Goldminelvl-1)+Int(goldminelvl*0.15)*50*(Goldminelvl<31)
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Midimaster

BeitragSo, Apr 11, 2010 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Damit dir das Gold beim Wechsel von Level 1 nach Level 2 nur 1x abgezogen wird, brauchst Du einen Codeabschnitt, der weiss, dass er eben schon einmal aufgerufen wurde. Immer wenn Du das Level wechselst, stellt Du eine Variable LevelIstFertig% auf 1. Dadurch kann dann die Abzugs-Routine betreten werden, die sofort LevelIstFertig% wieder auf 0 zurücksetzt:

BlitzBasic: [AUSKLAPPEN]
If LevelIstFertig=1 Then

aktLevel = aktLevel+1

Gold=Gold-aktGold
Holz....

Select aktLevel
Case 1
aktGold=25
....
Case 2

Case ...

End Select

LevelIstFertig=0
EndIf

Text 140,25, "Gold: " + Aktgold
Text 140,40, "Holz: " + AktHolz
Text 140,55, "Stein: ".....


...dabei spielt es keine Rolle, ob Du die aktuellen Goldkosten in einer Variable aktGold% oder in einem Array upgrade_kosten(aktLevel) verwendest. Beides ist vergleichbar gut.

Raiden93

BeitragSo, Apr 11, 2010 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Midimaster hast mir gut geholfen jetzt Frage ich mich nur noch wie eich mache das wenn ich die Ressorcen nicht habe auch keine Upgrades machen kann.

mein code.
Code: [AUSKLAPPEN]

   If LevelFertig=1 Then
      
      aktLevel = aktLevel+1
      
      Gold=Gold-aktGold
      Holz=Holz-aktHolz
      Stein=Stein-aktStein
      
      Select aktLevel
         Case 2
            aktGold = 50
            aktStein = 50
            aktHolz = 50
            Goldminelvl = 2
         Case 3
            aktGold = 100
            aktStein = 100
            aktHolz = 100
            Goldminelvl = 3
      End Select
      
      LevelFertig=0
   EndIf

Starwar

BeitragSo, Apr 11, 2010 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
[EDIT]Dieser Thread wurde vor den Vorgänger angelegt und bezieht sich nicht darauf.[/EDIT]

Das war absolut nicht persönlich gemeint, Midi. Es war eher darauf bezogen, dass die Lösung mit der Formel mir an dieser Stelle sehr sinnvoll erscheint.
Raiden (bitte nicht persönlich nehmen, es kann ja auch sein, dass ich falsch liege) hat auf mich den Eindruck gehabt: "Das sieht kompliziert aus, also lass ich es" und das ist ja nicht das Wahre.
Man sieht in deinem Code schon "..." und das inst ein Problem. Der Code ist sehr starr und unflexibel.
Die Formel bietet da schon Vorteile.
Wenn man Ausnahmen festlegen möchte:
Code: [AUSKLAPPEN]
kosten = formel
If (lvl < 10) Then
    kosten=kosten/2 ;Kleine Minen kosten nur die Hälfte
Endif

Oder Über Select-Case-Default.

MFG

Raiden93

BeitragSo, Apr 11, 2010 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hää ich lese daraus das alles was unter lvl 10 ist das die kosten halbiert werden oder?

Starwar

BeitragSo, Apr 11, 2010 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
(Ich erlaube mir mal den Doppelpost, wenn er nicht gewünscht ist dann darf er gerne Zusammengefasst werden. Oder PN an micht Wink)

So, meine Idee (mit Select, hat Überwindung gekostet Wink)
BlitzBasic: [AUSKLAPPEN]
gold=2
holz=20
stein=20
aktLevel = 0

If klickAufUpgradeKnopf=1 Then
error=0
Select aktLevel+1
Case 1
KostenStein=2
KostenHolz=4
KostenGold=0
Case 2
KostenStein=6
KostenHolz=12
KostenGold=2
Default
error=1
End Select
If stein-KostenStein >= 0 And holz-KostenHolz >= 0 And Gold-KostenGold >=0 And error=0 Then
aktlevel=aktlevel+1
stein = stein - KostenStein
holz = holz - KostenHolz
gold = gold- KostenGold
Print "Upgrade auf Lvl "+aktlevel
Else
Print "Nicht genug Zeugs oder Höchste Stufe"
EndIf
klickAufUpgradeKnopf=0
EndIf


EDIT zu Raidens Bemerkung: Ja, das war als Beispiel gedacht wie man bei der Formel Ausnahmen implementieren kann.

Thunder

BeitragSo, Apr 11, 2010 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
@Raiden93:

Wenn du dir den Code anschaust, verstehst du vielleicht, wie ich es meine:

BlitzBasic: [AUSKLAPPEN]
Graphics 400,300,0,2
SetBuffer BackBuffer()

Global abholzlevel=1
Global holz#=0
Global timer=CreateTimer(60)

Repeat
Cls
holz=holz+0.05*abholzlevel
Color 255,255,255
Text 10,60,"Du hast "+Str(Int(holz))+" Holz."
Kosten()
If DrawButton("Upgrade",10,10,180,30) Then UpgradeAbholzen()
Flip 0
WaitTimer timer
Until KeyHit(1)
End

Function HolzFormel%()
Return ((abholzlevel-1)^2*12+25)
End Function

Function Kosten()
Color 255,255,255
Text 10,100,"Kosten für nächste Stufe: "+HolzFormel()+" Holz"
If Int(holz)<HolzFormel() Then
Text 10,120,"Du kannst noch nicht upgraden!"
Else
Text 10,120,"Du kannst schon upgraden!"
EndIf
End Function

Function UpgradeAbholzen()
If Int(holz)>=HolzFormel() Then
holz=holz-HolzFormel()
abholzlevel=abholzlevel+1
EndIf
End Function

Function MouseIn(x,y,w,h)
Return (MouseX()>=x) And (MouseX()<=x+w) And (MouseY()>=y) And (MouseY()<=y+h)
End Function

Function DrawButton(name$,x,y,w,h)
Local r%
If MouseIn(x,y,w,h) Then
Color 160,160,160
If MouseHit(1) Then r=1
Else
Color 100,100,100
EndIf
Rect x,y,w,h
Color 0,0,0
Text x+w/2,y+h/2,name,1,1
Return r
End Function

(Der Preis steht in einem quadratischen Zusammenhang zum Minenlevel - Mit jedem Minenlevel bekommt man das x-fache an Holz dazu)

Die Formel habe ich in einer Funktion gespeichert, da ich sie damit immer nur einmal überarbeiten muss.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Midimaster

BeitragSo, Apr 11, 2010 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
jetzt Frage ich mich nur noch wie eich mache das wenn ich die Ressorcen nicht habe auch keine Upgrades machen kann.


das hab ich jetzt nicht verstanden... was willst du damit sagen?

Ist das eine Code-technische Frage, oder fragst du nur, wie man im Spiel soetwas wie "neues Gold kaufen" einbauen könnte?

Thunder

BeitragSo, Apr 11, 2010 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
jetzt Frage ich mich nur noch wie eich mache das wenn ich die Ressorcen nicht habe auch keine Upgrades machen kann.


Ich glaube das sollte eigentlich so lauten:

Zitat:
Jetzt frage ich mich nur noch, wie ich es mache, dass wenn ich nicht genügend Ressourcen habe auch keine Upgrades kaufen kann.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group