Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Самоучитель игры на Паскале. АВС и немного Турбо

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
program Test; uses Crt;
var
a,b,sum : integer;
begin
a:=2;
b:=3; Write(‘How many is ‘,a,’+’,b,’ ‘); Readln(sum);
if sum=a+b then Writeln(‘Ok’) else Writeln(‘Very very bad’); end.
Вместо
a:=2; b:=3;
пишем
a:=Random(100); b:=Random(100);
Random(N) – функция, возвращающая случайное целое число в диапазоне от 0 до N-1, в нашем случае от 0 до 99.
Обратите внимание – не до 100, а до 99. Для нашей программы это совершенно безразлично, но в некоторых случаях становится принципиально важным. Позже к этому в
И ещё – в начало программы, где-нибудь в волшебное слово Randomize; - без него Random будет возвращать одни нули. Randomize надо вызвать один ровно один раз до самого первого использования Random. В конечном итоге программа приобретает вот такой вид:
ернёмся.
районе ClrScr надо добавить
51
program Test; uses
Crt;
var
a,b,sum : integer;
begin
Randomize; a:=Random(100);
b:=Random(100);
Write(‘How many is ‘,a,’+’,b,’ ‘);
Readln(sum);
if sum=a+b then Writeln(‘Ok’) else Writeln(‘Very very bad’); end.
Каждый раз при запуске программы на экране будет появляться новый пример, но только один. К программе этой мы позже ещё вернёмся, с целью её дальнейшего усовершенствования и развития.
На чём попрактиковаться? Маленькая, но вредненькая задачка. Решите квадратное уравнение. На вход программы – три коэффициента A,B,C. На выходе – корни уравнения. Ил Формул
у найдите сами. Или вспомните.
и умозаключение об их отсутствии.
Справились? Теперь прогоните программу на следующих тестах. Далее коэффициенты A,B,C и результат, который Вы должны получить.
2 5 2 X
2 4 2 X
= -2 X2 = -0.5
1
= -1
1,2
2 1 2 корней нет
0 3 6 X
1,2
= -2
0 0 3 корней нет
0 0 0 тождество
52
TP. В чём разница
Да, пожалуй, вообще ни в чём. Если Вы что-то обнаружите, сообщите мне, пожалуйста.
53
Глава 4, очень простая.
Немного графики
Начальные заклинания
Глава действительно очень простая – просто будем рисовать картинки. Но сначала придётся выучить несколько заклинаний, понимать их необязательно (это, конечно, непедагогично, я понимаю). Чуть-чуть теории – монитор отображает данные в или в текстовом режиме, или в графическом.
Текстовый режим на самом деле, конечно, тоже в глубине души графический, но для нас это совершенно неважно.
Давным-давно назад мы написали программу, которая ничего не дел Не делала она ничего в ничего не делающую в графическом режиме.
program Gr; uses GraphABC;
begin
{ а вот тут что-нибудь потом нарисуем} end.
Написали. Запустили. Получили. А что получили? П (пустое), один в делающей программы. Так и задумано.
текстовом режиме. А теперь пишем программу,
олучили окно
один совпадающее с окном текстовой, ничего не
Точки, линии и окружности
ала.
Как положено в геометрии, начнём с точек. В данном программистском случае – занятие малопродуктивное с прикладной точки зрения и малополезное с точки зрения педагогической. Перевожу – в жизни рисовать точки вряд ли п на всё остальное способом, так что ничему полезному не научимся. Но надо, так надо.
54
ридётся, а рисуются они совершенно не
похожим
Точки нумеруются по горизонтали слева направо, по вертикали сверху вниз. Одна экранная точка, зажжённая или нет, часто называется пиксел (или пиксель).
Рисуем зелёную точку где-то посредине экрана:
SetPixel(320,240, clGreen);
Мучительно ищем её – потому что зелёную точку на белом фоне видно ну очень плохо. Первое число – координата по X, второе – координата по Y. Далее цвет. С цветами всё так же, как и в текстов пришлось написать clGr
een. Так и со всеми остальными цветами –
ом режиме. Только вот вместо Green
придётся добавлять спереди две буковки. Вот, собственно, и всё о точках. А заодно, чтобы два раза не вставать, список наиболее употребительных цветов, точнее тех, которые имеют свои собственные имена:
clBlack черный clPurple фиолетовый clWhite белый clMaroon темно-красный clRed красный clNavy темно-
синий clGreen зеленый clBrown коричневый clBlue синий clSkyBlue голубой clYellow желтый clCream кремовый clAqua бирюзовый clOlive оливковый clFuchsia сиреневый clTeal сине-зеленый clGray темно-серый clLime ярко-зеленый clMoneyGreen цвет зелёных денег clLtGray светло-серый
55
clDkGray темно-серый clMedGray серый clSilver серебряный
Названия цветов иногда очень странные, но это не я виноват. Переходим к линиям. Если точка (на плоскости) задаётся двумя числами, то линия, как известно, четырьмя.
Line(100,100, 200,200);
Получили линию, идущую направо вниз под сорок пять градусов. Первые два числа – координаты начала линии, вторые два – координаты конца линии. Если написать
Line(200,200, 100,100) – получим абсол
ютно тот же результат - какая разница, с какого конца линию начинать рисовать. А теперь квадрат, с левым верхним углом в точке (100,100) и сторон
ой
100.
Сначала верхняя сторона – горизонтальная. Раз линия горизонтальная, то координата Y неизменна, меняется только X.
Line(100,100, 200,100);
Теперь правая – вертикальная. Теперь наоборот – X неизменна, Y меняется. А начинается она там, где кончается ве
рхняя сторона – в точке
(200,100).
Line(200,100, 200,200);
Продол
жаем в то же духе и в итоге имеем искомый квадрат:
Line(100,100, 200,100); Line(200,100, 200,200); Line(200,200, 100,200); Line(100,200, 100,100);
56
Квадрат у нас уныло чёрный. Хотелось бы чего-нибудь поживее. Вспоминаем текстовый режим и команду TextColor. Всё аналогично, только команда называется SetPenColor. Цвета, естественно, всё те же, с поправкой на две буковки «cl» спереди. И точно так же, заданный цвет действует только на то, что рисуется после задания цвета, не до.
Зелёный кв
SetPenColor(clGr Line(100,100, 200,100); Line(200,100, 200,200); Line(200,200, 100,200); Line(100,200, 100,100);
Задание – самостоятельно нарисовать треугольник.
Теперь обещанная в заголовке окружность. На всякий случай вспоминаем, чем окружность отличается от круга. Рисуем окружность где-то примерно в центре экрана радиусом 100.
Circle(320,240, 100);
Первые два числа – координаты центра, третье число – радиус.
А теперь голубенькую:
SetPenColor(clBlue); Circle(320,240, 100);
В общем, всё очень просто.
адрат:
een);
Прямоугольнички и кр
ужочки
Помните, с чего мы начали при вывода вывели, намусорили, потом решили почистить окно. Сейчас то же самое – только попутно освоим ещё кое-что полезное.
выводе текста? Сначала что-то в окно
57
Пишем:
Rectangle(200,200, 400,300);
Получили заполненный белым цветом прямоугольник размером 200 по горизонтали и 100 по вертикали с верхним левым углом в точке (200,200). Первая пара чисел – координаты левого верхнего угла, это всем понятно. Не всем понятно, что вторая пара чисел это не размеры сторон нашего прямоугольника, а тоже координаты, но только правого нижнего угла. Теперь будем красить. К с поможет. Чтобы закрасить прямоугольник, придётся написать чуть-чуть другой оператор:
SetBrushColor(clGreen);
Всё хорошо, кроме рамочки – рамочка чёрная. А надо зелёную. А теперь – всё сразу!
SetBrushColor(clGreen); SetPenColor(clGreen); Rectangle(200,200, 400,300);
И никогда я не устану напоминать, потому что обучающиеся никогда не устанут забывать, что СНАЧАЛА задаём цвет, а по наоборот почему-то не работает.
И, само собой, все эти совсем вовсе не операторы, но мы будем звать их именно так.
А теперь поставим перед собой задачу - почистить всё окно до абсолютно черного цвета. Да, я знаю, что для этого есть специальная команда. Но мы же не ищем лёгких пу Мы закрасим всё окно, руками, чёрным цве окно, надо узнать размеры всего окна. И вот они:
WindowWidth ширина окна WindowHeight высота окна.
слова – SetBrushColor, SetPenColor, Rectangle –
тей, зато узнаем кое-что новое.
ожалению, SetPenCol
том. Но что бы закрасить всё
or(clGreen) нам не
том рисуем. А
58
И программа: SetBrushColor(clBlack); SetPenColor(clBlack); Rectangle(0,0, WindowWidth,WindowHeight);
Кажется, работает.
Обещанных в заголовке кружочков не будет. На самом деле они там есть. Но Вы же помните? Мы не ищем лёгких путей! Чтобы нарисовать круг, надо вызвать функцию Circle И передать ей в качестве параметров центр и радиус круга. Это слишком просто для нас.
Кстати, оцените, насколько небр употребляем такие сл процедуру. И это неспроста. Потому что в данном случае смысл их абсолютно один и тот же. И вообще, как сказал кто-то – «Во многих знаниях – многие печали».
А мы будем рисовать эллипс. Эллипс – это то же самое, что круг, на который наступили. В смысле наступили ботинком и сплющили. По другому эллипс называется овал. С точ как и у круга, есть центр и радиус, только не один, а два. На этом месте всякий нормальный человек ожидает вызова процедуры Ellipse с первыми двумя параметрами, представляющими центр эллипса, и с двумя последними, задающими два радиуса. Я бы хотел сказ лёгких путей, но здесь это не я не ищу лёгких путей – их не ищут создатели Turbo Pascal, они же создатели Borland Del творцы Pascal ABC. Итак, медленно и торжественно, чтобы нарисовать эллипс мы должны задать координаты левого верхнего и правого нижнего угла прямоугольника, в который этот эллипс вписан. Нравится? То-то! Я мучился, и вы помучайтесь, как говорила Мать Терез приблизительно так.
Рисуем: Ellipse(320, 240, 200,100) – большой такой эллипс, вытянутый по горизонтали. Ellipse(320,240, 100,100) – частный случай эллипса – круг.
ова как оператор, команда, функция. Добавить ещё
ежно, мимоходом и вперемешку мы
ки зрения математики у эллипса,
ать, что я не ищу
phi, а вслед за ними и
а. Ну или
59
И то и другое, разумеется, белое. Покраска круга не отличается от покраски прямоугольника. SetPenColor покрасит контур круга (окружность), а за внутренности отвечает SetBrushColor.
В Delphi в таких случаях используются метафоры пера и кисти. Перо отвечает за проведение линий, а кисть закрашивает сразу поверхности. Здесь мы видим примерно то же самое, только в Delphi это оформлено в форме объектов.
Красив
ые буковки
Чтобы не мучаться, технологию вывода текста излагаем сраз
у, одим
куском:
SetFontColor(clBlue); SetFontName('Times New Roman'); SetFontSize(16); TextOut( 100,100, 'Uuu');
Первая строка очень даже знакомая – похожим способом задаётся цвет текста. Вторая и третья ничуть не сложнее – это имя шрифта, выбранное из доступных в Windows, и размер шрифта. Диапазон изменения для каждого шрифта свой. Эффект влияния для каждого шрифта – тоже св
ой, то есть какой-то шрифт второго размера запросто может оказаться больше какого-то другого шрифта пятого размера. Последняя строка – собственно выво
д текста. Третий параметр понятен сразу – это сам текст, а вот первые два требуют крайнего умственного напряжения – это левый верхний угол прямоугольника, в который вписан выводимый текст. Или, говоря проще, левый верхний угол
нашего текста.
Что там ещё осталось?
Ещё кое-что полезное вдогонку ранее освоенному. Линию уже выводили. И цвет её задавали. А теперь толщина линии и стиль. Вот так – линия толстая:
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]