Advertisement
Guest User

Chess#2

a guest
Sep 18th, 2015
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.78 KB | None | 0 0
  1. program Shahmaty;
  2. uses crt;
  3.  
  4. type table8x8 = array [1..8, 1..8] of byte;
  5.  
  6. var table: table8x8; i, j, stepX, stepY, count: byte;
  7. { Процедура вывода шахматной доски }
  8. procedure writeTable;
  9. begin
  10.     clrscr;
  11.     writeln('Ход №', count, ':');
  12.     writeln; writeln;
  13.     for i := 1 to 8 do
  14.     begin
  15.         for j := 1 to 8 do
  16.             write(table[i,j]:3);
  17.         writeln; writeln;
  18.     end;
  19.     readkey; // Ходим по Enter
  20. end;
  21.  
  22. { Функция проверят, не выходим ли мы за рамки доски и не занята ли клетка
  23.   Если все соблюдено - TRUE, иначе - FALSE }
  24. function isValidStep(x, y: shortint): boolean;
  25. begin
  26.     isValidStep := true;
  27.     if ((stepX = 1) and (x < 0)) or ((stepX = 2) and (x < -1)) or
  28.     ((stepX = 7) and (x > 1)) or ((stepX = 8) and (x > 0)) or
  29.     ((stepY = 1) and (y < 0)) or ((stepY = 2) and (y < -1)) or
  30.     ((stepY = 7) and (y > 1)) or ((stepY = 8) and (y > 0)) or
  31.     (table[stepX+x, stepY+y] <> 0) then
  32.         isValidStep := false;
  33. end;
  34.  
  35. { Функция проверки, можно ли ходить дальше
  36.   Если можно - возвращает TRUE, иначе - FALSE }
  37. function canMove: boolean;
  38. var randomChoice: byte;
  39. begin
  40.     canMove := true;
  41.     inc(count);
  42.     if isValidStep(1,2) or isValidStep(-1,2) or isValidStep(1,-2) or isValidStep(-1,-2) or
  43.      isValidStep(2,1) or isValidStep(-2,1) or isValidStep(2,-1) or isValidStep(-2,-1) then
  44.     begin
  45.         while(true) do // цикл для подбора подходящего варианта
  46.         begin
  47.             randomChoice := random(8) + 1;
  48.             if (randomChoice = 1) and isValidStep(1,-2) then
  49.             begin
  50.                 inc(stepX);
  51.                 dec(stepY, 2);
  52.                 break;
  53.             end
  54.             else if (randomChoice = 2) and isValidStep(-1,-2) then
  55.             begin
  56.                 dec(stepX);
  57.                 dec(stepY, 2);
  58.                 break;
  59.             end
  60.             else if (randomChoice = 3) and isValidStep(1,2) then
  61.             begin
  62.                 inc(stepX);
  63.                 inc(stepY, 2);
  64.                 break;
  65.             end
  66.             else if (randomChoice = 4) and isValidStep(-1,2) then
  67.             begin
  68.                 dec(stepX);
  69.                 inc(stepY, 2);
  70.                 break;
  71.             end
  72.             else if (randomChoice = 5) and isValidStep(-2,-1) then
  73.             begin
  74.                 dec(stepX, 2);
  75.                 dec(stepY);
  76.                 break;
  77.             end
  78.             else if (randomChoice = 6) and isValidStep(2,-1) then
  79.             begin
  80.                 inc(stepX, 2);
  81.                 dec(stepY);
  82.                 break;
  83.             end
  84.             else if (randomChoice = 7) and isValidStep(-2,1) then
  85.             begin
  86.                 dec(stepX, 2);
  87.                 inc(stepY);
  88.                 break;
  89.             end
  90.             else if (randomChoice = 8) and isValidStep(2,1) then
  91.             begin
  92.                 inc(stepX, 2);
  93.                 inc(stepY);
  94.                 break;
  95.             end;
  96.         end;
  97.     end
  98.     else
  99.     begin
  100.         dec(count); // Если не можем ходить - возвращаем кол-во ходов обратно для отображения получившихся
  101.         canMove := false; // и возвращаем FALSE
  102.     end;
  103.     table[stepX, stepY] := count;
  104. end;
  105.  
  106. begin
  107.     randomize;
  108.     count := 1;
  109.     stepX := random(8) + 1; { Загадываем начальную позицию коня }
  110.     stepY := random(8) + 1;
  111.     table[stepX, stepY] := count;
  112.     writeTable;
  113.     while canMove do
  114.         writeTable;
  115.     writeln('Количество ходов: ', count);
  116.     readkey;
  117. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement