Ein kleines problem mit meinem Spiel

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: Ein kleines problem mit meinem Spiel

BeitragMi, Jan 09, 2008 22:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
es ist mal wieder Mathematik angesagt und zwar geht es um folgendes:

Ich bin seit paar tagen dabei ein ähnliches Spiel wie Karthago zu schreiben:
http://www.deutschland-spielt....ago2_2.jpg
und hänge an ein paar berechnungen.

Ich habe mein Spiel mal gescreent und die Data Felder mit nummern versehen um eine bessere übersicht darzustellen:
http://s1.directupload.net/fil...ot_png.htm

Zum testzwecken lasse ich nur 2 farben von den Steinen erstellen, um das ganze erst einmal zu testen.

Ich prüfe meine felder auf Data 24 danach lasse ich die Repeat schleife solange durchlaufen, bis die gewünschte Data erreicht wurde und alle felder mit der NR 8 nach Data 24 frage ich ab und erstelle mit Types die Steine, die dann y-anzahl*40 positioniert werden, dass heisst, die steine werden dann über Data 24 positioniert.
An manchen stellen funktioniert mein Code, wie es im Screen zu sehen ist.

Das läuft dann so ab:
Wenn nach Feld 24 welche felder mit 8 sind, dann werden diese Steine die nach 24 fehlen, neu erstellt und über Data 24 positioniert und diese lassen sich dann runter zu den anderen steinen fallen.

Alles funktioniert soweit, die Steine lassen sich gut vertauschen, es fallen auch neue Steine von oben herunter, nur habe ich die funktion für neue Steine im Moment rausgenommen um erstmal das verhalten der kugeln im Spielfeld richtig darzustellen.

Hier ist mal meine einfache berechnung:
Code: [AUSKLAPPEN]
Function kugel_function()
  For ff_y=0 To 14
    For ff_x=0 To 14
      If Spielfeld(ff_x,ff_y) = 24 And waiting = 0 And x_verschieben = 0 And y_verschieben = 0 And kugel_zuruecksetzen = 0 Then
        anzahl = 1
        Repeat
          If Spielfeld(ff_x,ff_y+anzahl) = 8 Then
            ;Kugel erstellen
            k.kugel = New kugel
            k\kugel_px=0
            k\kugel_merk_x=ff_x
            k\kugel_merk_y=ff_y-anzahl
            k\kugel_frames = Spielfeld(ff_x,ff_y-anzahl)
            k\kugel_x = 207+ff_x*40+(ff_x/1)*0
            k\kugel_y = 79+ff_y*40-anzahl*40+(ff_y/1)*0
            k\kugel_move=1
            waiting = 1
            Spielfeld(ff_x,ff_y-anzahl) = 8
          EndIf
          anzahl = anzahl + 1
        Until Spielfeld(ff_x,ff_y+anzahl) > 0 And Spielfeld(ff_x,ff_y+anzahl) < 8 Or Spielfeld(ff_x,ff_y+anzahl) = 0
      EndIf
    Next
  Next
End Function


und hier frage ich alle Steine ab und lasse sie nach Y-richtung fallen.
Code: [AUSKLAPPEN]
For k.kugel = Each kugel
  DrawImage kugeln,k\kugel_x+k\kugel_x_speed,k\kugel_y+k\kugel_y_speed,k\kugel_frames

  If k\kugel_move = 1 Then
    k\kugel_y_temp#=k\kugel_y_temp# - .25
    k\kugel_y=k\kugel_y-k\kugel_y_temp#
    k\kugel_px=k\kugel_px-k\kugel_y_temp#
    If k\kugel_px >= 40 Then
      k\kugel_merk_y = k\kugel_merk_y + 1
      If spielfeld(k\kugel_merk_x,k\kugel_merk_y+1) = 8 Or spielfeld(k\kugel_merk_x,k\kugel_merk_y+1) = 24 Then
        k\kugel_px = 0
      Else
        spielfeld(k\kugel_merk_x,k\kugel_merk_y) = k\kugel_frames
        k\kugel_loeschen = 1
      EndIf
    EndIf
  EndIf
  If k\kugel_loeschen = 1 Then
    Delete k.kugel
  EndIf
Next


Hättet Ihr vieleicht eine bessere idee wie ich die berechnungen 100% richtig machen kann?

Danke schonmal.

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

SpionAtom

BeitragFr, Jan 11, 2008 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kenne dieses Spiel(prinzip) als Bejeweled.
Deine Beschreibung find ich etwas schwer zu verstehen. Außerdem hast du kein konkretes Problem, und sagst uns nicht, was an deinem Code nicht funktioniert. Solange das nicht geklärt ist, kann dir wohl auch keiner helfen.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

