Feldauswertung in Schleife

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Jamagin

Betreff: Feldauswertung in Schleife

BeitragDi, Nov 17, 2015 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo an die Tüftler!

Ich habe wieder mal ein Brett vorm Kopf und weiß nicht wie ich das effizient lösen kann!
Folgende Situation zu meinem Thema Slotgameprogramming.

Ich möchte die Felder effizient auswerten, d.h. über eine Funktion oder mittels einer Funktion falls es so zu lösen geht! Ansonsten muß ich da jede Position einzeln auswerten! Das wäre echt mühsam...!

Situationen die es zum auswerten gilt:

xxx00
00000
00000

00000
xxx00
00000

00000
00000
xxx00

xx000
00x00
00000

00x00
xx000
00000

00000
xx000
00x00

und so weiter, bis alle denkbaren Positionen ausgewertet sind.

x steht für eine Zahl zwischen 1 und 10 (Symbolart) und 0 ist ein anderes Symbol, also alles was x ist, sind gleiche Symbole.

Wer hat da schon eine ähnliche Funktion ein seinen Projekten gemacht bzw. kann mir da jemand einen Ansatz geben!

In meinem Fall löse ich das im Moment so.

Code: [AUSKLAPPEN]

If (sl_Result(1, 1) = sl_Special_Art And sl_Result(2, 1) = sl_Special_Art And sl_Result(3, 1) = sl_Special_Art)
   pe_refillBoard()
EndIf


Ich denke aber das es sicher mit einer Prüfschleife auch gehen kann!

Würde mich auf Infos und Tipps dazu sehr freuen!

lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

SpionAtom

Betreff: Eine Lösung

BeitragDi, Nov 17, 2015 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz unpädagogisch rotze ich eine Lösung hier hin. Mir war langweilig:

BlitzBasic: [AUSKLAPPEN]
Data 6
.pats
Data "xxx00"
Data "00000"
Data "00000"

Data "00000"
Data "xxx00"
Data "00000"

Data "00000"
Data "00000"
Data "xxx00"

Data "xx000"
Data "00x00"
Data "00000"

Data "00x00"
Data "xx000"
Data "00000"

Data "00000"
Data "xx000"
Data "00x00"



Dim myConfiguration(5, 3)
Read combinations


SetBuffer BackBuffer()

Repeat

;neue Configuration bauen
Cls
Text 0, 0, "any key for retry, esc for end"

For j = 1 To 3
For i = 1 To 5
myConfiguration(i, j) = Rand(1, 10)
Text i * 30, j * 30, myConfiguration(i, j)
Next
Next





For x = 1 To 10
Restore pats
For pattern = 1 To combinations

;Pattern auswerten
patternFound = True

For j = 1 To 3
Read row$
For i = 1 To 5
char$ = Mid(row, i, 1)
If (Lower(char$) = "x" And myConfiguration(i, j) <> x) Then patternFound = False
Next
Next
If patternFound = True Then Text 50, 120, "Pattern Found: " + pattern
Next
Next



Flip()
WaitKey
Until KeyDown(1)
End
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Xeres

Moderator

BeitragDi, Nov 17, 2015 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Anhand der vorhergehenden Threads würde ich glauben, dass das Beispiel unvollständig ist.
Die Gewinnlinien haben sich doch so quer über das Feld verteilt:
Linie 1:
11000
00100
00011

Dann gibt es doch 3 Fälle, wo drei Felder aneinander grenzen; die vorderen drei, die mittleren drei oder die hinteren drei:
Code: [AUSKLAPPEN]
XX000 | 0X000 | 00000
00X00 | 00X00 | 00X00
00000 | 000X0 | 000XX


Ich würde das erst mal normalisieren. Welche Felder zur Linie gehören, ist definiert, also greift man sich die raus und macht eine neue Linie daraus:
Code: [AUSKLAPPEN]
XXX00 | 0XXX0 | 00XXX


Und schon ist es vollkommen egal wie die Linien verteilt sind, man kann sie alle nach dem gleichen Schema nach Mustern absuchen.
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)

Jamagin

BeitragDi, Nov 17, 2015 23:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Xeres!

Ich habe mich falsch ausgedrückt, das mit den Gewinnlinien hab ich hinbekommen.
Nun ist die Situation so wie am Screen ersichtlich, dass zB. ein Symbol als Specialobject ausgewählt wurde und in den Freirunden an verschiedenen Positionen erscheint. Sind mehr als 2 des ausgewählten Symbols im Bild, färben sich die anderen Symbole und an den Positionen ober- und unterhalb des Bildes wird das jeweilige Symbol durch das Specialsymbol ersetzt! Das habe ich hinbekommen. Doch wie kann ich nun feststellen an welchen Positionen die Specialsymbole angefügt werden sollen?

