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;
- { Функция проверят, влезает ли число в диапазон из 1..8
- Если влезает - вычисляем, иначе - возвращаем обратно step }
- function validateStep(step: byte; n: shortint): byte;
- begin
- validateStep := step + n;
- if (step = 1) and (n < 0) then
- validateStep := 1
- else if (step = 2) and (n < -1) then
- validateStep := 2
- else if (step = 7) and (n > 1) then
- validateStep := 7
- else if (step = 8) and (n > 0) then
- validateStep := 8;
- end;
- { Функция проверки, можно ли ходить дальше
- Если можно - возвращает TRUE, иначе - FALSE }
- function canMove: boolean;
- var randomChoice: byte;
- begin
- canMove := true;
- inc(count);
- if ((table[validateStep(stepX,1), validateStep(stepX,2)]=0) or (table[validateStep(stepX,-1), validateStep(stepX,2)]=0) or
- (table[validateStep(stepX,1), validateStep(stepX,-2)]=0) or (table[validateStep(stepX,-1), validateStep(stepX,-2)]=0) or
- (table[validateStep(stepX,2), validateStep(stepX,1)]=0) or (table[validateStep(stepX,-2), validateStep(stepX,1)]=0) or
- (table[validateStep(stepX,2), validateStep(stepX,-1)]=0) or (table[validateStep(stepX,-2), validateStep(stepX,-1)]=0)) then
- begin
- while(true) do // цикл для подбора подходящего варианта
- begin
- randomChoice := random(8) + 1;
- if (randomChoice = 1) and (table[validateStep(stepX,1),validateStep(stepY,-2)]=0) then
- begin
- inc(stepX);
- dec(stepY, 2);
- break;
- end
- else if (randomChoice = 2) and (table[validateStep(stepX,-1),validateStep(stepY,-2)]=0) then
- begin
- dec(stepX);
- dec(stepY, 2);
- break;
- end
- else if (randomChoice = 3) and (table[validateStep(stepX,1),validateStep(stepY,2)]=0) then
- begin
- inc(stepX);
- inc(stepY, 2);
- break;
- end
- else if (randomChoice = 4) and (table[validateStep(stepX,-1),validateStep(stepY,2)]=0) then
- begin
- dec(stepX);
- inc(stepY, 2);
- break;
- end
- else if (randomChoice = 5) and (table[validateStep(stepX,-2),validateStep(stepY,-1)]=0) then
- begin
- dec(stepX, 2);
- dec(stepY);
- break;
- end
- else if (randomChoice = 6) and (table[validateStep(stepX,2),validateStep(stepY,-1)]=0) then
- begin
- inc(stepX, 2);
- dec(stepY);
- break;
- end
- else if (randomChoice = 7) and (table[validateStep(stepX,-2),validateStep(stepY,1)]=0) then
- begin
- dec(stepX, 2);
- inc(stepY);
- break;
- end
- else if (randomChoice = 8) and (table[validateStep(stepX,2),validateStep(stepY,1)]=0) 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