Показать сообщение отдельно
  #9  
Старый 12.04.2012, 18:30
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Реализация довольно проста. Например:
Игра идёт по клеткам. Можно либо хранить клетки каждого игрока, либо к каждой клетке её состояние. Второе имхо более логично.
Какие бывают состояния?
0 - свободно.
1 - красный крест
2 - красное болото
3 - синий крест
4 - синее болото
5 - зеленый крест
6 - ...
Можно поставить так, но лучше сместить на 1, что было:
-1 - свободно.
0 - красный крест
1 - красное болото
2 - ...
В таком случае принадлежность клетки к игроку вычислить легко как S div 2 (а лучше S shr 1), состояние - как S mod 2 (или S and 1), а -1 - свободно (где S - состояние). Для состояния клетки достаточно 1 байта, поэтому делаем двумерный массив байтов.
На каждом ходу проверям возможность хода:
- Клетка - не болото;
- Рядом с выбранной клеткой должна быть хотя бы одна своего цвета;
- Если эта клетка - болото, то любым алгоритмом наподобие закраски ищем крест нужного цвета в округе (для маленького поля можно даже не париться и сделать рекурсией).
Ну и переходы состояния довольно простые:
- из пустой только в крестик (т.е. S:=N*2, где N - номер игрока);
- из крестика только в болото (т.е. S:=N*2+1).
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием