Создание компьютерной игры

Методика и основные этапы разработки стратегической игры, ее элементы и принцип работы программы. Порядок построения информационной модели. Диаграмма потоков данных и действий. Выбор языка программирования и его обоснование. Критерии качества среды.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 11.12.2012
Размер файла 3,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Введение

Цель настоящей курсовой работы по дисциплине «Объектно-ориентированное программирование» - детальное проектирование и программная реализация противоборства, в котором в соответствии с вариантом задания реализуются процессы создания и взаимодействия объектов.

Программа написана на языке программирования Borland C++ Builder, с использованием объектно-ориентированного программирования и проектирования.

Использование ООП позволяет обойти ряд сложных проблем в программировании с минимальными потерями, сводя необходимую модификацию программы к её расширению и дополнению.

Систематическое применение объектно-ориентированного подхода позволяет разрабатывать достаточно хорошо структурированные, надежные в эксплуатации, просто модифицируемые программные системы. Элементы объектно-ориентированного программирования получили своё развитие, и в настоящее время ООП принадлежит к числу ведущих технологий программирования.

1. Постановка задачи

1.1 Цель работы

Технология объектно-ориентированного программирования - один из современных методов реализации программных систем. Наиболее эффективно применение объектного подхода для больших программных систем, со сложным характером взаимодействия значительного количества элементов.

Исследованиям этих вопросов и посвящена настоящая курсовая работа.

Рассматриваемые модели учитывают влияние различных факторов на многие элементы системы. Таким образом, цель настоящей курсовой работы - проектирование и программная реализация стратегии поведения системы, которая в соответствии с заданным вариантом реализует процессы создания и взаимодействия группы объектов.

По варианту задания на базе объектного подхода необходимо спроектировать и разработать модель стратегической игры - противоборство.

1.2. Описательная постановка задачи

Стратегия игры состоит в следующем:

Существует множество объектов различного вида и типа, которые взаимодействуют между собой. Перемещая главного героя нужно добиться поставленной задачи (собрать все ключи), минуя врагов, мины и другие препятствия. Достижение результата происходит при прохождении последнего уровня и возвращения на начальную позицию.

Предполагается оконный интерфейс и организация меню, которое было бы привычным пользователю пакета Microsoft Windows. Основное игровое окно должно содержать картинку, разбитую на части.

1.3 Ограничения, условия функционирования и выполнения

Персональный компьютер пользователя должен соответствовать минимальным требованиям: процессор Intel Pentium II/400 MHz, Microsoft Windows 98/2000/XP (SP2), 256 МВ RAM, 20 МВ свободного места на жестком диске, монитор SVGA (разрешение экрана 800Ч640, 256 цветов), наличие мыши.

Игра предназначается для одного пользователя. Игра имеет следующие ограничения: два уровня сложности, которыми задаются способ передвижения главного героя.

2. Разработка объектной модели

2.1 Абстрагирование и выделение объектов

Объектом в данной информационной модели является:

- главный герой со следующими атрибутами: количество жизней, максимально возможное количество жизней, координаты на игровом поле.

- карта, со следующими атрибутами: координаты игрового поля, пауза, режим игры, возможность сохранения.

- враги, со следующими атрибутами: начальное количество объектов каждого типа у каждой воюющей стороны, общее количество врагов, координаты врагов на карте.

стратегический программа игра информационный

2.2 Построение информационной модели

Рисунок 2.2 - Информационная модель

2.3 Жизненный цикл программы

При запуске исполняемого файла проекта загружается основное окно игры. Повляется стартовый экран, при нажатии на любую клавишу начинается игра.

Следовательно, можно выделить следующие состояния программы:

S1 - Запуск программы;

S2 - Создание нового файла;

S3 - Создание уровня

S4 - Обработка данных;

S5 - Сохранение;

S6 - Выход из программы.

Жизненный цикл программы изображен на рисунке 2.3.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рисунок 2.3 - Жизненный цикл программы

2.4 Жизненный цикл объекта

Рассмотрим жизненный цикл объекта «Главный герой».

Рисунок 2.4 - Жизненный цикл объекта

Описание иллюстрации жизненного цикла объекта:

S1 - Создание объекта;

S2 - Не активен (ожидание действия);

S3 - Действие (перемещение);

S4 - Взаимодействие с другими объектами;

S5 - Ожидание действия;

S6 - Уничтожение объекта.

2.5 Диаграмма переходов состояний

Рисунок 2.5 - Диаграмма переходов состояний.

Описание диаграммы:

S1 - Запуск программы;

S2 - Инициализация объектов;

S3 - Создание объектов;

S4 - Перемещение объектов;

S5 - Результат игры;

S6 - Конец программы;

2.6 Диаграмма потоков данных и действий

Рисунок 2.6 - Диаграмма потоков состояния «ожидания действия» объекта.

Диаграмма иллюстрирует переход из состояния в состояние.

В состояние «ожидание действия» поступает информация о текущих координатах объектов (главного героя, врагов, мин, стен). Из «ожидания действия» в «проверку состояния» поступают аналогичные данные. В состояние «перемещение объектов» поступают координаты и вероятность правильного размещения объекта на игровом поле.

2.7 Построение иерархии классов

Рисунок 2.7 - Иерархия классов.

Рассмотрим данную иерархию.

Корнем иерархии являються объекты классов map, gg, enemyA далее по иерархии наследниками класса map является класс obj, от него идут классы go и mine, наследник класса enemyA является класс enemyB. Следующей ступенью иерархии являются классы key, liv - наследники класса go.

Класс gg содержит следующие свойства:

int x int y - текущие координаты;

bool left, right, up, down - переменные для второго типа движения

Класс map содержит следующие свойства:

gBitmap = new Graphics:TBitmap(); - загружаемые изображения

FILE *f2, *sg; - файлы, используемые для сохранения и считывания

int a[10] [10]; - массив карты

bool mod, levelup - переменные перехода на следующие уровень и другой тип движения.

Класс EnemyA cсодержит следующие свойства:

int x1, y1, x3, y3, aa - перменные-координаты и вспомогательная переменная, используемая при движении.

3. Программная реализация

3.1 Обоснование выбора языка программирования

В соответствии с заданием на курсовой проект, для написания программного продукта следует использовать язык высокого уровня, с использованием объектного подхода. Выбор был сделан в пользу языка С++ и среды программирования С++ Builder 6.0. Эта версия хотя не самая новая, однако, проста и надежна в применении.

С++ Builder - программный продукт, инструмент быстрой разработки приложений (RAD), интегрированная среда программирования (IDE), система, используемая программистами для разработки программного обеспечения на языке С++. Изначально продукт разрабатывался компанией Borland Software, а затем ее подразделением CodeGear, которое сейчас принадлежит компании Embarcadero Technologies. С++ Builder объединяет в себе комплекс объектных библиотек (STL, VLC, CL, MFC и др.), компилятор, отладчик, редактор кода и многие другие компоненты. С++ Builder содержит инструменты, которые при помощи drag-and-drop делают разработку визуальной, упрощает программирование благодаря встроенному WYSIWYG - редактору интерфейса.

3.2 Общее описание глобальных переменных и структур программных модулей

class gg {

public:

gg() {x=30; y=30; up=false; down=false; left=false; right=false;}

 // ~gg();

int x;

int y;

friend class map;

friend class key;

friend class liv;

bool left, right, up, down;

void paint (map *m, TTimer *Timer3, TTimer *Timer2, TLabel *Label4, key *k, liv *l);

void drawgg (TImage *Image1, TForm *Form1);

};

Этот класс является одним из базовых и содержит координаты главного героя, переменные для второго типа движения герой, также класс является дружественным с тремя другими: map, key, liv.

class map {

public:

map() {/*key_all=0;*/ /*ochki=1;*/ /*key=0;*/ fin=0; mod=false; level=1; payse=0; loaod=0;

gBitmap = new Graphics:TBitmap();

gBitmap3 = new Graphics:TBitmap();

gBitmap2 = new Graphics:TBitmap();

gBitmap4 = new Graphics:TBitmap();

gBitmap5 = new Graphics:TBitmap();

gBitmap6 = new Graphics:TBitmap();

gBitmap->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\1.bmp»);

gBitmap2->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\12.bmp»);

gBitmap3->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\14.bmp»);

gBitmap4->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\13.bmp»);

gBitmap5->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\ea.bmp»);

gBitmap6->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\eb.bmp»);

}

 // ~map();

FILE *f2, *sg;

int a[10] [10];

int /*ochki*/fin,/*key, key_all,*/level, lkl, payse, sav, loaod;

Graphics:TBitmap* gBitmap;

Graphics:TBitmap* gBitmap2;

Graphics:TBitmap* gBitmap3;

Graphics:TBitmap* gBitmap4;

Graphics:TBitmap* gBitmap5;

Graphics:TBitmap* gBitmap6;

 // Graphics:TBitmap* gBitmap7;

bool mod, levelup;

void check (TCheckBox *CheckBox1, TForm *Form1, gg *c);

 //void allkey();

void pause (TImage *Image3p, TTimer *Timer5, TTimer *Timer1, TTimer *Timer666);

void savegame (TLabel *Label3s, TTimer *Timer2, liv *l);

void loadgame (TLabel *Label5h, TForm *Form1, TTimer *Timer5, TTimer *Timer1, TTimer *Timer666, liv *l);

void Paint_Map (TForm *Form1, TImage *Image1, gg a2, key *k);

void finish (TImage *Image4, gg p, TTimer *Timer1, TTimer *Timer5, TTimer *Timer666, TImage *Image7, TCheckBox *CheckBox1, TTimer *Timer2, TTimer *Timer4, TTimer *Timer3, TImage *Image1, TLabel *Label3h, TLabel *Label4h, TLabel *Label5h, class EnemyB a3, key *k, liv *l);

void newlevel (map *m, TForm *Form1, gg *a2, TTimer *Timer1, TTimer *Timer3, TTimer *Timer5, key *k, class mine *mm);

friend class gg;

};

Этот класс отвечает за прорисовку карты, поэтому содержит большое количество загружаемых изображений, содержит такие методы как окончание уровня, пауза, новый уровень, конец игры, сохранения игры, загрузка, подключемые карты. Класс является дружественным с классом gg.

class Obj: public map {

public:

virtual void test (TForm *Form1, map *n)=0;

};

Класс является абстрактным.

class go: public Obj {

public:

void test (TForm *Form1, map *n);

};

Класс является наследником абстрактного класса Obj, содержит функцию изменения типа окна.

class key: public go {

public:

int key_all, ky;

key();

void test (TForm *Form1, map *n);

};

Класс является наследником класса go, содержит функцию нахождения всех клчей и две переменных - ky и key_all

class liv: public go {

public:

int ochki;

liv();

void test (TForm *Form1, map *n);

};

Класс предназначен размещения жизней на карте. Осуществляет обработку перемеенной ochki во время игры.

class mine: public Obj {

public:

int x, y;

void test (TForm *Form1, map *n);

mine();

Graphics:TBitmap* gBitmap13;

};

Класс, отвечающий за отображение и обработку мин, содержит координаты x, y, функцию test, конструктор, в котором осуществляется инициализация переменных и загружаемое изображение.

class EnemyA {

public:

EnemyA() {x3=7; y3=1; aa=0;}

int x1, y1, x3, y3, aa;

void MoveA (map *n, gg ob, TTimer *Timer2, TLabel *Label4);

};

Этот класс так же как и gg является одним из базовых. Содержит переменные x1, y1, x3, y3, aa отвечающие за координаты врагов и дополнительную переменную для движения. Класс содержит конструктор и функцию передвижения врага).

class EnemyB: public EnemyA {

public:

EnemyB() {fl=0; fl2=0; aa=0; ab=0; x4=5; y4=1; ff2=0;}

int x2, y2, x4, y4;

int fl, fl2, aa, ab, ac, ad, ff2;

void MoveB (map *c, gg ob2, TTimer *Timer2, TLabel *Label4);

};

Класс является наследником класса EnemyA, применяется в программе для отображения другого типа врага, имеет множество дополнительных переменных для задания движения врага.

Основные функции-методы программы представлены структурными схемами.

Рисунок 3.2.1 - Структурная схема функции «Paint»

Рисунок 3.2.2 - Структурная схема функции «Paint»

Рисунок 3.2.3 - Структурная схема функции «newlevel»

Рисунок 3.2.4 - Структурная схема функции «Paint_Map»

Рисунок 3.2.5 - Структурная схема функции «finish»

Рисунок 3.2.6 - Структурная схема функции «move»

Рисунок 3.2.7 - Структурная схема функции «Timer»

3.3 Интерфейс пользователя, настройка программы

Для начала работы программы необходимо запустить исполняемый файл AGAME, находящийся в папке game.

В начале выполнения программы появляется окно со стартовым экраном программы, представленное ниже.

Рисунок 3.3.1 - Игровое меню программы

При нажатии любой клавиши игра начинается:

Рисунок 3.3.2 - Основное поле игры

В случае если главный герой попадается врагу, то мы видим сообщение о том, что были пойманы и количество жизней уменьшается

Рисунок 3.3.3 - Основное поле игры

Когда пользователь соберет все ключи на карте откроется портал.

Рисунок 3.3.4 - Основное поле игры

Когда главный герой попадает в портал, он перемещается на новый уровень.

Рисунок 3.3.5 - Основное поле игры

В случае если количество жизней будет равно нулю пользователь увидит сообщение о проигрыше.

Рисунок 3.3.6 - Основное поле игры

После прохождения последнего уровня пользователь увидит сообщение о победе и финальную картинку

Рисунок 3.3.7 - Основное поле игры

3.4 Критерии качества программной среды

стратегический программа игра информационный

Критерии качества с точки зрения выполнения критериев объектно-ориентированного подхода:

ь Разработанные объекты содержат инкапсулированные данные и процедуры, сгруппированные вместе, отображающие их сущность;

ь Написанная программа моделирует взаимодействие полученных объектов;

ь В достаточной степени достигнута реализация остальных объектно-ориентированных свойств программы.

С точки зрения надежности программа обладает следующим рядом качеств:

ь Программа написана на языке высокого уровня С++, после ее выполнения проводилось тщательное тестирование. Никаких ошибок обнаружено не было;

ь Программа не требует предустановленного специфического программного обеспечения;

ь Быстродействие программы высокое, особых требований к системе нет.

С точки зрения удобства:

ь Программа обладает простым интерфейсом, доступным любому пользователю;

ь Приложение занимает сравнительно малый объем дискового пространства;

ь При надобности возможно полная или частичная замена графических ресурсов игры.

Заключение

Программа разработана в соответствии с постановкой задачи на курсовое проектирование по теме «Игра - протибовоборство» по дисциплине «Объектно-ориентированное программирование». При написании программы были использованы методические указания по курсовому проектированию по дисциплине «Объектно-ориентированное программирование». Интерфейс программы прост и удобен для использования. Тестирование программы подтвердило, что программа корректно выполняет взаимодействие объектов различных классов в соответствии с вариантом.

Относительно объектно-ориентированного подхода сделаны следующие выводы:

ь Сам подход (разбиение на классы и описание взаимодействия объектов этих классов) является эффективным методом программирования;

ь Разработка приложений с использованием объектно-ориентированного анализа и проектирования дает отличные результаты, повышая гибкость программы, позволяя без проблем внедрять дополнительные модули;

ь С использованием объектно-ориентированного подхода повышается читабельность кода, что позволяет работать над проектом целой команде программистов.

Программа организована достаточно доступно и ясно, что позволит (при надобности) легко ее модифицировать.

Цель курсового проекта была достигнута - была создана игра противоборство.

Перечень ссылок

