Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Самоучитель игры на Паскале. АВС и немного Турбо
.pdf
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
