Ein kleines problem mit meinem Spiel
Übersicht

bruce85Betreff: Ein kleines problem mit meinem Spiel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group