Hilfe bei meinem Bot

02/08/2016 21:57 Bonnyfication#1
Guten Abend,

Ich arbeite nebenbei an einem kleinem Projekt um mich allgemein mit Bot's zu beschäftigen. C# mag dazu nicht die beste Lösung sein, das ist mir durchaus bewusst, da ich allerdings beruflich mit WPF/C# arbeite fühle ich mich damit recht wohl :)

So nun zu meinem momentanen Stand der Dinge.

Problem, welches es zu lösen gibt:
[Only registered and activated users can see links. Click Here To Register...]

Regel:
Wie üblich bei solchen Spielen müssen min. 3 gleiche Bonbons in eine Reihe Horizontal oder Vertikal gebracht werden damit sie verschwinden.

Was mein Bot bis jetzt kann:
- Prüft ob das Gameboard still steht und nicht mehr in bewegung ist
- Erkennt alle Bonbons im Spielfeld und kann ihnen eine Farbe zuweisen
- Ein kleiner verbuggter algo, der versucht 3 Bonbons der gleichen Farbe nebeneinander zu bringen

Mein Problem:
-> Wie organisiere ich die Bonbons in meinem Code, um leicht mit ihnen arbeiten zu können und wie finde ich am schnellsten heraus, welches Bonbon verschoben werden müsste?

Momentan habe ich eine einfache Liste mit den Bonbons (Klasse mit Farbe und Koordinaten). Anhand iherer Position in der Liste kenne ich ihre "position" auf dem Spielfeld. Ich gehe zunächt horizontal Reihe für Reihe druch und suche 2 gleichfarbige Bonbons in einem Bereich von 3. Ist das der Fall so schaue ich ob in der nähe des anderstfarbigen Bonbons nicht ein Bonbon ist, welches zu den anderen beiden passt. Ist das der Fall, so schiebe ich das Bonbon an seine neue Stelle.

Nunja was soll ich sagen durch die ganzen Zählerschleifen und abfragen habe ich mich ganz schön verzettelt und teilweise werden Bonbons am rand ignoriert.

Wäre cool, wenn mir jemand da etwas auf die Sprünge helfen könnte.

Mfg OddN3ss
02/09/2016 23:01 Xio.#2
array [width*height]
dann alle rein damit.

array[X * Width + y] schon hast dein bonbon.


Edit: irgendwie wurde der rest nicht gepostet.


Edit2: Toll, jz is alles weg. Schreibs morgen vlt nochmal, geh jz pennen
02/10/2016 00:56 Moneypulation#3
Quote:
Originally Posted by Xio. View Post
array[X * Width + y] schon hast dein bonbon.
müsste es nicht array[ x + width * y] sein?

zum algorithmus an sich:

[Only registered and activated users can see links. Click Here To Register...]

sagen wir du bist grad im grünen feld und möchtest schauen, ob man eine 3er reihe mit ihm bilden kann. die für dich interessanten felder habe ich blau ausgemalt, wobei diese nicht alle existieren müssen (z.B. wenn das grüne feld deine obere linke ecke ist). ich würde jetzt einfach alle potentiellen 3er reihen mit dem grünen feld abfragen. im grundprinzip fragt man ja die farben der felder ab und schaut ob sie der vom feld 13 übereinstimmen. wenn man jetzt z.b. die 12 abfragt und sie nicht die selbe farbe hat, dann kann man die felder 6 und 16 direkt für nutzlos erklären und somit zeit sparen. an deiner stelle würde ich einfach mit einer if abfrage beginnen, und wenn diese fehlschlägt, die kästchen in der zeichnung rot ausmalen, die nicht mehr wichtig sind und dann die nächste if abfrage konstruieren bis man alle möglichkeiten getestet hat.
das würde ich dann einfach in einer schleife durchlaufen lassen, die das mit allen feldern macht
02/10/2016 22:14 Bonnyfication#4
Quote:
Originally Posted by Moneypulation View Post
müsste es nicht array[ x + width * y] sein?

zum algorithmus an sich:

[Only registered and activated users can see links. Click Here To Register...]

sagen wir du bist grad im grünen feld und möchtest schauen, ob man eine 3er reihe mit ihm bilden kann. die für dich interessanten felder habe ich blau ausgemalt, wobei diese nicht alle existieren müssen (z.B. wenn das grüne feld deine obere linke ecke ist). ich würde jetzt einfach alle potentiellen 3er reihen mit dem grünen feld abfragen. im grundprinzip fragt man ja die farben der felder ab und schaut ob sie der vom feld 13 übereinstimmen. wenn man jetzt z.b. die 12 abfragt und sie nicht die selbe farbe hat, dann kann man die felder 6 und 16 direkt für nutzlos erklären und somit zeit sparen. an deiner stelle würde ich einfach mit einer if abfrage beginnen, und wenn diese fehlschlägt, die kästchen in der zeichnung rot ausmalen, die nicht mehr wichtig sind und dann die nächste if abfrage konstruieren bis man alle möglichkeiten getestet hat.
das würde ich dann einfach in einer schleife durchlaufen lassen, die das mit allen feldern macht

BOAAAAAH .... Danke dir. hab ich auf dem Schlauch gestanden. Ich bin die ganze Zeit so vorgegangen, dass ich das Spielfeld durchlaufe und schaue wo 2 gleichfarbige in 3 Feldern sind und habe dann versucht das fehlende auszutauschen. Das kostet Zeit und Ressourcen....

Auf die Idee einfach zu schauen ob durch das verschieben eines Bonbons eine Reihe entsteht wäre ich nicht gekommen :) Manchmal steht man echt hart aufm Schlauch!

Danke euch beiden.