Einmaliger Durchlauf Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Raiden93

Betreff: Einmaliger Durchlauf Problem

BeitragFr, Aug 27, 2010 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ich mache gerade ein Spiel was einem Browsergame ähnelt .Hat man genug Gold kann man seine Goldmine ausbauen.Das Problem was ich jetzt aber habe ist folgendes.

Ich kriege es nicht gebacken das das Gold nur 1 mal abgezogen wird.Jede Sekunde werden 1000Gold abgezogen es soll aber nur 1 mal abgezogen werden aber weis nicht wie ich das realisieren soll ich habe mir schon das Buch Hack'n'Play - Spiele programmieren gekauft und teils gelesen aber finde keine lösung.

Ich hoffe ihr könnt mir helfen.

Xeres

Moderator

BeitragFr, Aug 27, 2010 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Du meinst, dass der Kaufpreis immer wieder abgezogen wird? Wie sieht der Code dazu aus?
Du musst ggf. Variablen benutzen - Nach der Aktion z.B. auf True setzen und später wieder Freigeben.
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)

ToeB

BeitragFr, Aug 27, 2010 16:57
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Brauchen wir den Code (oder Teil-Code) damit wir dir bei deinem Code helfen können

2. Du hast ja sicherlich ne Abfrage
Code: [AUSKLAPPEN]
If Button_Für_Kauf = gedrückt then
endif

drin. Dann machst du noch ne Abfrage ob genug Gold da ist
Code: [AUSKLAPPEN]
If Button_Für_Kauf = gedrückt Then
    If Aktuelles_Gold - Gold_Kosten => 0 Then
    EndIf
EndIf


Und da schreibst du dann rein
Code: [AUSKLAPPEN]
Gold = Gold - Kosten

Und dann wird dass nur solange ausgeführt wie du den Button drückst (am besten mit MouseHit, dann wird er auch nur einmal gedrückt)

3. Guck dir mal [[Millisecs()]] an...


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Raiden93

BeitragFr, Aug 27, 2010 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ja aber das Problem ist das wenn ich es 1 mal gekauft habe das ich es solange nichts mehr tut bis ich z.b genug gold für upgrade stufe 2 habe sonst sage ich mal ich bin auf upgrade 1 der kostet 250 so dann hab ich das gekauft aber kann jetzt immer wieder auf den button klicken und es geht bis stufe 100000
Code: [AUSKLAPPEN]

Graphics 800,600,32,2
AppTitle "Kongra"
SetBuffer BackBuffer()
Timer=CreateTimer(60)

;Laden von Datein
Global Hintergrund = LoadImage("GFX/Hintergrund.bmp")
Global Upgrade_Gold = LoadImage("GFX/Button.bmp")
Global Upgrade_Stein = LoadImage("GFX/Button.bmp")
Global Upgrade_Holz = LoadImage("GFX/Button.bmp")
Global Balken = LoadImage("GFX/Balken.bmp")
Global SeiteL = LoadImage("GFX/SeiteL.bmp")
Global SeiteR = LoadImage("GFX/SeiteR.bmp")
Global Fenster = LoadImage("GFX/Fenster.bmp")
Global Fensterkl = LoadImage("GFX/Fensterkl.bmp")


;Variablen>
Global Gold = 0
Global Stein = 0
Global Holz = 0
Global GoldZeit = 1000
Global SteinZeit = 1000
Global HolzZeit = 1000
Global GoldLevel = 1
Global SteinLevel = 1
Global HolzLevel = 1
Global Goldzahl = 1
Global Steinzahl = 1
Global Holzzahl =1
Global Goldkosten_Goldmine = 250
Global Steinkosten_Goldmine = 250
Global Holzkosten_Goldmine = 250
Global Goldkosten_Steinmine = 250
Global Steinkosten_Steinmine = 250
Global Holzkosten_Steinmine = 250
Global Goldkosten_Holzfaller = 250
Global Steinkosten_Holzfaller = 250
Global Holzkosten_Holzfaller = 250

;Hauptschleife>
Repeat
    Cls
    ;Images Malen
    DrawImage Hintergrund,0,0
    DrawImage Fenster,12,20
    DrawImage Upgrade_Gold,25,55
    DrawImage Upgrade_Stein,25,125
    DrawImage Upgrade_Holz,25,195
    DrawImage Balken,0,0
    DrawImage Balken,0,585
    DrawImage SeiteL,0,15
    DrawImage SeiteR,792,15
   
    ;Buttons
    If MouseX()>25 And MouseX()<139;GoldUpgradeButton
      If MouseY()>55 And MouseY()<82
        If MouseHit(1)
          Goldlevel = Goldlevel+1
        End If
        KosteninfoGold()
      EndIf
    EndIf
    If MouseX()>25 And MouseX()<139;SteinUpgradeButton
      If MouseY()>125 And MouseY()<152
        If MouseHit(1)
        Steinlevel = Steinlevel+1
        End If
        KosteninfoStein()
      EndIf
    EndIf
    If MouseX()>25 And MouseX()<139;HolzUpgradeButton
      If MouseY()>195 And MouseY()<222
        If MouseHit(1)
        Holzlevel = Holzlevel+1
        End If
        KosteninfoHolz()
      EndIf
    EndIf


    ;UpgradesLevel
    Select Goldlevel;Goldupgrade
    Case 1
      Goldzahl = 1
    Case 2
      Goldzahl = 2
      Gold = Gold -1000
    Case 3
      Goldzahl = 3
    Case 4
      Goldlevel = 3
    End Select
    Select Steinlevel;Steinupgrade
    Case 1
      Steinzahl = 1
    Case 2
      Steinzahl = 2
    Case 3
      Steinzahl = 3
    Case 4
      Steinlevel = 3
    End Select
    Select Holzlevel;Holzupgrade
    Case 1
      Holzzahl = 1
    Case 2
      Holzzahl = 2
    Case 3
      Holzzahl = 3
    Case 4
      Holzlevel = 3
    End Select

    ;UpgradekostenGOLDMINE
    Select GoldLevel;GoldupgradeKosten
    Case 2
      Goldkosten_Goldmine = 250
      Steinkosten_Goldmine = 250
      Holzkosten_Goldmine = 250
    Case 3
      Goldkosten_Goldmine = 400
      Steinkosten_Goldmine = 400
      Holzkosten_Goldmine = 400
    End Select
    Select Steinlevel;SteinupgradeKosten
    Case 2
      Goldkosten_Steinmine = 250
      Steinkosten_Steinmine = 250
      Holzkosten_Steinmine = 250
    Case 3
      Goldkosten_Steinmine = 400
      Steinkosten_Steinmine = 400
      Holzkosten_Steinmine = 400
    End Select
    Select Holzlevel;HolzupgradeKosten
    Case 2
      Goldkosten_Holzfaller = 250
      Steinkosten_Holzfaller = 250
      Holzkosten_Holzfaller = 250
    Case 3
      Goldkosten_Holzfaller = 400
      Steinkosten_Holzfaller = 400
      Holzkosten_Holzfaller = 400
    End Select

    ;Timer>FürRessorcen
    If MilliSecs()>=gs+GoldZeit
       gs=MilliSecs()
       GoldPlus()
    EndIf
    If MilliSecs()>=ss+SteinZeit
       ss=MilliSecs()
       SteinPlus()
    EndIf
    If MilliSecs()>=hs+HolzZeit
       hs=MilliSecs()
       HolzPlus()
    EndIf
    ;Texte>FürRessorcen
    Color 0, 0, 0
    Text 25,35, "Goldmine Lvl: "+Goldzahl
    Text 25,105, "Steinmine Lvl: "+Steinzahl
    Text 25,175, "Holzfäller Lvl: "+Holzzahl
    Text 20,565,"Gold: " +Gold
    Text 140,565,"Stein: " +Stein
    Text 265,565,"Holz: " +Holz
    Text 620,565,"©Copyright by Raidenk"

    Flip 0
    WaitTimer Timer
Until KeyHit(1)

 
;Functionen>
Function GoldPlus()
  Gold = Gold+Goldzahl
End Function

Function SteinPlus()
  Stein = Stein+Steinzahl
End Function

Function HolzPlus()
  Holz = Holz+Holzzahl
End Function

Function KosteninfoGold()
  DrawImage Fensterkl,600,25
  Text 625,50, "Upgrade kosten"
  Text 625,75, "Gold: " +Goldkosten_Goldmine
  Text 625,100, "Stein: " +Steinkosten_Goldmine
  Text 625,125, "Holz: " +Holzkosten_Goldmine
End Function

Function KosteninfoStein()
  DrawImage Fensterkl,600,25
  Text 625,50, "Upgrade kosten: "
  Text 625,75, "Gold: " +Goldkosten_Steinmine
  Text 625,100, "Stein: " +Steinkosten_Steinmine
  Text 625,125, "Holz: " +Holzkosten_Steinmine
End Function

Function KosteninfoHolz()
  DrawImage Fensterkl,600,25
  Text 625,50, "Upgrade kosten: "
  Text 625,75, "Gold: " +Goldkosten_Holzfaller
  Text 625,100, "Stein: " +Steinkosten_Holzfaller
  Text 625,125, "Holz: " +Holzkosten_Holzfaller
End Function

Xeres

Moderator

BeitragFr, Aug 27, 2010 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast Riesengröße Blöcke Code die in Funktionen passen würden, aber verwenden tust das nur bei Einzeilern - jede Menge Aufräum-Potential.
Das mit dem Maushit wird so nie und nimmer funktionieren Arrow Wie kann ich Mausklicks richtig abfragen ?
Wie ToeB so richtig schrieb, musst du den Teil verändern:
Code: [AUSKLAPPEN]
If MouseHit(1)
     Goldlevel = Goldlevel+1
End If