1. Архангельский А.Я. Программирование в C++ Builder 6 / А.Я. Архангельский. - М.: БИНОМ, 2003. - 1152 с.

2. Глушаков С.В. Язык программирования С++ / С.В. Глушаков. - Харьков: «Фолио», 2002. - 500 с.

3. Культин Н.Б. Самоучитель C++ Builder / Н.Б. Культин. - СПб.: БХВ-Петербург, 2004. - 320 с.: ил.

4. Оверленд Б. С++ без страха: [учебное пособие: пер. с англ.] / Брайан Оверленд. - М.:Триумф, 2005. - 432 с.: ил.

5. Шилдт Г. Самоучитель С ++: Пер. с англ. / Г. Шилдт. - 3-е изд. - СПб.: БХВ-Петербург, 2006. - 688 с.

Приложение А

Текст программы

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Севастопольский национальный технический университет

Кафедра информационных систем

Программа для определения общего стажа в цехах

РАЗРАБОТАЛ

Студент гр. И-32д

Лынок А.

2012

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Утверждено 01.09.2012

Среда программирования Builder C++

Дата последней коррекции: 16.10.2012.

Версия 1.5

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

#include <vcl.h>

#pragma hdrstop

#include <stdio.h>

#include <windows.h>

#include «Unit1.h»

#include «Unit2.h»

 // -

#pragma package (smart_init)

#pragma resource «*.dfm»

 // *****************************************************************************

class gg {

public:

gg() {x=30; y=30; up=false; down=false; left=false; right=false;}

 // ~gg();

int x;

int y;

friend class map;

friend class key;

friend class liv;

bool left, right, up, down;

void paint (map *m, TTimer *Timer3, TTimer *Timer2, TLabel *Label4, key *k, liv *l);

void drawgg (TImage *Image1, TForm *Form1);

};

class map {

public:

map() {/*key_all=0;*/ /*ochki=1;*/ /*key=0;*/ fin=0; mod=false; level=1; payse=0; loaod=0;

gBitmap = new Graphics:TBitmap();

gBitmap3 = new Graphics:TBitmap();

gBitmap2 = new Graphics:TBitmap();

gBitmap4 = new Graphics:TBitmap();

gBitmap5 = new Graphics:TBitmap();

gBitmap6 = new Graphics:TBitmap();

gBitmap->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\1.bmp»);

gBitmap2->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\12.bmp»);

gBitmap3->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\14.bmp»);

gBitmap4->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\13.bmp»);

gBitmap5->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\ea.bmp»);

gBitmap6->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\eb.bmp»);

}

 // ~map();

FILE *f2, *sg;

int a[10] [10];

int /*ochki*/fin,/*key, key_all,*/level, lkl, payse, sav, loaod;

Graphics:TBitmap* gBitmap;

Graphics:TBitmap* gBitmap2;

Graphics:TBitmap* gBitmap3;

Graphics:TBitmap* gBitmap4;

Graphics:TBitmap* gBitmap5;

Graphics:TBitmap* gBitmap6;

 // Graphics:TBitmap* gBitmap7;

bool mod, levelup;

void check (TCheckBox *CheckBox1, TForm *Form1, gg *c);

 //void allkey();

void pause (TImage *Image3p, TTimer *Timer5, TTimer *Timer1, TTimer *Timer666);

void savegame (TLabel *Label3s, TTimer *Timer2, liv *l);

void loadgame (TLabel *Label5h, TForm *Form1, TTimer *Timer5, TTimer *Timer1, TTimer *Timer666, liv *l);

void Paint_Map (TForm *Form1, TImage *Image1, gg a2, key *k);

void finish (TImage *Image4, gg p, TTimer *Timer1, TTimer *Timer5, TTimer *Timer666, TImage *Image7, TCheckBox *CheckBox1, TTimer *Timer2, TTimer *Timer4, TTimer *Timer3, TImage *Image1, TLabel *Label3h, TLabel *Label4h, TLabel *Label5h, class EnemyB a3, key *k, liv *l);

void newlevel (map *m, TForm *Form1, gg *a2, TTimer *Timer1, TTimer *Timer3, TTimer *Timer5, key *k, class mine *mm);

friend class gg;

};

 // -

class Obj {

public:

virtual void test (TForm *Form1, map *n)=0;

};

class go: public Obj {

public:

void test (TForm *Form1, map *n);

};

 // -

class key: public go {

public:

int key_all, ky;

key();

void test (TForm *Form1, map *n);

};

key:key() {

ky=0;

key_all=0;

return;

}

 // -

class liv: public go {

public:

int ochki;

liv();

void test (TForm *Form1, map *n);

};

void liv: test (TForm *Form1, map *n) {

ochki=2;

}

liv:liv() {

ochki=1;

return;

}

 // -

class mine: public Obj {

public:

int x, y;

void test (TForm *Form1, map *n);

mine();

Graphics:TBitmap* gBitmap13;

};

mine:mine() {

gBitmap13 = new Graphics:TBitmap();

gBitmap13->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\15.bmp»);

}

void mine:test (TForm *Form1, map *n) {

if (n->level==2) {

n->a[5] [7]='m';

Form1->Canvas->Draw (210,150, gBitmap13);

}

if (n->level==4) {

n->a[1] [2]='m';

Form1->Canvas->Draw (60,30, gBitmap13);

}

if (n->level==5) {

n->a[4] [3]='m';

Form1->Canvas->Draw (90,120, gBitmap13);

}

}

 // -

void go:test (TForm *Form1, map *n) {

Form1->BorderStyle=bsSizeable;

}

 // -

class EnemyA {

public:

EnemyA() {x3=7; y3=1; aa=0;}

int x1, y1, x3, y3, aa;

void MoveA (map *n, gg ob, TTimer *Timer2, TLabel *Label4);

};

 // -

class EnemyB: public EnemyA {

public:

EnemyB() {fl=0; fl2=0; aa=0; ab=0; x4=5; y4=1; ff2=0;}

int x2, y2, x4, y4;

int fl, fl2, aa, ab, ac, ad, ff2;

void MoveB (map *c, gg ob2, TTimer *Timer2, TLabel *Label4);

};

 // -

void map:check (TCheckBox *CheckBox1, TForm *Form1, gg *c) {

if (CheckBox1->Checked==true) mod=true;

else {mod=false; c->left=false; c->right=false; c->up=false; c->down=false;}

}

void map:pause (TImage *Image3p, TTimer *Timer5, TTimer *Timer1, TTimer *Timer666) {

if (payse==0) {

payse=1;

Timer1->Enabled=false;

Timer5->Enabled=false;

Timer666->Enabled=false;

Image3p->Visible=true;

Image3p->BringToFront();

}

else if (payse==1) {

payse=0;

Image3p->Visible=false;

Timer1->Enabled=true;

Timer5->Enabled=true;

Timer666->Enabled=true;

}

}

void map:savegame (TLabel *Label3s, TTimer *Timer2, liv *l) {

AnsiString k;

Timer2->Enabled=true;

Label3s->Visible=true;

TStringList *lst=new TStringList;

 //sg=fopen («save\\game.txt», «w»);

k=level;

k=k+'\n';

k=k+l->ochki;

lst->Text=k;

lst->SaveToFile («save\\game.txt»);

 //fclose(sg);

}

void map:loadgame (TLabel *Label5h, TForm *Form1, TTimer *Timer5, TTimer *Timer1, TTimer *Timer666, liv *l) {

AnsiString o, l2;

TStringList *list = new TStringList;

Timer1->Enabled=false;

Timer5->Enabled=false;

Timer666->Enabled=false;

list->LoadFromFile («\save\\game.txt»);

l2=list->Strings[0];

o=list->Strings[1];

delete list;

Label5h->Caption=o;

level=StrToInt(l2);

l->ochki=StrToInt(o);

loaod=1;

 //level=StrToInt(l);

ShowMessage («ok!»);

Timer1->Enabled=true;

Timer5->Enabled=true;

Timer666->Enabled=true;

Form1->FocusControl(0);

}

 // -

void gg:paint (map *m, TTimer *Timer3, TTimer *Timer2, TLabel *Label4, key *k, liv *l) {

if (left)

if (m->a [y/30] [x/30-1]!=1) {

if (m->a [y/30] [x/30-1]==2) {m->a [y/30] [x/30-1]=0; l->ochki++;} //star

 // if ((m->a [y/30] [x/30-1]==3)||(m->a [y/30] [x/30-1]==4)) {m->a [y/30] [x/30-1]=0; Label4->Visible=true; Timer2->Enabled=true; m->ochki- ;} //enemy

if (m->a [y/30] [x/30-1]==5) {m->a [y/30] [x/30-1]=0; k->ky++;} //key

x-=30;}

if (right) if (m->a [y/30] [x/30+1]!=1) {

if (m->a [y/30] [x/30+1]==2) {m->a [y/30] [x/30+1]=0; l->ochki++;} //star

 // if ((m->a [y/30] [x/30+1]==3)||(m->a [y/30] [x/30+1]==4)) {m->a [y/30] [x/30+1]=0; Label4->Visible=true; Timer2->Enabled=true; m->ochki- ;} //enemy

if (m->a [y/30] [x/30+1]==5) {m->a [y/30] [x/30+1]=0; k->ky++;} //key

x+=30;}

if (up) if (m->a [y/30-1] [x/30]!=1) {

if (m->a [y/30-1] [x/30]==2) {m->a [y/30-1] [x/30]=0; l->ochki++;} //star

 // if((m->a [y/30-1] [x/30]==3)||(m->a [y/30-1] [x/30]==4)) {m->a [y/30-1] [x/30]=0; Label4->Visible=true; Timer2->Enabled=true; m->ochki- ;} //enemy

if (m->a [y/30-1] [x/30]==5) {m->a [y/30-1] [x/30]=0; k->ky++;} //key

y-=30;}

if (down) if (m->a [y/30+1] [x/30]!=1) {

if (m->a [y/30+1] [x/30]==2) {m->a [y/30+1] [x/30]=0; l->ochki++;} //star

 // if((m->a [y/30+1] [x/30]==3)||(m->a [y/30+1] [x/30]==4)) {m->a [y/30+1] [x/30]=0; Label4->Visible=true; Timer2->Enabled=true; m->ochki- ;} //enemy

if (m->a [y/30+1] [x/30]==5) {m->a [y/30+1] [x/30]=0; k->ky++;} // key

y+=30;}

}

 // -

void key:test (TForm *Form1, map *n) {

for (int i=0; i<10; i++)

for (int j=0; j<10; j++)

if (n->a[i] [j]==5) key_all++;

}

 // -

void gg:drawgg (TImage *Image1, TForm *Form1)

{

 //Graphics:TBitmap* gg = new Graphics:TBitmap;

 //gg->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\gg.bmp»);

 //Form1->Canvas->Draw (x*30, y*30, gg);

Image1->Visible=true;

Image1->BringToFront();

Image1->Left=x;

Image1->Top=y;

}

 // -

void map:newlevel (map *m, TForm *Form1, gg *a2, TTimer *Timer1, TTimer *Timer3, TTimer *Timer5, key *k, mine *mm)

{

Form1->FocusControl(0);

 //FILE *f2;

if (level==1) f2=fopen («101.txt», «r»);

else if (level==2) f2=fopen («2.txt», «r»);

else if (level==3) f2=fopen («3.txt», «r»);

else if (level==4) f2=fopen («4.txt», «r»);

else if (level==5) f2=fopen («5.txt», «r»);

Timer1->Enabled=true;

Timer3->Enabled=true;

a2->left=false; a2->right=false; a2->down=false; a2->up=false;

k->ky=0;

fin=0;

k->key_all=0;

for (int i=0; i<10; i++)

for (int j=0; j<11; j++)

{

char t=fgetc(f2);

switch(t)

{

case '0': a[j] [i]=0; break;

case '1': a[j] [i]=1; break;

case '2': a[j] [i]=2; break;

case '3': a[j] [i]=3; break;

case '4': a[j] [i]=4; break;

case '5': a[j] [i]=5; break;

}

}

k->test (Form1, m);

fclose(f2);

if (level==1) {a2->x=30; a2->y=30; Timer1->Interval=100; Timer5->Interval=85; lkl=0;}

if (level==2) {a2->x=240; a2->y=240;}

if (level==3) {a2->x=30; a2->y=240; Timer5->Interval=100;}

if (level==4) {a2->x=120; a2->y=30; Timer5->Interval=95; Timer1->Interval=125;}

if (level==5) {a2->x=30; a2->y=30;}

levelup=false;

 // рандом

if (level==2) {

for (int i=0; i<10; i++)

for (int j=0; j<11; j++)

{if (i==2)

if ((j>3)&&(j<7)) {a[i] [j]=random(2);}

if (i==3)

if ((j>3)&&(j<7)) {a[i] [j]=random(2);}

if (i==5)

if ((j==2)||(j==3)||(j==6)) {a[i] [j]=random(2);}

if (i==6)

if ((j==2)||(j==6)||(j==8)) {a[i] [j]=random(2);}

if (i==8)

if (j==6) {a[i] [j]=random(2);}

}

}

if (level==3) {

for (int i=0; i<10; i++)

for (int j=0; j<11; j++)

{if (i==1)

if (j==1) {a[i] [j]=random(2);}

if (i==3)

if ((j==5)||(j==7)) {a[i] [j]=random(2);}

if (i==6)

if ((j==5)||(j==7)) {a[i] [j]=random(2);}

if (i==7)

if ((j==2)||(j==4)||(j==5)||(j==7)) {a[i] [j]=random(2);}

}

}

mm->test (Form1, m);

}

void map: Paint_Map (TForm *Form1, TImage *Image1, gg a2, key *k)

{/*

Graphics:TBitmap* gBitmap = new Graphics:TBitmap();

Graphics:TBitmap* gBitmap2 = new Graphics:TBitmap();

Graphics:TBitmap* gBitmap3 = new Graphics:TBitmap();

Graphics:TBitmap* qBitmap4 = new Graphics:TBitmap();

Graphics:TBitmap* qBitmap5 = new Graphics:TBitmap();

Graphics:TBitmap* qBitmap6 = new Graphics:TBitmap();

*/

for (int i=0; i<10; i++)

{

for (int j=0; j<10; j++)

{

switch (a[j] [i])

{

case 1: Form1->Canvas->Draw (i*30, j*30, gBitmap2); break;

case 0: if((i==a2.x/30)&&(j==a2.y/30)) {break;} Form1->Canvas->Draw (i*30, j*30, gBitmap); break;

case 2: Form1->Canvas->Draw (i*30, j*30, gBitmap3); break;

case 3: if((i==a2.x/30)&&(j==a2.y/30)) {break;} Form1->Canvas->Draw (i*30, j*30, gBitmap5); break;

case 7: if((i==a2.x/30)&&(j==a2.y/30)) {break;} Form1->Canvas->Draw (i*30, j*30, gBitmap5); break;

case 4: if((i==a2.x/30)&&(j==a2.y/30)) {break;} Form1->Canvas->Draw (i*30, j*30, gBitmap6); break;

case 8: if((i==a2.x/30)&&(j==a2.y/30)) {break;} Form1->Canvas->Draw (i*30, j*30, gBitmap6); break;

case 5: Form1->Canvas->Draw (i*30, j*30, gBitmap4); break;

}

}

}

if (level==2) a[7] [1]==7;

 // избежание патовых ситуаций

if (level==1) {

if ((a[2] [1]==1)&&(a[2] [2]==1)&&(a[2] [3]==1)&&(a[1] [3]==1)) {a[1] [3]=0; ShowMessage («1»);}

if ((a[2] [1]==1)&&(a[2] [2]==1)&&(a[2] [3]==1)&&(a[1] [3]==4)) {a[1] [4]=0; ShowMessage («2»);}

if ((a[2] [1]==1)&&(a[2] [2]==1)&&(a[2] [3]==1)&&(a[2] [4]==1)&&(a[2] [5]==1)&&(a[1] [5]==1)) {a[2] [4]=0; ShowMessage («3»);}

if ((a[2] [1]==1)&&(a[2] [2]==1)&&(a[2] [3]==1)&&(a[1] [4]==1)) {a[2] [2]=0; ShowMessage («4»);}

if ((a[2] [1]==1)&&(a[2] [2]==1)&&(a[1] [3]==1)) {a[2] [1]==0; ShowMessage («5»);}

 /////////////////////////////////////////////////////////////////

if ((a[1] [3]==1)&&(a[1] [6]==1)&&(a[2] [3]==1)&&(a[2] [4])&&(a[2] [5]==1)&&(a[2] [6]==1)) {a[2] [5]=0; ShowMessage («6»);}

if ((a[1] [4]==1)&&(a[2] [4]==1)&&(a[2] [5]==1)&&(a[2] [6]==1)&&(a[1] [6]==1)) {a[1] [6]=0; ShowMessage («7»);}

if ((a[1] [3]==1)&&(a[2] [3]==1)&&(a[1] [5]==1)&&(a[2] [5]==1)&&(a[2] [4]==1)) {a[1] [3]=0; ShowMessage («8»);}

}

}

void map:finish (TImage *Image4, gg p, TTimer *Timer1, TTimer *Timer5, TTimer *Timer666, TImage *Image7, TCheckBox *CheckBox1, TTimer *Timer2, TTimer *Timer4, TTimer *Timer3, TImage *Image1, TLabel *Label3h, TLabel *Label4h, TLabel *Label5h, class EnemyB a3, key *k, liv *l)

{

if (level==1) {

a[1] [0]='f';

a[8] [4]=1;

a[4] [4]=1;

 //a[2] [4]=1;

Image4->Left=0; Image4->Top=30; Image4->Visible=true;

if ((p.x/30==0)&&(p.y/30==1)) fin=1;

}

if (level==2) {

a[5] [6]='f';

Image4->Left=180; Image4->Top=150; Image4->Visible=true;

if ((p.x/30==6)&&(p.y/30==5)) fin=1;

}

if (level==3) {

a[1] [5]='f';

Image4->Left=150; Image4->Top=30; Image4->Visible=true;

if ((p.x/30==5)&&(p.y/30==1)) fin=1;

}

if (level==4) {a[1] [5]='f';

Image4->Left=150; Image4->Top=30; Image4->Visible=true;

if ((p.x/30==5)&&(p.y/30==1)) fin=1;

}

if (level==5) {a[3] [2]='f';

Image4->Left=60; Image4->Top=90; Image4->Visible=true;

if ((p.x/30==2)&&(p.y/30==3)) fin=1;

}

if ((l->ochki>0)&&(fin==1)) {

if (level==5) {

lkl=1;

unsigned short res;

Timer1->Enabled=false;

Timer2->Enabled=false;

Timer3->Enabled=false;

Timer4->Enabled=false;

Timer5->Enabled=false;

Timer666->Enabled=false;

CheckBox1->Visible=false;

Image1->Visible=false;

Label3h->Visible=false;

Label4h->Visible=false;

Label5h->Visible=false;

Image7->Picture->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\767.bmp»);

Image7->Top=0;

Image7->Width=511;

Image7->Height=326;

Image7->Left=0;

Image7->Visible=true;

 // res=MessageDlg («Congratulations! You are win! Start a New Game?», mtInformation, TMsgDlgButtons()<<mbYes<<mbNo, 0);

res=MessageDlgPos («Congratulations! You are win! Start a New Game?», mtInformation, TMsgDlgButtons()<<mbYes<<mbNo, 0,495, 550);

if (res==mrNo) {Application->Terminate();}

else if (res==mrYes) {

l->ochki=1;

level=0;

a3.ff2=0;

k->ky=0;

Timer1->Enabled=true;

Timer2->Enabled=true;

Timer3->Enabled=true;

Timer4->Enabled=true;

Timer5->Enabled=true;

Timer666->Enabled=true;

CheckBox1->Visible=true;

Image1->Visible=true;

Label3h->Visible=false;

Label4h->Visible=false;

Label5h->Visible=false;

Image7->Visible=false;

finish (Image4, p, Timer1, Timer5, Timer666, Image7, CheckBox1, Timer2, Timer4, Timer3, Image1, Label3h, Label4h, Label5h, a3, k, l);

}

}

else {

Timer1->Enabled=false;

Timer5->Enabled=false;

 // if (lkl==1) ShowMessage («Are you ready?»);

if (lkl==0) ShowMessage («Next level»);

Image4->Visible=false; level++;

Timer5->Enabled=true;

levelup=true;

}

}

Timer1->Interval=120;

}

 // -

void EnemyA: MoveA (map *n, gg ob, TTimer *Timer2, TLabel *Label4)

{

if (n->level==1) {

for (int i=0; i<10; i++)

for (int j=0; j<10; j++)

if (n->a[i] [j]==3) {x1=i; y1=j;}

if((y1+1!=6)&&(x1==6)) {n->a[x1] [y1]=0; n->a[x1] [y1+1]=3;} // вправо

else if((x1-1!=2)&&(y1==5)) {n->a[x1] [y1]=0; n->a [x1-1] [y1]=3;} // вверх

else if (y1-1!=0) {n->a[x1] [y1]=0; n->a[x1] [y1-1]=3;} // влево

else if((x1+1!=7)&&(y1==1)) {n->a[x1] [y1]=0; n->a [x1+1] [y1]=3;} // вниз

 // if ((ob.x/30==y1)&&(ob.y/30==x1)) {Label4->Visible=true; Timer2->Enabled=true; n->ochki- ;}

}

if (n->level==2) {

for (int i=0; i<10; i++)

for (int j=0; j<10; j++)

{if (n->a[i] [j]==3) {x1=i; y1=j;}

if (n->a[i] [j]==7) {x3=i; y3=j;}

}

if ((n->a[x1] [y1+1]!=1)&&(x1==4)) {n->a[x1] [y1]=0; n->a[x1] [y1+1]=3;} // вправо

else if ((n->a [x1+1] [y1]!=1)&&(y1==5)) {n->a[x1] [y1]=0; n->a [x1+1] [y1]=3;} // вниз

else if (n->a[x1] [y1-1]!=1) {n->a[x1] [y1]=0; n->a[x1] [y1-1]=3;} // влево

else if((n->a [x1-1] [y1]!=1)&&(y1==1)) {n->a[x1] [y1]=0; n->a [x1-1] [y1]=3;} // вверх

if ((n->a[x3] [y3+1]!=1)&&(aa==0)) {n->a[x3] [y3]=0; n->a[x3] [y3+1]=7;} // вправо

if (y3==8) aa=1;

if ((n->a[x3] [y3-1]!=1)&&(aa==1)) {n->a[x3] [y3]=0; n->a[x3] [y3-1]=7;} // влево

if (y3==3) aa=0;

}

if (n->level==3) {

for (int i=0; i<10; i++)

for (int j=0; j<10; j++)

if (n->a[i] [j]==3) {x1=i; y1=j;}

if (x1==8) aa=1;

if (x1==1) aa=0;

if ((n->a [x1+1] [y1]!=1)&&(aa==0)) {n->a[x1] [y1]=0; n->a [x1+1] [y1]=3;} // вниз

if ((n->a [x1-1] [y1]!=1)&&(aa==1)) {n->a[x1] [y1]=0; n->a [x1-1] [y1]=3;} // вверх

}

if (n->level==4) {

for (int i=0; i<10; i++)

for (int j=0; j<10; j++)

if (n->a[i] [j]==3) {x1=i; y1=j;}

if ((n->a [x1+1] [y1]!=1)&&(x1!=6)&&(y1!=8)) {n->a[x1] [y1]=0; n->a [x1+1] [y1]=3;} // вниз

else if ((n->a[x1] [y1+1]!=1)&&(x1==6)) {n->a[x1] [y1]=0; n->a[x1] [y1+1]=3;} // вправо

else if ((n->a [x1-1] [y1]!=1)&&(y1==8)) {n->a[x1] [y1]=0; n->a [x1-1] [y1]=3;} // вверх

else if ((n->a[x1] [y1-1]!=1)&&(x1==3)) {n->a[x1] [y1]=0; n->a[x1] [y1-1]=3;} // влево

}

if (n->level==5) {

for (int i=0; i<10; i++)

for (int j=0; j<10; j++)

if (n->a[i] [j]==3) {x1=i; y1=j;}

if ((x1==1)&&(y1==4)) aa=1;

if ((x1==3)&&(y1==1)) aa=0;

if ((n->a [x1+1] [y1]!=1)&&(y1==1)&&(x1!=5)&&(aa==0)) {n->a[x1] [y1]=0; n->a [x1+1] [y1]=3;} // вниз

else if ((n->a[x1] [y1+1]!=1)&&(aa==0)) {n->a[x1] [y1]=0; n->a[x1] [y1+1]=3;} // вправо

else if ((n->a [x1-1] [y1]!=1)&&(aa==0)&&(y1==4)) {n->a[x1] [y1]=0; n->a [x1-1] [y1]=3;} // вверх

else if ((n->a [x1+1] [y1]!=1)&&(aa==1)&&(y1==4)) {n->a[x1] [y1]=0; n->a [x1+1] [y1]=3;} // вниз2

else if ((n->a[x1] [y1-1]!=1)&&(aa==1)) {n->a[x1] [y1]=0; n->a[x1] [y1-1]=3;} // влево

else if ((n->a [x1-1] [y1]!=1)&&(y1==1)&&(aa==1)) {n->a[x1] [y1]=0; n->a [x1-1] [y1]=3;} // вверх2

}

}

 // -

void EnemyB: MoveB (map *c, gg ob2, TTimer *Timer2, TLabel *Label4)

{if (c->level==1) {

/*!!!!!!*/ for (int i=0; i<10; i++)

for (int j=0; j<10; j++)

if (c->a[i] [j]==4) {x2=i; y2=j;}

if ((c->a [x2+1] [y2]!=1)&&(ff2==0)&&(x2!=7)) {c->a[x2] [y2]=0; c->a [x2+1] [y2]=4;} // вниз

else if ((c->a[x2] [y2-1]!=1)&&(x2==7)&&(ff2==0)) {c->a[x2] [y2]=0; c->a[x2] [y2-1]=4;} // влево

else if ((c->a[x2] [y2+1]!=1)&&(x2==7)&&(ff2==1)) {c->a[x2] [y2]=0; c->a[x2] [y2+1]=4;} // вправо

else if ((c->a [x2-1] [y2]!=1)&&(y2==8)&&(ff2==1)) {c->a[x2] [y2]=0; c->a [x2-1] [y2]=4;} // вверх

if ((x2==7)&&(y2==2)) ff2=1;

/*!!!!!!!*/ if ((x2==2)&&(y2==8)) ff2=0;

 // if ((ob2.x/30==y2)&&(ob2.y/30==x2)) {Label4->Visible=true; Timer2->Enabled=true; c->ochki- ;}

}

if (c->level==2) {

for (int i=0; i<10; i++)

for (int j=0; j<10; j++)

if (c->a[i] [j]==4) {x2=i; y2=j;}

if ((c->a[x2] [y2+1]!=1)&&(ab<4)) {c->a[x2] [y2]=0; c->a[x2] [y2+1]=4;} // вправо

else if ((x2!=5)&&(ab<4)) {c->a[x2] [y2]=0; c->a [x2+1] [y2]=4; ab++;} // вниз

else if (c->a [x2-1] [y2]!=1) {c->a[x2] [y2]=0; c->a [x2-1] [y2]=4;} // вверх

else if (c->a[x2] [y2-1]!=1) {c->a[x2] [y2]=0; c->a[x2] [y2-1]=4;} // влево

if ((x2==1)&&(y2==1)) ab=0;

}

if (c->level==3) {

for (int i=0; i<10; i++)

for (int j=0; j<10; j++)

if (c->a[i] [j]==4) {x4=i; y4=j;}

if ((c->a[x4] [y4+1]!=1)&&(x4!=4)) {c->a[x4] [y4]=0; c->a[x4] [y4+1]=4;} // вправо

else if ((c->a [x4-1] [y4]!=1)&&(x4!=4)) {c->a[x4] [y4]=0; c->a [x4-1] [y4]=4;} // вверх

else if ((c->a[x4] [y4-1]!=1)&&(y4!=1)) {c->a[x4] [y4]=0; c->a[x4] [y4-1]=4;} // влево

else if ((c->a [x4+1] [y4]!=1)&&(x4!=5)) {c->a[x4] [y4]=0; c->a [x4+1] [y4]=4;} // вниз

}

if (c->level==4) {

for (int i=0; i<10; i++)

for (int j=0; j<10; j++)

if (c->a[i] [j]==4) {x4=i; y4=j;}

if ((c->a[x4] [y4-1]!=1)&&(y4!=2)&&(x4==8)) {c->a[x4] [y4]=0; c->a[x4] [y4-1]=4;} // влево

else if ((c->a [x4-1] [y4]!=1)&&(y4==2)&&(x4!=2)) {c->a[x4] [y4]=0; c->a [x4-1] [y4]=4;} // вверх

else if ((c->a[x4] [y4-1]!=1)&&(y4==2)&&(x4==4)) {c->a[x4] [y4]=0; c->a[x4] [y4-1]=4;} // влево2

else if ((c->a [x4-1] [y4]!=1)&&(y4==1)&&(x4!=2)) {c->a[x4] [y4]=0; c->a [x4-1] [y4]=4;} // вверх2

else if ((c->a[x4] [y4+1]!=1)&&(x4==2)) {c->a[x4] [y4]=0; c->a[x4] [y4+1]=4;} // вправо2

else if ((c->a [x4+1] [y4]!=1)&&(y4==4)) {c->a[x4] [y4]=0; c->a [x4+1] [y4]=4;} // вниз

else if ((c->a[x4] [y4+1]!=1)&&(x4==6)&&(y4!=7)) {c->a[x4] [y4]=0; c->a[x4] [y4+1]=4;} // вправо3

else if ((c->a [x4+1] [y4]!=1)&&(y4==7)) {c->a[x4] [y4]=0; c->a [x4+1] [y4]=4;} // вниз2

}

if (c->level==5) {

for (int i=0; i<10; i++)

for (int j=0; j<10; j++)

if (c->a[i] [j]==4) {x4=i; y4=j;}

if ((x4==1)&&(y4==8)) ac=1;

if ((x4==8)&&(y4==1)) ac=0;

if ((c->a[x4] [y4+1]!=1)&&(x4==8)&&(ac==0)) {c->a[x4] [y4]=0; c->a[x4] [y4+1]=4;} // вправо

else if ((c->a [x4-1] [y4]!=1)&&(y4==8)&&(ac==0)) {c->a[x4] [y4]=0; c->a [x4-1] [y4]=4;} // вверх

else if ((c->a [x4+1] [y4]!=1)&&(ac==1)) {c->a[x4] [y4]=0; c->a [x4+1] [y4]=4;} // вниз

else if ((c->a[x4] [y4-1]!=1)&&(ac==1)) {c->a[x4] [y4]=0; c->a[x4] [y4-1]=4;} // влево

}

}

gg ob;

map m;

map *mІ;

EnemyA r;

EnemyB q;

AnsiString l1, l2, l3;

key kl;

liv ll;

mine min;

 // *****************************************************************************

TForm1 *Form1;

 // -

__fastcall TForm1:TForm1 (TComponent* Owner)

: TForm(Owner)