bruce85

BeitragSa, Jan 12, 2008 7:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank.
Du hast recht, ich war wohl ganz durcheinander und habe das vergessen zu beschreiben.

Also, wenn unter einem Stein ein leeres feld ist, dann rutschen die kugeln runter und ich bekomme irgendwie die berechnung nicht richtig hin, wenn z.B. unter einem Stein ein loch ist, dass die Steine dann durch rutschen.

Die löcher sind unterschiedlich gross, von daher habe ich es versucht mit der While schleife das zu lösen.

Hier ist mal mein Screen, die löcher haben die Frame NR 24 und die Steine 1-7:
http://s6.directupload.net/fil...x3_png.htm

Ich muss die Steine schon bevor sie runter fallen, einen anderen wert geben, da ich die Steine mit Types erstelle und sonst alle Steine die oben drüber liegen, durchfallen.

Wie könnte man das ambesten realisieren?

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

SpionAtom

BeitragSa, Jan 12, 2008 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah jetzt ja. Dann wolln wir mal analysieren.
Du müsstest 1 bis 2 Dinge ermitteln:
1. A = Die Anzahl der freien Plätze unter einem Loch (also jeweils unter dem untersten 24er-Block)
2. H = Die Höhe des Lochs (Anzahl der 24er in einer Reihe) (Benötigst du, wenn du die Steine Schritt für Schritt "fallen lassen willst)

Der Rest ist eine einfache FOR..NEXT Schleife von 1 bis (H + A)
und die darin verschachtelte FOR..NEXT Schleife von 1 bis A, die die jeweiligen Steine um 1 nach unten verschiebt.

Hoffe du verstehst mich.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

bruce85

BeitragSa, Jan 12, 2008 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank.

Ich verstehe das schon, aber ich muss erst die freie felder abfragen, danach lasse ich immer ein feld weiter oben prüfen, ob diese 24 ist, wenn ja, dann läuft die while schleife weiter, das klappt schon.

So kann ich schonmal die anzahl der löcher anzeigen lassen:

Code: [AUSKLAPPEN]
Function check_loch()
  For yy=0 To 14
    For xx=0 To 14
      If Spielfeld(xx,yy) = 8 And waiting = 0 Then
        If Spielfeld(xx,yy-1) = 24 Then
          zaehler = 1
          While Spielfeld(xx,yy-zaehler) = 24
            zaehler = zaehler + 1
            anzahl_loch = anzahl_loch + 1
          Wend
        EndIf
      EndIf
    Next
  Next
End Function


Den rest müsste ich auch noch hinbekommen, ich melde mich wieder, wenn ich es versucht habe.

Und danke für den tipp.

EDIT: Ich habe das hinbekommen, bis jetzt habe ich noch keinen fehler entdecken können.
Hier ist mal mein Code, wie ich es bis jetzt gelöst habe:

Code: [AUSKLAPPEN]
Function check_loch()
  For yy=0 To 14
    For xx=0 To 14
      If Spielfeld(xx,yy) = 8 And waiting = 0 Then ;prüfen auf Feld NR 8
        If Spielfeld(xx,yy-1) = 24 Then ;Wenn Feld Y-1=24, dann führe aus
          zaehler = 1
          While Spielfeld(xx,yy-zaehler) = 24 ;Wiederhole solange wie Feld NR = 24 ist
            zaehler = zaehler + 1
            anzahl_loch = anzahl_loch + 1 ;Löcher zählen
          Wend
          zaehler2 = 1
          While Spielfeld(xx,yy+zaehler2) = 8 ;Leere Felder nach Feld 24 zählen
            zaehler2 = zaehler2 + 1
          Wend
          For i=1 To zaehler2
            ;Die Kugeln erstellen
            k.kugel = New kugel
            k\kugel_px=0
            k\kugel_merk_x=xx
            k\kugel_merk_y=yy-zaehler+1-i
            k\kugel_frames = Spielfeld(xx,yy-zaehler+1-i)
            k\kugel_x = 207+xx*40+(xx/1)*0
            k\kugel_y = 79+yy*40-zaehler*40-i*40+1*40+(yy/1)*0
            k\kugel_fallen=3
            Spielfeld(xx,yy-zaehler+1-i) = 8
          Next
          waiting = 1
          Return
        EndIf
      EndIf
    Next
  Next
End Function


Und danke nochmals.

MfG
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group