Nie troszcz się tylko o to, jak reprezentować planszę, ale także jak reprezentować kawałki, ponieważ plansza i kawałki muszą komunikować ich wzajemną obecność i efekty.
Dlatego sposób, w jaki reprezentujesz swoją tablicę, zależy od tego, jak reprezentujesz swoje elementy i zasady gry ograniczające planszę i części.
Twoje pierwsze zmartwienie dotyczy sposobu reprezentowania elementów.
Kawałek do gry lub automat do gier to idealny model do programowania obiektowego.
Pozwól mi zilustrować poprzez dozowanie precz z deklaracji, takich jak publicznie, statyczne itp
abstract class BasicUnit
{
// determine constraints of movement here.
// update position and return new position
abstract Position move(Direction d);
abstract Position getPosition();
Arsenal arsenal;
}
class Worker
extends BasicUnit
{
Position move(Direct d)
{
//whateveer, etc
}
}
class farmer
extends Worker
{
Position move(Direct d)
{
//whateveer, etc
}
}
class Warrior
extends BasicUnit
{
Position move(Direct d)
{
//whateveer, etc
}
}
class Sniper
extends Warrior
{
Position move(Direct d)
{
//whateveer, etc
}
}
Teraz trzeba zdecydować, czy pozycje elementów na płycie jest
- deska centric : pozycje sztuk są rejestrowane na tablicy tylko:
- centrycznie: pozycje są rejestrowane tylko na sztukach:
- zbędne: musisz zmniejszyć liczbę zaktualizuj zarówno kawałek, jak i planszę, gdy element zostanie przeniesiony.
W przypadku większości gier planszowych skupienie się na kawałku nie byłoby dobrym pomysłem, ponieważ trzeba by przeszukać każdy element, aby określić, czy pozycja jest zajęta.
Jeśli chodzi o wyżywienie na planszy, musisz przeszukać każdą pozycję planszy, aby znaleźć położenie kawałka.
Aby uzyskać nadmiarowość, należy upewnić się, że pozycje zarejestrowane przez obie plansze i części nie są źle wyrównane. Jeśli planujesz zezwolić na grę w Internecie, gdzie sesje mogą być wstrzymane i hibernowane, możesz spotkać się z wyzwaniami związanymi z synchronizacją.
Tak, odpowiedź na twoje pytanie jest - mieszany wektor do reprezentowania zarządu.
Hashowany wektor to kolekcja z dwoma drzwiami dostępowymi - jedna dostępna według pozycji, druga dostępna za pomocą klucza. Twój hashed wektor pozwoliłyby na dostęp
- planszę stanie dowiedzieć się, jakie urządzenie jest na pozycji
- id elementu, aby dowiedzieć się, gdzie na płycie jest.
Nie możesz reprezentować planszy jako drzewa, chyba że jest to wielopłaszczyznowa gra planszowa. Drzewo jest potrzebne, gdy masz drzewo, drabinę lub zamek, który siedzi na pozycji planszy, tak, że gdy jednostka osiągnie poziomą pozycję planszy, będzie musiała przejść do pionowej pozycji drabiny lub zamku . A w zamku jednostka musi zostać przekierowana do licznych pomieszczeń. Albo na drzewie jest czarownica zdolna schwytać jednostkę w butelkę z mylącą ścieżką ucieczki. Dlatego użycie struktury drzewa do reprezentowania twojej planszy stanowiłoby niepotrzebną komplikację w programowaniu twojej gry.
Nie ma znaczenia, czy jest kwadratowy z rombu lub koła, itp. Wystarczy wyliczyć położenie planszy. Metoda wyliczania musi być wygodna do przechwytywania twoich reguł.
Oznacza to, że nie należy wyliczać jednej części jako (1,3), a następnie wyliczać sąsiednią część jako (2,7) - to tylko zdrowy rozsądek. Ponieważ sąsiedzi (1,3) to (0,2), (1,2), (2,2), (0,3), (2,3), (0,4), (1,4) i (2,4), ale nie (2,7).
Potrzebny jest zatem dwuwymiarowy haszowany wektor.
, aby zaspokoić swoje potrzeby znalezienia się, jakie urządzenie jest na x, y pozycja swoim pokładzie:
BasicUnit getPosition(x,y)
jak również dowiedzieć się (x, y) Pozycja jednostki.
Position getUnit(BasicUnit unit)
Następnie można zaplanować swoją grę, aby być rozszerzalna tak, że gracz na osiągnięciu zwycięstwa mógł przejść do następnego poziomu grać który ma inny kształt płyty. Twój wektor dwuwymiarowy będzie nadal używany, ponieważ oddzielisz warstwę prezentacji swojego oprogramowania od struktury danych.
Po prostu wstawiasz więcej pozycji do swojego wektora.
Można zobaczyć mój wykonania Java 1-D hashed wektor w http://code.google.com/p/synthfuljava/wiki/HashVector
przełożyć je do wyboru języka programowania i dodać jeszcze jeden wymiar wektora do niego.
Czy możesz przesłać gdzieś rysunek planszy? Nie jestem pewien, czy dobrze zinterpretowałem ci opis. –