Пишем игрушку

Выпуск № 1

"Все мы родом из детства…", поэтому и у почти взрослого человека детство иногда еще поигрывает. Так, например, в один прекрасный момент, мне вдруг захотелось написать игру "Змейка". Я думаю, всем она знакома. Разных версий этой игрушки создано вполне достаточно и не было смысла придумывать новую, однако хотелось еще и потешить свое самолюбие: а как это получится у меня? Получилось более или менее сносно… Теперь вдруг захотелось рассказать обо всех этапах написания игры, возможно это вас заинтересует, но не потому, что вы тоже "родом из детства", а просто на основе этого смогли написать что-то свое. И так, приступим. Исходный текст программы можно взять здесь.Вообще, хочу сразу сказать, что более или менее серьезные программы не пишутся только сидя за компьютером. То есть, в процессе разработки следует уделять внимание описанию общих идей реализации программы, на основе свойств отдельных ее частей. Желательно свои по этому поводу куда-то записывать, чтобы потом мучительно долго не вспоминать, какие гениальные идеи посещали вас. С чего же начнем? Вначале выполним "программу-минимум": во-первых, нарисуем поле, где будет ползать наша змейка, во-вторых, просто заставим нашу героиню появиться на нем. Думаю, для начала этого будет достаточно. В данной программе я использовал объекты. Они очень просты, и, думаю, это не помешает вам разобраться в них. Но, если у вас с этим есть некоторые трудности, мы в ту же минуту, от них избавимся, построив все на процедурах. Однако настоятельно рекомендую, потратить некоторое время, и освоить объекты, уверяю вас, что вам это очень пригодится. Но вернемся к нашим "баранам", в смысле "Змейке". Итак, поле. Что оно будет из себя представлять? Очевидно, это просто последовательность мелких, клеток. Этим определяется структура объекта TMainField:
TMainField = object (TObject)
             constructor  Init(m1, n1, m2, n2:byte);
             procedure    Zastavka;
             procedure    DrawAll;
             procedure    DrawOne(x, y: byte);
             destructor   Done;virtual;
        end; 
Метод DrawOne рисует одну клетку, с заданными координатами, а DrawAll - поле целиком. Под координатами мы понимаем не координаты пиксела, а координаты клетки. Это клетка размером fMasshX?fMasshY пикселей. В методе Init мы устанавливаем размеры клеток, координаты углов поля относительно экрана (переменные fMaxY, fMaxX, fMinY, fMinX), и цвет клеток поля (переменная fbkCol). Как работают эти методы, уверен, вам не составит труда разобраться самим. Переменные DX и DY нужны для того, чтобы просто отделить одну клетку поля от другой. Теперь о самой змейке. Пока не будем вдаваться в подробности, для чего нужны все поля метода TSoliter, а выделим те из них, которые нужны для нашей "программы - минимум":

fStartLen - начальная длина змейки;

fLen - текущая длина змейки;

fX, fY - текущие координаты головы;

fCol - цвет змейки.

Поля fX, fY устанавливаются методом SetFields, строки:
fX:=fMinX+((fMaxX-fMinX) shr 1);
fY:=fMinY+((fMaxY-fMinY) shr 1)-(fLen shr 1);
таким образом, змейка окажется ровно по середине поля. Метод DrawSoliter рисует змейку. Теперь у нас есть все для реализации "программы - минимум". Набрав в тексте программы следующий код:
begin
…   
    {Инициализация графического режима}
  MF.Init(1, 1, 20, 20);
  MF.DrawAll;
  Sol.Init(3);
  Sol.SetFields;
  Sol.DrawSoliter;
  Sol.DrawSoliter;
  Sol.Done;
  MF.Done;
ReadLn;
…
end.
Можете быть уверены, что увидите на экране поле, и червячка (правда стоящего на месте). Поэкспериментируйте с этой программой, изменяя различные ее параметры. Советую не торопиться просматривать всю программу целиком, всему придет свое время. На сегодня, пожалуй, хватит. Продолжение этой темы ждите в ближайшее время. А пока дерзайте. Желаю удачи!

[ в начало ]

© Чарышкин Олег

 

Hosted by uCoz