{

randomize();

 //q.fl=0;

 //q.fl2=0;

Timer3->Enabled=true;

FILE *f;

f=fopen («1.txt», «r»);

AddFontResourceA («font\\PERTIBD.ttf»);

AddFontResourceA («font\\PERTILI_0.ttf»);

Image1->Picture->LoadFromFile (ExtractFilePath(Application->ExeName)+»\\ico\\gg.bmp»);

Image2->Picture->LoadFromFile (ExtractFilePath(Application->ExeName)+»\\ico\\65.bmp»);

Image6->Picture->LoadFromFile (ExtractFilePath(Application->ExeName)+»\\ico\\background.bmp»);

Image4->Picture->LoadFromFile (ExtractFilePath(Application->ExeName)+»\\ico\\final.bmp»);

Image7->Picture->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\767.bmp»);

Image3p->Picture->LoadFromFile (ExtractFilePath(Application->ExeName)+ «ico\\pause.bmp»);

Image3p->Width=200;

Image3p->Height=100;

Image3p->Left=60;

Image3p->Top=100;

 //if (f=fopen((ExtractFilePath (Application->ExeName) + «1.txt»).c_str(), «r»))

{for (int i=0; i<10; i++)

{

for (int j=0; j<11; j++)

{

char t=fgetc(f);

switch(t)

{

case '0': m.a[i] [j]=0; break;

case '1': m.a[i] [j]=1; break;

case '2': m.a[i] [j]=2; break;

case '3': m.a[i] [j]=3; break;

case '4': m.a[i] [j]=4; break;

case '5': m.a[i] [j]=5; break;

}

}

}

} // рандомное заполнение первого левела

for (int i=0; i<10; i++)

for (int j=0; j<11; j++)

{if (i==1)

if ((j>2)&&(j<7)) {m.a[i] [j]=random(2);}

if (i==2)

if ((j>0)&&(j<7)) {m.a[i] [j]=random(2);}

if (i==5)

if ((j==6)||(j==7)) {m.a[i] [j]=random(2);}

if (i==6)

if (j==6) {m.a[i] [j]=random(2);}

}

fclose(f);

kl.test (Form1,&m);

}

 // -

void __fastcall TForm1: FormKeyDown (TObject *Sender, WORD &Key,

TShiftState Shift)

{

if (m.payse==0) {

Timer666->Enabled=true;

Timer1->Enabled=true;

Timer5->Enabled=true;

}

m.check (CheckBox1, Form1,&ob);

Image6->Visible=false;

Image2->Visible=true; // картинка-фоон

Label11->Font->Name= «Perpetua Titling MT»;

Label10->Font->Name= «Perpetua Titling MT»;

Label1->Font->Name= «Perpetua Titling MT»;

Label2->Font->Name= «Perpetua Titling MT»;

Label4->Font->Name= «Perpetua Titling MT»;

Label5->Font->Name= «Perpetua Titling MT»;

Label6->Font->Name= «Perpetua Titling MT»;

Label7->Font->Name= «Perpetua Titling MT»;

Label8->Font->Name= «Perpetua Titling MT»;

Label3s->Font->Name= «Perpetua Titling MT»;

Label3p->Visible=true;

Label3h->Visible=true;

Label4h->Visible=true;

Label5h->Visible=true;

Label11->Visible=true;

CheckBox1->Visible=true;

Label1->Visible=true;

Label2->Visible=true;

Label5->Visible=true;

Label6->Visible=true;

Label7->Visible=true;

Label8->Visible=true;

Label9->Visible=true;

Label9->Width=80;

Label10->Visible=true;

if (m.mod) {

switch(Key) {

case VK_LEFT: {if (m.payse==0) {ob.left=true; ob.right=false; ob.up=false; ob.down=false; break;}}

case VK_RIGHT: {if (m.payse==0) {ob.left=false; ob.right=true; ob.up=false; ob.down=false;} break;}

case VK_UP: {if (m.payse==0) {ob.left=false; ob.right=false; ob.up=true; ob.down=false;} break;}

case VK_DOWN: {if (m.payse==0) {ob.left=false; ob.right=false; ob.up=false; ob.down=true;} break;}

case VK_F1: {m.pause (Image3p, Timer5, Timer1, Timer666); break;}

case VK_F2: {m.savegame (Label3s, Timer2,&ll); break;}

case VK_F3: {m.loadgame (Label5h, Form1, Timer1, Timer5, Timer666,&ll); break;}

}}

else {

switch(Key) {

case '1': {kl.ky=kl.key_all; break;}

case VK_F1: {m.pause (Image3p, Timer5, Timer1, Timer666); break;}

case VK_F2: {m.savegame (Label3s, Timer2,&ll); break;}

case VK_F3: {m.loadgame (Label5h, Form1, Timer1, Timer5, Timer666,&ll); break;}

case VK_LEFT: if (m.payse==0) {

if (m.a [ob.y/30] [ob.x/30-1]!=1) {

if (m.a [ob.y/30] [ob.x/30-1]==2) {m.a [ob.y/30] [ob.x/30-1]=0; ll.ochki++;} //star

 // if ((m.a [ob.y/30] [ob.x/30-1]==3)||(m.a [ob.y/30] [ob.x/30-1]==4)) {m.a [ob.y/30] [ob.x/30-1]=0; Form1->Label4->Visible=true; Timer2->Enabled=true; m.ochki- ;} //enemy

if (m.a [ob.y/30] [ob.x/30-1]==5) {m.a [ob.y/30] [ob.x/30-1]=0; kl.ky++;} //key

ob.x-=30;} break;}

case VK_RIGHT: if (m.payse==0) {

if (m.a [ob.y/30] [ob.x/30+1]!=1) {

if (m.a [ob.y/30] [ob.x/30+1]==2) {m.a [ob.y/30] [ob.x/30+1]=0; ll.ochki++;} //star

 // if ((m.a [ob.y/30] [ob.x/30+1]==3)||(m.a [ob.y/30] [ob.x/30+1]==4)) {m.a [ob.y/30] [ob.x/30+1]=0; Form1->Label4->Visible=true; Timer2->Enabled=true; m.ochki- ;} //enemy

if (m.a [ob.y/30] [ob.x/30+1]==5) {m.a [ob.y/30] [ob.x/30+1]=0; kl.ky++;} //key

ob.x+=30;} break;}

case VK_UP: if (m.payse==0) {

if (m.a [ob.y/30-1] [ob.x/30]!=1) {

if (m.a [ob.y/30-1] [ob.x/30]==2) {m.a [ob.y/30-1] [ob.x/30]=0; ll.ochki++;} //star

 // if((m.a [ob.y/30-1] [ob.x/30]==3)||(m.a [ob.y/30-1] [ob.x/30]==4)) {m.a [ob.y/30-1] [ob.x/30]=0; Form1->Label4->Visible=true; Timer2->Enabled=true; m.ochki- ;} //enemy

if (m.a [ob.y/30-1] [ob.x/30]==5) {m.a [ob.y/30-1] [ob.x/30]=0; kl.ky++;} //key

ob.y-=30;} break;}

case VK_DOWN: if (m.payse==0) {

if (m.a [ob.y/30+1] [ob.x/30]!=1) {

if (m.a [ob.y/30+1] [ob.x/30]==2) {m.a [ob.y/30+1] [ob.x/30]=0; ll.ochki++;} //star

 // if((m.a [ob.y/30+1] [ob.x/30]==3)||(m.a [ob.y/30+1] [ob.x/30]==4)) {m.a [ob.y/30+1] [ob.x/30]=0; Form1->Label4->Visible=true; Timer2->Enabled=true; m.ochki- ;} //enemy

if (m.a [ob.y/30+1] [ob.x/30]==5) {m.a [ob.y/30+1] [ob.x/30]=0; kl.ky++;} // key

ob.y+=30;} break;}

}

}

 //Caption= «Жизни:» + String (m.ochki);

}

 // -

void __fastcall TForm1: Timer1Timer (TObject *Sender)

