Найди квадрат. For . To . Do - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Друзья, привет. Нужно составить программу, которая решает следующую задачу. В верхнем правом углу стандартного графического окна, линиями рисуется квадратное игровое поле размером 10X10 ячеек. Размер квадратной ячейки задается в программе константой и имеет размер 30X30 пикселей (см. рисунок 01). Компьютер, используя датчик случайных чисел, загадывает два числа в диапазоне от 1 до 10. Первое число — номер горизонтали игрового поля, второе — номер вертикали игрового поля. Таким образом, компьютер загадывает ячейку, которая располагается на пресечении горизонтали и вертикали. Пользователь с 10 попыток должен отыскать загаданную компьютером ячейку. Для этого он вводит с клавиатуры два целых числа номер по горизонтали и номер по вертикали ячейки. Если номера горизонталей и номера вертикалей не совпадают, то в ячейке, указанной пользователем, рисуется перечеркнутый квадрат (см. рисунок 02). Если номера горизонталей или номера вертикалей совпадают, то в ячейке, указанной пользователем, рисуется синий квадрат (см. рисунок 03). Если номера горизонталей и номера вертикалей совпадают, то в ячейке, указанной пользователем, рисуется красный квадрат (см. рисунок 04), выводится сообщение: «Ты выиграл!», и на этом программа завершается. Если же пользователю не удается с 10 попыток определить положение загаданной компьютером ячейки, то выводится сообщение: «Ты проиграл!», в ячейке, загаданной компьютером, рисуется красный квадрат, и на этом программа завершается.

Решение задачи: «Найди квадрат. For . To . Do»

textual
Листинг программы
uses graphABC;
const n=10;
      d=30;
      w=600;
      h=500;
      x0=300;
      y0=0;
var x1,y1,x2,y2,k:integer;
    f:boolean;
begin
setwindowsize(w,h);
centerwindow;
for var i:=0 to 10 do
 begin
  line(x0,y0+i*d,x0+10*d,y0+i*d);
  line(x0+i*d,y0,x0+i*d,y0+10*d);
 end;
 randomize;
 //загаданная ячейка
 y1:=1+random(10);//горизонталь
 x1:=1+random(10);//вертикаль
 k:=-1;
 f:=false;
 repeat
 inc(k);
 setbrushstyle(bsClear);
 textout(0,2*k*20,'Введите номер горизонтали и вертикали');
 readln(y2,x2);//введенная ячейка
 textout(0,2*k*20+20,inttostr(y2)+' '+inttostr(x2));
 setbrushstyle(bsSolid);
 if(x2<>x1)and(y2<>y1)then
  begin
   line(x0+(x2-1)*d,y0+y2*d,x0+x2*d,y0+(y2-1)*d);
   line(x0+(x2-1)*d,y0+(y2-1)*d,x0+x2*d,y0+y2*d);
  end
 else if(x2=x1)xor(y2=y1) then
  begin
   setbrushcolor(clBlue);
   rectangle(x0+(x2-1)*d,y0+(y2-1)*d,x0+x2*d,y0+y2*d);
  end
 else if(x2=x1)and(y2=y1) then
  begin
   setbrushcolor(clRed);
   rectangle(x0+(x2-1)*d,y0+(y2-1)*d,x0+x2*d,y0+y2*d);
   f:=true;
  end; 
until f or (k=10);
setbrushstyle(bsClear); 
setfontsize(12);
if f then 
 begin
  setfontcolor(clRed);
  textout(0,2*(k+1)*20,'Вы выиграли!');
 end
else
 begin
  setfontcolor(clBlue);
  textout(0,2*(k+1)*20,'Вы проиграли...');
  setbrushstyle(bsSolid);
  setbrushcolor(clRed);
  rectangle(x0+(x1-1)*d,y0+(y1-1)*d,x0+x1*d,y0+y1*d);
 end; 
end.

Объяснение кода листинга программы

  1. Объявляются константы и переменные: n, d, w, h, x0, y0, x1, y1, k, f.
  2. Устанавливаются размеры окна: setwindowsize(w, h).
  3. Центрируется окно: centerwindow.
  4. Задается сетка 10x10 квадратов с помощью цикла for и функций line.
  5. Загадывается ячейка с помощью случайного выбора номера горизонтали и вертикали: y1, x1.
  6. Устанавливается начальный цвет заливки и стиля кисти: setbrushstyle(bsClear).
  7. Выводится приглашение для ввода номера горизонтали и вертикали: textout(0,2k20,'Введите номер горизонтали и вертикали').
  8. Считывается введенная ячейка: readln(y2,x2).
  9. Выводится номер введенной ячейки: textout(0,2k20+20,inttostr(y2)+' '+inttostr(x2)).
  10. Устанавливается цвет заливки и стиля кисти: setbrushstyle(bsSolid).
  11. Проверяется, являются ли координаты введенной и загаданной ячеек разными: if(x2<>x1)and(y2<>y1)then.
  12. Если условие выполняется, то выводятся линии, ограничивающие прямоугольник: line(x0+(x2-1)d,y0+y2d,x0+x2d,y0+(y2-1)d);line(x0+(x2-1)d,y0+(y2-1)d,x0+x2d,y0+y2d).
  13. Если условие не выполняется, то проверяется, равны ли координаты введенной и загаданной ячеек: x2=x1 xor y2=y1.
  14. Если условие выполняется, то устанавливается цвет заливки и стиля кисти: setbrushcolor(clRed).
  15. Если условие не выполняется, то устанавливается цвет заливки и стиля кисти: setbrushcolor(clBlue).
  16. Повторяется, пока не будет выполнено условие f или k не станет равным 10.
  17. Выводится сообщение в зависимости от значения переменной f: if f then.
  18. Если условие не выполняется, то выводится сообщение: textout(0,2(k+1)20,'Вы проиграли...').
  19. Если условие выполняется, то выводится сообщение: setfontcolor(clRed);textout(0,2(k+1)20,'Вы выиграли!').
  20. Очищается кисть: setbrushstyle(bsClear).
  21. Устанавливается размер шрифта: setfontsize(12).
  22. Если f=true, то выводится сообщение: setfontcolor(clRed);textout(0,2(k+1)20,'Вы выиграли!').
  23. Если f=false, то выводится сообщение: setfontcolor(clBlue);textout(0,2(k+1)20,'Вы проиграли...').
  24. Выводится прямоугольник вокруг загаданной ячейки: setbrushstyle(bsSolid);setbrushcolor(clRed);rectangle(x0+(x1-1)d,y0+(y1-1)d,x0+x1d,y0+y1d).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.556 из 5
Похожие ответы