1. Überprüfen, ob genug Ressourcen da sind.
2. Falls ja: bauen/hochzählen und die Kosten abziehen.

Alles einmal nach dem Klick auf die richtige Stelle, nicht irgendwo im Programm verteilt.
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)

Raiden93

BeitragFr, Aug 27, 2010 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
wann und was ist den sinnvoll es in eine function zu packen ich hab da noch nie durchgeblickt deswegen schreibe ich fast alles auch ohne functionen

Xeres

Moderator

BeitragFr, Aug 27, 2010 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Alles, was du mehr als 2x wiederholst, kannst du in eine Funktion packen, z.B. deine "Buttons".
Die Funktionen kannst du dann in weiteren Projekten verwenden, ohne jedesmal das Rad neu zu erfinden.
Würde auch Sinn machen, deine Minen und zugehörigen Variablen endweder in ein Array ( Arrow DIM) zu packen oder noch besser Types zu verwenden.
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)

Raiden93

BeitragFr, Aug 27, 2010 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm ok habe nur versucht an arrays vorbei zu gehen weil ich das nicht wirklich kapiere ich werde mir das halt nochmal richtig alles durchlesen.

Warum macht der bei meiner Function jetzt das Problem das jede millisek 1 Gold dazu addiert wird und wenn ich es in der Hauptschleife packe nur jede sekunde?
[url];Hauptschleife>
Repeat
;Images Malen
DrawImage Hintergrund,0,0
DrawImage Fenster,12,20
DrawImage Upgrade_Gold,25,55
;DrawImage Upgrade_Stein,25,125
;DrawImage Upgrade_Holz,25,195
DrawImage Balken,0,0
DrawImage Balken,0,585
DrawImage SeiteL,0,15
DrawImage SeiteR,792,15

GoldPlus()

;Texte>FürRessorcen
Color 0, 0, 0
Text 25,35, "Goldmine Lvl: "
Text 20,565,"Gold: "+Gold
Text 620,565,"©Copyright by Raidenk"
Flip 1
Cls
Until KeyHit(1)


;Functionen>
Function GoldPlus()
If MilliSecs()>=gs+1000
gs=MilliSecs()
Gold = Gold +1
EndIf
End Function
[/url]

Xeres

Moderator

BeitragFr, Aug 27, 2010 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Denk dran, das Variablen außerhalb der Funktion Global deklariert, oder an die Funktion als Parameter übergeben werden müssen.
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)

Raiden93

BeitragFr, Aug 27, 2010 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
hab ich ja gemacht hier ist das ganze
Code: [AUSKLAPPEN]
Graphics 800,600,32,2
AppTitle "Kongra"
SetBuffer BackBuffer()
Timer=CreateTimer(60)

;Laden von Datein
Global Hintergrund = LoadImage("GFX/Hintergrund.bmp")
Global Upgrade_Gold = LoadImage("GFX/Button.bmp")
Global Upgrade_Stein = LoadImage("GFX/Button.bmp")
Global Upgrade_Holz = LoadImage("GFX/Button.bmp")
Global Balken = LoadImage("GFX/Balken.bmp")
Global SeiteL = LoadImage("GFX/SeiteL.bmp")
Global SeiteR = LoadImage("GFX/SeiteR.bmp")
Global Fenster = LoadImage("GFX/Fenster.bmp")
Global Fensterkl = LoadImage("GFX/Fensterkl.bmp")

Global Gold = 0
Global Gold_Zeit = 1000
Global Gold_Einkommen = 1
;Hauptschleife>
Repeat
    ;Images Malen
    DrawImage Hintergrund,0,0
    DrawImage Fenster,12,20
    DrawImage Upgrade_Gold,25,55
    ;DrawImage Upgrade_Stein,25,125
    ;DrawImage Upgrade_Holz,25,195
    DrawImage Balken,0,0
    DrawImage Balken,0,585
    DrawImage SeiteL,0,15
    DrawImage SeiteR,792,15

    GoldPlus()

    ;Texte>FürRessorcen
    Color 0, 0, 0
    Text 25,35, "Goldmine Lvl: "
    Text 20,565,"Gold: "+Gold
    Text 620,565,"©Copyright by Raidenk"
    Flip 1
    Cls
Until KeyHit(1)

 
;Functionen>
Function GoldPlus()
    If MilliSecs()>=gs+Gold_Zeit
       gs=MilliSecs()
       Gold = Gold +Gold_Einkommen
    EndIf
End Function

Xeres

Moderator

BeitragFr, Aug 27, 2010 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Nö, hast du nicht. gs ist überhaupt nicht deklariert. Um solche Fehler schneller zu finden, solltest du IDEal verwenden - da wird dir angezeigt, welche Variable nicht deklariert ist, bzw. du kannst dir einstellen, wie Locale, Globale und Konstanten aussehen sollen.
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)

Raiden93

BeitragFr, Aug 27, 2010 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
ahh danke das Programm ist echt cool

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group