Hej,
naszło mnie znowu na rozwijanie swojego programu więc... doszedłem do wniosku, że muszę wszystko przepisać.
Piszę komponent do grania w szachy. Doszedłem do momentu wyszukiwania posunięć, które można legalnie wykonać. Z napisaniem tego nie mam problemu, mam za to problem z DOBRYM napisaniem.
Załóżmy, że sprawdzam możliwe posunięcia dla wieży. Do tej pory miałem to tak rozwiązane, że sprawdzam możliwe ruchy w lewo, w prawo w górę i w dół - każdy kierunek w oddzielnej pętli. Przykład poniżej.
Niby działa ale dla wszystkich kierunków dla jednej tylko figury powstaje potworek na 100 linii.
Poniżej sprawdzenie tylko dla jednego kierunku ale całość wygląda analogicznie. Czy jest możliwość zamknięcie sprawdzenia wszystkich kierunków w jednej pętli albo ogranie tego w inny sposób? (Rekurencja? np z podaniem współrzędnych pola i kroku np x=0, y=-1 ?)
Bardzo proszę o naprowadzenie na rozwiązanie:)
Dodałem komentarze dla połapania się o co chodzi
procedure TBoard.RookMoves(field:TPoint); //dostaje X i Y w tablicy z szachownica
var
color:string;
i:integer;
begin
color:=Board[field.x,field.y].color; //kolor figury
for i:=field.x to 7 do
begin
if (Board[i,field.y].figure='') then //jezeli nic nie stoi na polu dodaje mozliwy ruch
begin
AddPossibleMove(Point(i,field.y));
end
else
begin
if (Board[i,field.y].color=color) then //jezeli moja figura, nie moge stanac
begin
Break;
end
else
begin
AddPossibleMove(Point(i,field.y)); //jezeli figura przeciwnika, moge zbic
Break;
end;
end;
end;
(...)
end;