flip10000 / Lightbeam

School Project
4 stars 2 forks source link

Statusreport "Lösungsstrategien"! #10

Open ateengine opened 13 years ago

ateengine commented 13 years ago

Herr Cremer, wie steht es um die Lösungsstrategien? Gibt es da schon Fortschritte?

qu4nd commented 13 years ago

@Martin:

Dazu auch nochmal mein Hinweis von zuvor bzgl der 3 menschlichen Strategien:

  1. ein feld ist nur von einem strahler erreichbar.
  2. ein strahler muss, zb eine 7 in der ecke unten links, wenn 5 felder darüber ein anderer strahler kommt, mindestens 3 nach rechts gehen, da nach oben max 4 frei sind.
  3. an folgendem Bild erklärt [IMG]http://i284.photobucket.com/albums/ll25/quand443/bsp.png[/IMG] --> das grüne feld oben rechts kann nur von der 7 bzw 4 erreicht werden. d.h. dass in jedem fall ein feld weniger für die 6 vorliegt ( sie kann max 2 nach links und 1 nach oben ODER rechts)... sind also 3 felder... somit muss der strahler mit der 6 mindestens 3 felder nach unten gehen...
matzecre commented 13 years ago

...läuft... ich meld mich wenn ich was vorzeigen kann.

ateengine commented 13 years ago

letzte Strategie: Alle Kombinationen in Zusammenarbeit der Strategien 1 - 3 durchgehen. Ab Nutzung der 4. Strategie den Map Zustand auf den Stack legen. Dann los. Falls keine Lösung, letzten Mapstatus vom Stack holen und weiter Kombinieren, bis entweder Erfolg oder letzte Kombination des ersten Mapzustands im Stack erreicht und abgearbeitet.

matzecre commented 13 years ago

Also hab jetzt meine Logik (Überprüfung nach jedem Zug ob die Map so noch lösbar ist sowohl bei Erstellung als auch beim SPielen einer Map) jetzt als Klasse 'Logic' erstellt. Aufgerufen wird diese Überprüfung für's Spielen in der Methode assignBeamsToSource() ganz am Ende, und für's Erstellen in der Methode updateTile() ganz unten (jeweils in der Klasse MapArea). Vielleicht kann man den Aufruf ja noch besser platzieren, wusste nicht wohin sonst damit. Im moment wird nur in der Konsole das Ergebnis des Checks ausgegeben. Was man mit dem Ergebnis macht (z.B. Map nur dann als spielbare Map speicherbar wenn der Check true zurück gibt) muss noch gemacht werden...

matzecre commented 13 years ago

... aja im moment wird mein commit in github irgendwie noch nicht angezeigt. In Eclipse scheint aber alles geklappt zuhaben. Entweder das dauert immer was länger, oder ich hab was falsch gemacht...

matzecre commented 13 years ago

... meine commits kommen hier irgendwie nicht an :(

ateengine commented 13 years ago

Nach einem Comitt das Menü "Team" -> "Push" aufrufen. Dort die notwendigen Angaben machen und fertig. Dein Comitt veranlasst nur, Dein lokales Repository, welches Du Dir mit "Clone" angelegt hast, zu aktualisieren. Deshalb sind Deine Änderungen bis zu einem "Push" nicht oben! Ich werd dann noch schauen, wo's sinnvoll ist.

matzecre commented 13 years ago

Also das Comitten hatte jetzt geklappt. Ich kann wohl im moment keine Map mehr spielen. Aber das hat wohl nix mit meinem Änderungen zutun...

ateengine commented 13 years ago

Änderungen sind oben! Master-Branch ist wieder spielbar!

ateengine commented 13 years ago

Folgende Map:


|2| | |


| | |2|


|2| | |


Deine Klasse sagt hier: "nicht lösbar"! Stimmt aber nicht! Ist lösbar als auch eindeutig!

matzecre commented 13 years ago

Wieso eindeutig? So wie ich das sehe sind z.B. folgende 2 Lösungen möglich: |2|>|>|

|<|<|2|

|2|>|>|

und

|2|>|>|

|/|<|2|

|2|>|V|

oder nicht?

ateengine commented 13 years ago

Stimmt! Mein Fehler! Läuft ansonsten super! Noch 'ne wichtig Frage: Ist das die Lösungsstrategie 1? Auf den ersten Blick sah mit das so aus!

matzecre commented 13 years ago

Damit ist Strategie 1 und 2 abedeckt. Strategie 3 wusst ich nicht so ganz wie ich technisch realisieren soll. Ich könnte das so machen, dass wenn kein Feld mehr da ist, das von genau einem Beamsource erreicht werden kann, aber Felder da sind, die von mehreren Beamsources zugleich erreicht werden können, dass dann rekursiv alle Optionen nach einander auf ein positives Endergebnis überprüft werden. Und wenn dann genau eins aufgeht ist es doch eindeutig. Vielleicht wird das aber performance-lastig.

ateengine commented 13 years ago

Ich habe mir Deine Lösungsvariante mal genauer unter die Lupe genommen und habe nun ein Strategy-Pattern aufgesetzt (bereits im Branch drin). Ich mir erlaubt, Deine Variante vollständig zu überarbeiten (habs nicht komplett überblicken können :) ). Schaus Dir mal an und sag mir, ob Du nach dem ähnlichen Prinzip die Lösungsstrategie 2 aufsetzen kannst?? Da wir an demselben Package arbeiten, wäre es wichtig, Deine Zeilen zu kommentieren. Machste dat?

matzecre commented 13 years ago

Ähm also hab ich das alles umsonst gemacht? super... Hab im moment keine Zeit mich für Strategie 2 in deinen neuen Code einzuarbeiten. Gib mir wenn dann lieber mal ein Szenario das mit der bisherigen Methode nicht bzw. falsch gelöst wird, dann ist mir auch klarer was ich bei Strategie 2 überhaubt machen soll.

ateengine commented 13 years ago

Auf gar keinen Fall hast Du das umsonst gemacht, schließlich habe ich ja Teile Deiner Logik übernommen! Nur halt an den Schrauben gedreht und in ein Strategy-Pattern gepackt, so wie es auch Vorgabe ist! Die Strategien hat Quandel oben erklärt. Deine Methode war super, nur muss halt für den Schwierigkeitsgrad folgendes passieren:

Wenn Strategie 1 nicht mehr packt, dann mit Strategie 2 weiterversuchen. Wenn Strategie 2 nicht mehr pack, dann mit Strategie 3 weiterversuchen. Wenn Strategie nicht mehr packt, wieder mit Strategie 1 beginnen. Das solange, bis keine Strategie mehr greift. Ist dann noch mind. ein Feld frei (d.h. mind. ein Feld ohne Zuordnung zu einem Strahler), dann ist die Karte auch nicht spielbar. Aufgrund der Anzahl der versuche der unterschieldichen Strategien lässt sich somit ein Schwierigkeitsgrad ermitteln. Großartig einarbeiten musst Du Dich nicht. Sobald ich per ICQ erreichbar bin, können wir ja zusammen das Problem angehen!? So kann ich dir auch sagen, was Du nutzen kannst, um schnell ans Ziel zu gelangen.