Найди квадрат. 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.
Объяснение кода листинга программы
- Объявляются константы и переменные: n, d, w, h, x0, y0, x1, y1, k, f.
- Устанавливаются размеры окна: setwindowsize(w, h).
- Центрируется окно: centerwindow.
- Задается сетка 10x10 квадратов с помощью цикла for и функций line.
- Загадывается ячейка с помощью случайного выбора номера горизонтали и вертикали: y1, x1.
- Устанавливается начальный цвет заливки и стиля кисти: setbrushstyle(bsClear).
- Выводится приглашение для ввода номера горизонтали и вертикали: textout(0,2k20,'Введите номер горизонтали и вертикали').
- Считывается введенная ячейка: readln(y2,x2).
- Выводится номер введенной ячейки: textout(0,2k20+20,inttostr(y2)+' '+inttostr(x2)).
- Устанавливается цвет заливки и стиля кисти: setbrushstyle(bsSolid).
- Проверяется, являются ли координаты введенной и загаданной ячеек разными: if(x2<>x1)and(y2<>y1)then.
- Если условие выполняется, то выводятся линии, ограничивающие прямоугольник: 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).
- Если условие не выполняется, то проверяется, равны ли координаты введенной и загаданной ячеек: x2=x1 xor y2=y1.
- Если условие выполняется, то устанавливается цвет заливки и стиля кисти: setbrushcolor(clRed).
- Если условие не выполняется, то устанавливается цвет заливки и стиля кисти: setbrushcolor(clBlue).
- Повторяется, пока не будет выполнено условие f или k не станет равным 10.
- Выводится сообщение в зависимости от значения переменной f: if f then.
- Если условие не выполняется, то выводится сообщение: textout(0,2(k+1)20,'Вы проиграли...').
- Если условие выполняется, то выводится сообщение: setfontcolor(clRed);textout(0,2(k+1)20,'Вы выиграли!').
- Очищается кисть: setbrushstyle(bsClear).
- Устанавливается размер шрифта: setfontsize(12).
- Если f=true, то выводится сообщение: setfontcolor(clRed);textout(0,2(k+1)20,'Вы выиграли!').
- Если f=false, то выводится сообщение: setfontcolor(clBlue);textout(0,2(k+1)20,'Вы проиграли...').
- Выводится прямоугольник вокруг загаданной ячейки: setbrushstyle(bsSolid);setbrushcolor(clRed);rectangle(x0+(x1-1)d,y0+(y1-1)d,x0+x1d,y0+y1d).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д