2011-07-21 19 views
6

Obecnie piszę grę typu scrabble w języku C#. Mogę dostać komputer, aby znaleźć słowo o najwyższej wartości punktowej, które może być wykonane przy użyciu bieżącej szafy, jednak nie mam pojęcia, jak sprawdzić, czy to słowo jest "możliwe do umieszczenia" na planszy 15 * 15 (tablica 2D: ciąg [,]).Scrabble Word Placement C#

w jego stan domyślny (bez liter na planszy), wszystkie elementy są ustawione na 0.

Czy wolno

--------------- 
-------H------- 
-------E------- 
-----FILL------ 
-------L------- 
-------O------- 
--------------- 

Jak mogę sprawdzić, czy słowo nie jest, na przykład:

nie jest dozwolone

--------------- 
-H------------- 
-E------------- 
FILL------------ <-- F is out of bounds 
-L------------- 
-O------------- 
--------------- 

nie jest dozwolone

--------------- 
-H------------- 
-E-W----------- 
-L-O----------- 
-L-R----------- 
FOLL----------- <-- Fill is overlapping with O 
---D----------- 
+0

Myślę, że musisz sam to sprawdzić - sprawdź granice i sprawdź istniejące litery w miejscu. Nie ma na to żadnego oczywistego algorytmu, więc musielibyśmy zobaczyć Twój kod, aby powiedzieć Ci, co masz robić. Ale nie może być * to * trudne. Sprawdzanie granic: czy już tego nie wiesz, ponieważ musisz sprawdzić trzyliterowe tabliczki wyników itp.? – Rup

+4

Również "2D Array: string [,]" - Masz ciąg znaków dla każdego kwadratu? nie char? – Rup

+0

Tylko jedna sugestia: co zrobić, jeśli zamiast spojrzeć na płytki w szafie, zidentyfikujesz wszystkie miejsca na planszy, gdzie może znaleźć się słowo? Zdaję sobie sprawę, że łatwiej to powiedzieć niż zrobić, ale myślenie o problemie w inny sposób może doprowadzić cię do przełomu. – FishBasketGordo

Odpowiedz

18

Artykuł "The worlds fastest Scrabble engine" (PDF) pochodzi z 1988 roku i opisuje wydajny silnik Scrabble. Jest krótki i zaskakująco czytelny!

+0

Świetne, małe znalezisko! Będę musiał go przeczytać jako konkurencyjny gracz Scrabble i ktoś, kto próbował go zaimplementować w J2ME. – demongolem

+0

@Jeff +1 za dobrą odpowiedź z dodatkowym atutem bardzo interesującej lektury. Dzięki! –

0

Nauczyłem się, jak to zrobić na podstawie projektu F # SharpScrabble. Nawet jeśli nie znasz F # (jak ja), poczujesz, jak autor zdecydował się to zrobić.

wielkie rzeczy dla mnie były:

  • Korzystanie z systemu Coordinate znaleźć
  • wypełniania Board z Squares które mogą posiadać płytkę (się), ale również posiadać zdobyć informacje
  • Tile reprezentuje list, zarówno w banku listów gracza, jak i na tablicy
  • Move, który reprezentuje rozmieszczenie liter gracza na
  • Realizacja IComparable współrzędnych i płytek do sortowania łatwiejszy
  • Computing Runs które stanowią słowa posunięcie miejsce, aby obliczyć wynik w

Ogólnie rzecz biorąc, bardzo dobry grunt na początku owinąć wokół twojej głowie silnik Scrabble. Byłem w stanie przenieść większość tego kodu do C#, nie znając F # lick, więc nie powinno to być straszne dla nikogo innego.