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