{int n;

r. MoveA (&m, ob, Timer2, Label4);

 // q. MoveB (&m, ob, Timer2, Label4);

 // m. Paint_Map (Form1, Image1, ob);

 // ob.drawgg (Image1, Form1);

/**/ if (ll.ochki==0) {Timer1->Enabled=false;

Timer2->Enabled=false;

Timer3->Enabled=false;

Timer4->Enabled=false;

Timer5->Enabled=false;

Timer666->Enabled=false;

unsigned short res2;

res2=MessageDlg («You are Lost! Start a New Game?», mtInformation, TMsgDlgButtons()<<mbYes<<mbNo, 0);

if (res2==mrNo) {Application->Terminate();}

else if (res2==mrYes) {

ll.ochki=1;

m.level=1;

kl.ky=0;

q.ff2=0;

Timer1->Enabled=true;

Timer2->Enabled=true;

Timer3->Enabled=true;

Timer4->Enabled=true;

Timer5->Enabled=true;

Timer666->Enabled=true;

 // CheckBox1->Visible=true;

 // Image1->Visible=true;

 // Image7->Visible=false;

m.newlevel (&m, Form1,&ob, Timer1, Timer3, Timer5,&kl,&min);

 // m.finish (Image4, ob, Timer1, Timer5, Timer666, Image7, CheckBox1, Timer2, Timer4, Timer3, Image1);

}

}

Label2->Caption=ll.ochki;

Label6->Caption=kl.ky;

Label10->Caption=m.level;

Label7->Caption=kl.key_all;

Caption= «Жизни:» + String (ll.ochki);

for (int i=0; i<10; i++)

for (int j=0; j<10; j++)

if (m.a[i] [j]==2) n++;

if ((kl.ky==kl.key_all)&&(ll.ochki>0)) {m.finish (Image4, ob, Timer1, Timer5, Timer666, Image7, CheckBox1, Timer2, Timer4, Timer3, Image1, Label3h, Label4h, Label5h, q,&kl,&ll);}

if ((m.level==2)&&(m.levelup)) {m.newlevel (&m, Form1,&ob, Timer1, Timer3, Timer5,&kl,&min);}

if ((m.level==3)&&(m.levelup)) {m.newlevel (&m, Form1,&ob, Timer1, Timer3, Timer5,&kl,&min);}

if ((m.level==4)&&(m.levelup)) {m.newlevel (&m, Form1,&ob, Timer1, Timer3, Timer5,&kl,&min);}

if ((m.level==5)&&(m.levelup)) {m.newlevel (&m, Form1,&ob, Timer1, Timer3, Timer5,&kl,&min);}

if ((m.level==1)&&(m.levelup)) {q.ff2=0; m.newlevel (&m, Form1,&ob, Timer1, Timer3, Timer5,&kl,&min);}

if (m.loaod==1) {m.newlevel (&m, Form1,&ob, Timer1, Timer3, Timer5,&kl,&min); m.loaod=0;}

}

 // -

void __fastcall TForm1: Timer2Timer (TObject *Sender) // покраснение live

{

Form1->Label4->Visible=false;

Form1->Label3s->Visible=false;

}

 // -

void __fastcall TForm1: Timer3Timer (TObject *Sender) // передвижение гг в режиме хард

{

ob.paint (&m, Timer3, Timer2, Label4,&kl,&ll);

}

 // -

void __fastcall TForm1: CheckBox1Click (TObject *Sender) // хард моде

{

FocusControl(0);

}

 // -

void __fastcall TForm1: Timer4Timer (TObject *Sender) // пересечение гг с енеми

{

if((m.a [ob.y/30] [ob.x/30]==3)||(m.a [ob.y/30] [ob.x/30]==4)||(m.a [ob.y/30] [ob.x/30]==7)||(m.a [ob.y/30] [ob.x/30]==8)) {

Timer1->Enabled=false;

Timer5->Enabled=false;

Form1->Label4->Visible=true;

if (m.level==1) {ob.x=30; ob.y=30;}

else if (m.level==2) {ob.x=240; ob.y=240;}

else if (m.level==3) {ob.x=30; ob.y=240;}

else if (m.level==4) {ob.x=120; ob.y=30;}

else if (m.level==5) {ob.x=30; ob.y=30;}

m. Paint_Map (Form1, Image1, ob,&kl);

ll.ochki -;

ob.left=false; ob.right=false; ob.down=false; ob.up=false;

ShowMessage («CatchYou!»);

FocusControl(0);

Timer2->Enabled=true;

Timer5->Enabled=true;

Timer1->Enabled=true;

}

if((m.a [ob.y/30] [ob.x/30]=='m')) {

m.a [ob.y/30] [ob.x/30]=0;

ob.left=false; ob.right=false; ob.down=false; ob.up=false;

Timer1->Enabled=false;

Timer5->Enabled=false;

Form1->Label4->Visible=true;

ShowMessage («ACHTUNG!»);

m. Paint_Map (Form1, Image1, ob,&kl);

ll.ochki -;

FocusControl(0);

Timer2->Enabled=true;

Timer5->Enabled=true;

Timer1->Enabled=true;

}

}

 // -

void __fastcall TForm1: Timer5Timer (TObject *Sender) //enemy B

{

q. MoveB (&m, ob, Timer2, Label4);

}

 // -

void __fastcall TForm1: Timer666Timer (TObject *Sender) // проприсовка карты передвиж гг

{

m. Paint_Map (Form1, Image1, ob,&kl);

ob.drawgg (Image1, Form1);

}

 // -

Размещено на Allbest.ru


Подобные документы

  • Порядок описание процесса разработки модели для разрешения задачи программирования с помощью средств языка программирования. Структуры данных и основные принципы их построения. Этапы компьютерного моделирования. Этапы и значение написания программы.

    курсовая работа [19,5 K], добавлен 19.05.2011

  • Создание компьютерной игры посредством среды программирования Delphi. Инструменты разработки, компоненты и методы для разработки программы. Логическая и физическая структуры, основные функции и элементы управления программы, ее тестирование и отладка.

    курсовая работа [27,9 K], добавлен 26.07.2014

  • Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.

    курсовая работа [1,5 M], добавлен 17.01.2011

  • Особенности программирования аркадных игр в среде Python. Краткая характеристика языка программирования Python, его особенности и синтаксис. Описание компьютерной игры "Танчики" - правила игры, пояснение ключевых строк кода. Демонстрация работы программы.

    курсовая работа [160,3 K], добавлен 03.12.2014

  • Выбор языка и среды программирования, его обоснование. Методика и этапы реализации заданной игрой программными средствами. Принципы разработки пояснительной записки для описания функциональных возможностей разработанного программного приложения.

    курсовая работа [354,8 K], добавлен 02.03.2014

  • Ознакомление с понятием компьютерных игр и их основными жанрами. Выбор сюжета игры и среды программирования. Отрисовка графики; проведение функционального и интерфейсного тестирования программы. Анализ условий труда в данной компьютерной лаборатории.

    дипломная работа [3,2 M], добавлен 13.07.2014

  • Разработка компьютерной игры, выбор структур, используемых данных, технологии, языка и среды программирования. Алгоритм и программа для реализации игры, функциональные возможности и сопровождение разрабатываемой системы. Выбор стратегии тестирования.

    курсовая работа [341,9 K], добавлен 19.04.2011

  • История развития языка программирования Java. История тетриса - культовой компьютерной игры, изобретённой в СССР. Правила проведения игры, особенности начисления очков. Создание интерфейса программы, ее реализация в среде Java, кодирование, тестирование.

    курсовая работа [168,1 K], добавлен 27.09.2013

  • Анализ моделируемого приложения и постановка задачи. Диаграмма прецедентов, деятельности объектов и состояния классов. Разработка приложения-игры, выбор языка программирования и среды для разработки проекта, интерфейс приложения и ресурсы проекта.

    курсовая работа [308,5 K], добавлен 14.10.2011

  • Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.

    курсовая работа [572,7 K], добавлен 14.07.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.