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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
end else if sc = ArrowUp then begin y:=y-1; end else if sc = ArrowDown then begin y:=y+1; end;
Мне нравится.
TP. В чём разница
Поскольку глава очень разнородная, то и разница довльно пёстрая. Указатели в TP полноценные, то есть указывающие на что угодно, иначе просто невозможно писать реальные программы. С часами всё почти так же, но процедура, возвращаюшая текущее время, сдел
ана гораздо корявее. Разберётесь. Вместо FillMem присутствует FillChar. Смысл тот же, но с нюансом. Тот же пример с за
полнением массива нулями будет выглядеть вот так:
FillChar( a, SizeOf(a), #0);
Кстати, не помню, встречалось ли нам уже использование решётки перед числом. Так вот, решётка перед числом переводит его в константу типа char, которая ко
нстанта содержит символ с кодом равным этому
самому числу. Трудно? То есть, #65 во всех отношениях абсолютно эквивалентно ‘A’. Для чего этот полёт фантазии? Только для того, чтобы обойти принципы строгого типизирования данных, изначально заложенные в Паскаль. В данном случае – загнать в определённый байт конкретное числовое значение. Move в TP совершенно стандартный – которым можно сл
омать всё!
241
Дополнение
Всякие важные вещи
Имейте свой стиль
Своего стиля у Вас пока что нет. Так что за неимением своего, будете иметь мой. Да, я понимаю, что это диктатура, задушенная свобода слова и растоптанный нераспустившийся хрупкий цветок юного программистского гения. Как говорил кто-то из императоров, не помню – римских или русских – “Нам не надобны умные, нам на Свободолюбие и своеобразие из юного программиста мы линейкой по пальцам. “Тебя посодют, а ты не воруй” © “Берегись автомобиля”. Спасибо, высказался, полегчало. Теперь знакомимся с моим (теперь Вашим) стилем.
Можете дальнейшее пропустить – если очень уверены в своей правоте.
1. Большие и маленькие буквы (прописные и строчные, тьфу). ленькой буквы. Имеются в
242
a. Все слова Паскаля пишутся с ма
виду слова как зарезервированные (var, begin, end, string, div), так и не зарезервированные (integer, real).
Если сказано, что сл подразумевается, кроме особо оговоренных случаев, что и все остальные буквы в слове тоже маленькие.
b. Все идентификаторы пишутся с маленькой бу
особо оговоренных случаев.
c. Если имя состоит из нескольких слов, второе и последую
слова допустимо начинать с большой буквы
numoflines numOfLines
Также в этом случае допустимо разделять слова символом подчёркивания
num_of_lines num_Of_Lines
ово пишется с маленькой буквы,
добны верные”.
будем выбивать
квы, кроме
щие
d. Имена констант могут начинаться как с большой, так и с
маленькой буквы.
e. Имя программы может писаться с большой или маленькой
буквы.
f. Имена процедур и функций (при объявлении и при вызове)
пишутся с большой буквы.
g. Имена модулей в uses только с большой буквы. h. Имена массивов могут писаться с бо
буквы.
i. В имени типа большими обязательно являются первая буква
T и следующая за ней буква.
TBigArra
2. Объявления
a. Большому кораблюбольшое плавание, маленькому
соответственно. Имена переменных индивидуальных пишутся исключительно с маленькой буквы, имена агрегатов – массивы, классы – допустимо, но не обязательно, с бо
b. i,j используются только для цикла for. c. Не мешайте в именах русский с английским. Et d. Имя типа записи имеет первые две буквы большие (на
правах типа). В конце имеет суффикс Rec TBigRec = record bigArray : TBigArray; end;
e. Имя типа должно начинаться с буквы T. f. Двоеточия в секции var располагаются строго одно под
другим.
g. Каждая переменная объявляется на отд
Однотипные переменны
3. Отступы и позиции
a. Пишутся с левой границы: program, первый (в программе,
процедуре, функции) begin, end., procedure, function, unit, interface, implementation.
y = array[1..60000] of byte;
льшой.
е допускается объявлять совместно.
льшой или маленькой
oIsVulgar.
ельной строке.
243
b. Пишутся с 4-й позиции: uses, const, type, var. c. Невложенные операторы пишутся с 7-й позиции. d. Каждый следующий уровень вложенности выделяется тремя
отступами.
e. Имена объявляемых переменных пишутся с 7-й позиции.
Поля записи объявляются с тремя отступами относительно
record
TBadGirl = record name : string; address : string; reallyBad : boolean; end;
f. При объявлении записи (как типа или непосредственно)
record записы строго под ним.
g. При о
позиции.
4. Оформление процедур a. Начало и конец процедуры выделяются строкой
комментариев { 68 символов “-“ }.
b. Начало и конец вложенной процедуры выделяются строкой
комментариев { 58 символов “.” }.
c. Между двумя процедурами ставится только одна строка
комментариев.
d. Каждый параметр объявляется на отд
Однотипные па строке.
e. Параметры с var объявляются
Пробел – var – пробел – имя – пробел - двоеточие – пробел – тип.
procedure MS( var a : TArray);
f. Параметры без var объявляются
бъявлении переменных двоеточие ставится в 32-й
вается где придётся, соответствующий end
ельной строке.
раметры допускается объявлять на одной
244
Пять пробеловимяпробелдвоеточиепробелтип.
procedure MS( a : TArray);
5. Использование пробелов a. Оператор присваивания пишется без пробелов с обеих
сторон x:=y;
b. В выражении + ивыделяются пробелами. * и / не
выделяются x:=a*b + a/b;
c. При объявлении констант знак равенства выделяется
пробелами с обеих сторон maxNumber = 50;
d. При объявлении тип переменной отделяется от двоеточия
им пробел
одн
e. При вызове процедуры фактические параметры отделяются
пробелом.
f. В секции uses модули перечисляются без пробела перед
запятой, с пробелом после запятой
uses
Crt, Dos, Graph;
g. Двоеточие перед типом функции выделяется пробелами с
обеих сторон
function Something : boolean;
h. Знак отношения в условном операторе выделяется
пробелами
if x > y then SomethingReallyBad;
6. Операторы a. Каждый оп b. В условном операторе begi
ератор пишется на отдельной строке.
ом.
n пишется в той же строке
245
if x > y then begin
c. Условный оператор может быть написан на одной строке,
или then начинается на следующей строке с тремя отступами
if x > y then z:=100; if x > y
then z:=100;
d. Вложенная конструкция ifthenelse записывается
следующим образом
if x < 10 then begin end else if x < 100 then begin
end else
if x < 1000 then begin
end else begin
end;
e. В операторе цикла begin пише
тся в той же строке
for i:=1 to N do begin
7. Прочее a. Порядок следования секций: uses, const, type, var.
Если в процессе чтения этой книги Вам в
каком-то месте встретился текст
программы, не соответствующий этим Высоким Требованиям, будьте уверены – это опечатка. И вообще, я хочу, чтобы все ходили строем. Ну, может, не все. Но программисты – точно.
246
Чем заняться на досуге
1. Запрограммировать Civilization I
2. Запрограммировать крестики нолики на бесконечной доске
3. Доделайте пятнашки. Ведь ерунда осталась
4. Почитайте о фракталах. Дёшево и сердито. В смысле, программировать всего ничего, а результато-го-го!
5. Хочу простенький музыкальный редактор. Нотный стан, под ним
(или по нему) ез
постави
ть ноту (высота и длительность). Возможность задания
дит курсор, клавишами задаём какую в этом месте
общего темпа. Сохранение/восстановление мелодий –
обязательно.
6. Зачем писать программы самому? Напишите мутирующую
программу, которая под воздействием естественного отбора становится способной решить любую задачу, не очень сложную, конечно, пока – например, решить квадратное уравнение. Без
ООП здесь не об
ойтись. Я сам тоже пишу. Для следующей
книжки.
247
Модуль для работы с клавиатурой. TP
unit Scan;
{-------------------------------------------------------------------}
interface
{--------------------------- Scan Codes ------------------------}
const ArrowLeft = 75; ArrowRight = 77; ArrowDown = 80; ArrowUp = 72; PgUp = 73; PgDn = 81; Enter = 28; Esc = 1; Bksp = 14; SpaceBar = 57; Del = 83; Ins = 82; Ctrl = 29; Alt = 56; Tab = 15; Home = $47; kEnd = $4F; LShift = $2A; RShift = $36; GrayMinus = $4A; GrayPlus = $4E;
F1 = 59; F2 = 60; F3 = 61; F4 = 62; F5 = 63; F6 = 64; F7 = 65; F8 = 66; F9 = 67; F10 = 68; F11 = $85; F12 = $86;
F1Shift = $54; F2Shift = $55; F3Shift = $56; F4Shift = $57; F5Shift = $58; F6Shift = $59; F7Shift = $5A; F8Shift = $5B; F9Shift = $5C; F10Shift = $5D; F11Shift = $87; F12Shift = $88;
ch0 = $0B; ch1 = $02; ch2 = $03; ch3 = $04; ch4 = $05; ch5 = $06; ch6 = $07; ch7 = $08; ch8 = $09; ch9 = $0A;
chA = $1E; chS = $1F; chD = $20; chF = $21; chQ = $10; chW = $11; chE = $12; chRr = $13; chT = $14; chY = $15; chU = $16; chI = $17; chO = $18; chP = $19; chZ = $2C; chX = $2D; chC = $2E; chV = $2F; chG = $22; chH = $23;
248
chJ = $24; chK = $25; chL = $26; chB = $30; chN = $31; chM = $32;
CtrlF1 = $5E; CtrlF2 = $5F; CtrlF3 = $60; CtrlF4 = $61; CtrlF5 = $62; CtrlF6 = $63; CtrlF7 = $64; CtrlF8 = $65; CtrlF9 = $66; CtrlF10 = $67; CtrlF11 = $89; CtrlF12 = $8A;
CtrlTab = $94; CtrlArrowLeft = 115; CtrlArrowRight = 116; CtrlArrowUp = 141; CtrlArrowDown = 145; CtrlHome = $77; CtrlEnd = $75; CtrlPgDn = $76; CtrlPgUp = $84;
AltF1 = $68; AltF2 = $69; AltF3 = $6A; AltF4 = $6B; AltF5 = $6C; AltF6 = $6D; AltF7 = $6E; AltF8 = $6F; AltF9 = $70; AltF10 = $71; AltF11 = $8B; AltF12 = $8C;
Alt0 = $81; Alt1 = $78; Alt2 = $79; Alt3 = $7A; Alt4 = $7B; Alt5 = $7C; Alt6 = $7D; Alt7 = $7E; Alt8 = $7F; Alt9 = $80;
AltLeft = $9B; AltRight = $9D; AltDown = $A0; AltUp = $98; AltPgUp = $99; AltPgDn = $A1; AltEnter = $1C; AltDel = $A3; AltIns = $A2; AltTab = $A5; AltHome = $97; AltEnd = $9F;
AltX = $2D; {-------------------------------------------------------------------}
function OurKeyPressed : boolean; function OurReadKey : byte;
{-------------------------------------------------------------------}
implementation uses
Dos; {-------------------------------------------------------------------}
249
function OurKeyPressed : boolean; var R : Registers;
begin
R.ah:=1; Intr( $16, R); if (R.flags and fZero) <> 0 then OurKeyPressed:=false else OurKeyPressed:=true; end; {-------------------------------------------------------------------} function OurReadKey : byte; var R : Registers; ch : char; sc : byte;
begin
R.ah:=0; Intr( $16, R); ch:=Chr(R.al); sc:=R.ah; Our ReadKey:=sc; end; {-------------------------------------------------------------------} end.
Чтобы два раза не вставать (это я о графике), вот так выглядит тело главной программы про крестики нолики в TP:
program Tic;
uses Dos, Graph, Scan; const X0 = 200; Y0 = 100; S = 100; type
250
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]