Die erste Spalte habe ich manuell eingefügt damit ersichtlich ist worum es geht! Nun sind noch an den anderen Positionen solche Specialsymbole!

Vorher:
x0000
000xx
00x00

Nachher soll es so aussehen:
x0xxx
x0xxx
x0xxx

Nur weiß ich nicht wie ich das über eine Formel ausrechen kann ob die gesuchten Felder oben oder unten sind, denn die Specialsymbole sollten dann hintereinander eingezeichnet werden, von links nach rechts und von oben nach unten!

Oh Mann, mir raucht der Kopf! Sad

user posted image


lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

Xeres

Moderator

BeitragMi, Nov 18, 2015 0:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe die Fragestellung mal wieder nicht.

Was ist gegeben, was ist gesucht?
Wie sähe ein Ablaufplan davon aus?
Kannst du Regeln in Stichpunkten zusammenfassen?

Text und Beispiel hilft leider nichts, wenn du es nicht schaffst, den kausalen Zusammenhand klar zu machen.

Zitat:
Nur weiß ich nicht wie ich das über eine Formel ausrechen kann ob die gesuchten Felder oben oder unten sind, denn die Specialsymbole sollten dann hintereinander eingezeichnet werden, von links nach rechts und von oben nach unten!
Die Felder zu finden ist ein Problem. Sortieren und Zeichnen sind zwei weitere. Versuche nicht alles in einem Schritt lösen zu wollen. Eins nach dem anderen.
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)

Jamagin

Betreff: Feldauswertung in Schleife

BeitragMi, Nov 18, 2015 9:28
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Xeres,

Du hast recht, ich versuch mein Problem etwas besser darzustellen.
Also, Gewinnlinien und Auswertung funktionieren schon, nun geht es mit den Abschnitt Freirunden weiter.

Zu Beginn wird ein Symbol ausgewählt was in den Freirunden eine besondere Stellung hat.
Im Screenshot oben ist es das Q.
Kommt dieses Q mehr als 2x im ganzen Feld vor, färbt sich das Feld um und alle Positionen wo das Q liegt (also ober- und unterhalb) werden mit einem Q ausgefüllt.

Problem:
1. Das Finden der Positionen mit Q
2. Das Ausfüllen der Positionen ober- bzw. unterhalb der Q's

Wo kein Q ist, gibt es nichts zum ausfüllen

Code: [AUSKLAPPEN]

for x = 1 to 5
   for y = 1 to 3
      if Symbol(x, y) = Special(x, y) then anzahl = anzahl + 1
   next
next


Damit kann ich die Anzahl des gesuchten Elementes im ganzen Spielfeld herausfinden.

Aber: Wie kann ich nun die genauen Positionen herausfiltern um das Ausfüllen der Felder zu vereinfachen.
Wenn ich zusätzlich die Koordinaten in Variablen speichere, habe ich die Positionen aber wie kann ich diese dann der Reihe nach abarbeiten. Ich arbeite nicht mit Types in diesem Fall.

Code: [AUSKLAPPEN]

for x = 1 to 5
   for y = 1 to 3
      if Symbol(x, y) = Special(x, y)
         anzahl = anzahl + 1
         specialX(x, y) = symbolX(x, y)
         specialY(x, y) = SymbolY(x, y)
      endif
   next
next


So, nun hätte ich die korrekten Positionen des Specials auch!

Beispiel:

Problem:
Q----
--Q--
----Q

Lösung:
Q-Q-Q
Q-Q-Q
Q-Q-Q

Ich hoffe, ich habe das jetzt anschaulicher erklärt wo ich im Moment festhänge! Sad

lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

Thunder

BeitragMi, Nov 18, 2015 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe zwar nicht, wofür deine Arrays stehen, aber ich versuche es Mal in einem Pseudocode so aufzuschreiben, wie ich mir die Lösung denke:

BlitzBasic: [AUSKLAPPEN]

For x = 1 To 5
For y = 1 To 3
If feld(x,y) = "Q" Then
For y2 = 1 To 3
feld(x,y) = "Q"
Next
Exit
End If
Next
Next
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Jamagin

Betreff: gelöst

BeitragMi, Nov 18, 2015 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja danke, Thunder! Das klappt echt genau so!!! Danke, nun kann ich weitermachen!!! Wink

lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group