Вы должны принять во внимание состояние доски для этого. Я думаю, что общий способ сделать это - проверить, пуста ли каждая ячейка на пути.
public enum PieceColor { Black, White }
public interface IBoard
{
bool IsEmpty(int x, int y);
PieceColor GetPieceColor(int x, int y);
}
IBoard board;
bool BishopCanMove(PieceColor bishopColor, int fromX, int fromY, int toX, int toY)
{
int pathLength = Mathf.Abs(toX - fromX);
if (pathLength != Mathf.Abs(toY - fromY)) return false; // Not diagonal
// Also validate if the coordinates are in the 0-7 range
// Check all cells before the target
for (int i = 1; i < pathLength; i++)
{
int x = fromX + i;
int y = fromY + i;
if(board.IsEmpty(x, y)) continue; // No obstacles here: keep going
else return false; // Obstacle found before reaching target: the move is invalid
}
// Check target cell
if (board.IsEmpty(toX, toY)) return true; // No piece: move is valid
// There's a piece here: the move is valid only if we can capture
return board.GetPieceColor(toX, toY) == bishopColor;
}
Интерфейс IBoard
здесь только для того, чтобы показать точку. У вас должно быть состояние правления, которое каким-то образом раскрывает эту информацию.
Я бы посмотрел на использование приложения django-поршень http://bitbucket.org/jespern/django-piston/wiki/Home , если безопасность является вашей главной заботой.
В прошлом я использовал django-rest-interface, его надежный и хотя простой может быть довольно мощным, однако django-поршень кажется более гибким в будущем.
Ну, от вида вещей существует authentication
параметр к Collection
. (см. этот пример: authentication.py)
login_required
и permission_required
декораторы в urls.py.
Даже с Параметром аутентификации, Вы не имеете мелкомодульного контроля над тем, что могут сделать люди. Текущая реализация интерфейса Django-REST не отслеживает информацию о пользователе, таким образом, Вы не имеете эту информацию в наличии для того, чтобы сделать мелкомодульные проверки авторизации.
Видят Выпуск № 32 .
Однако, относительно легко расширить его для добавления некоторых опций. Я использую много подклассов для добавления опций.
Обновление запроса с данными для входа, однако, хитро в Django. Вместо того, чтобы делать это, я оставляю информацию в Наборе.
Прямо сейчас, я оценил бы, что между патчами и подклассами, что я записал, является почти столь же большим как прокрутка моих собственных функций представления RESTful.
Django-REST, однако, корректно и аккуратно обрабатывает Дайджест-аутентификацию HTTP. Я не надеюсь заменить их некоторым декоратором для моих функций представления Django.
[Возможно, мы должны открыть исходный проект штамповочного пресса и разработать чистую замену?]