Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Shahmaty;
- uses crt;
- type table8x8 = array [1..8, 1..8] of byte;
- var table: table8x8; i, j, stepX, stepY, count: byte;
- { Процедура вывода шахматной доски }
- procedure writeTable;
- begin
- clrscr;
- writeln('Ход №', count, ':');
- writeln; writeln;
- for i := 1 to 8 do
- begin
- for j := 1 to 8 do
- write(table[i,j]:3);
- writeln; writeln;
- end;
- readkey; // Ходим по Enter
- end;
- { Функция проверят, не выходим ли мы за рамки доски и не занята ли клетка
- Если все соблюдено - TRUE, иначе - FALSE }
- function isValidStep(x, y: shortint): boolean;
- begin
- isValidStep := true;
- if ((stepX = 1) and (x < 0)) or ((stepX = 2) and (x < -1)) or
- ((stepX = 7) and (x > 1)) or ((stepX = 8) and (x > 0)) or
- ((stepY = 1) and (y < 0)) or ((stepY = 2) and (y < -1)) or
- ((stepY = 7) and (y > 1)) or ((stepY = 8) and (y > 0)) or
- (table[stepX+x, stepY+y] <> 0) then
- isValidStep := false;
- end;
- { Функция проверки, можно ли ходить дальше
- Если можно - возвращает TRUE, иначе - FALSE }
- function canMove: boolean;
- var randomChoice: byte;
- begin
- canMove := true;
- inc(count);
- if isValidStep(1,2) or isValidStep(-1,2) or isValidStep(1,-2) or isValidStep(-1,-2) or
- isValidStep(2,1) or isValidStep(-2,1) or isValidStep(2,-1) or isValidStep(-2,-1) then
- begin
- while(true) do // цикл для подбора подходящего варианта
- begin
- randomChoice := random(8) + 1;
- if (randomChoice = 1) and isValidStep(1,-2) then
- begin
- inc(stepX);
- dec(stepY, 2);
- break;
- end
- else if (randomChoice = 2) and isValidStep(-1,-2) then
- begin
- dec(stepX);
- dec(stepY, 2);
- break;
- end
- else if (randomChoice = 3) and isValidStep(1,2) then
- begin
- inc(stepX);
- inc(stepY, 2);
- break;
- end
- else if (randomChoice = 4) and isValidStep(-1,2) then
- begin
- dec(stepX);
- inc(stepY, 2);
- break;
- end
- else if (randomChoice = 5) and isValidStep(-2,-1) then
- begin
- dec(stepX, 2);
- dec(stepY);
- break;
- end
- else if (randomChoice = 6) and isValidStep(2,-1) then
- begin
- inc(stepX, 2);
- dec(stepY);
- break;
- end
- else if (randomChoice = 7) and isValidStep(-2,1) then
- begin
- dec(stepX, 2);
- inc(stepY);
- break;
- end
- else if (randomChoice = 8) and isValidStep(2,1) then
- begin
- inc(stepX, 2);
- inc(stepY);
- break;
- end;
- end;
- end
- else
- begin
- dec(count); // Если не можем ходить - возвращаем кол-во ходов обратно для отображения получившихся
- canMove := false; // и возвращаем FALSE
- end;
- table[stepX, stepY] := count;
- end;
- begin
- randomize;
- count := 1;
- stepX := random(8) + 1; { Загадываем начальную позицию коня }
- stepY := random(8) + 1;
- table[stepX, stepY] := count;
- writeTable;
- while canMove do
- writeTable;
- writeln('Количество ходов: ', count);
- readkey;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement