Advertisement
Guest User

chess

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