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

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



НазваниеСоздание компьютерных игр
Дата конвертации26.08.2012
Размер99.13 Kb.
ТипРеферат


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


С помощью компилятора


Borland C++ Builder 6.0


mapron


& Mapron productions, 2005 (c)


В.Смирнов

Самоучитель создания прикладных и игровых программ с помощью компилятора Borland C++ Builder 6.0.


Издание первое, адаптированное.

Предисловие к первому изданию.


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

Этот самоучитель хорош для начинающих программистов, но всем будет интересно его прочитать.


Содержание.

I Введение

1. Знакомимся с C++ Builder

2. Графика - где она нужна?

3. Основы графического исполнения

4. Использование файлов

II Создание примитивных игр

5. Основные приёмы

6. Арканоид

7. Крестики-нолики

8. Ролевая игра - RPG

9.

III Игры с продвинутой графикой

10. Аркада

11. Арканоид (продолжение)

12.

13.

IV Создание прикладных программ

14. Калькулятор

15. Часы


I Введение


1. Знакомимся с C++ Builder


1.1 Первое знакомство

При первом запуске вы увидите(это всегда будет так):

Окно (форму) с надписью Form1

Здесь создается окно вашего будущего приложения.

Вы видите его почти так же, каким оно будет при запуске.

Нажмите F9 или зелёный треугольничек. При этом произойдет компиляция

программы, и вы увидите готовое окно.

Хотя в нем ничего нет, но это полноценное окно.

Закройте его.Вы снова вернетесь к разработке

Выше окна вы видите панель инструментов

на закладках Standart, Additional, Win32 находятся визуальные компоненты.

Жмыкните по одному из них и разместите на форме.Запустите снова

Как вы видите, при нажатии (я думаю, вы выбрали кнопку)ничего не происходит -

вы не создали программно никаких реакций на нажатие клавиши.

Закройте работающую программу.

Жмыкните дважды по кнопке.

Появилось нечто вроде текстового редактора.


1.2 Редактор кода

Это - редактор кода.Он редактирует исходные тексты программ.

Именно за ним вам придется проводить все свои вечера :)))

(Там три закладки Unit1.cpp - файл с описанием функций и переменных;

Unit1.
h -заголовочных файл- прототипы функций и классы; Diagram - вообще не нужно :)

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

|

}

//---------------------------------------------------------------------------

Введите на месте курсора Form1->Close();

Теперь при нажатии кнопки форма будет закрываться.

Таким образом, написание программы происходит в окне редактора кода.


1.3 Сохранение

Сохраним теперь наш проект(программа создается при компиляции -

обработке исходных текстов программ(подробнее - в спец. изданиях)

Выберите File - Save project As или File - Save all

Лучше создайте отдельную папку для своих проектов и для каждого проекта -

отдельную папку.

Откройте этим диалоговым окном свою папку (сперва сохраняется Unit1)

Нажмите Сохранить.Затем тут же предложат сохранить Project1.cpp

Внимание! Имя проекта соответствует имени программы, так что сохраняйте, к примеру

knopka.cpp


И последнее: в Борланде существует мощная система помощи - в любом месте достаточно нажать F1

Если у вас с английским плохо, то сочувствую.


^ 2. Графика - где она нужна?


2.1 Области применеия:

-Создание пользовательского интерфейса в различных программах;

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

-Графический дизайн (реклама, интернет);

-Создание и редактирование фотографий, рисунков, изображений.


2.2 Создание графических объекстов:

-Создание с помощию графических редакторов Paint, Photoshop, и т.п.

-Сканирование при помощи сканера;

-Использоание уже созданных или их редактирование.


3. Основы графического исполнения


3.1 Назначение графических объектов


- Пользовательский интерфейс (кнопки, фон, общий вид);


II Создание примитивных игр


5. Основные приёмы


Я бы выделил несколько уровней в освоении компьютерной графики:


0. Не использование компьютерной графики;

1. Использование Image'й и SpeedButton'ов

2. Использование Canvas'а и HDC

3. Использование возможностей DirectDraw, OpenGL, DirectX


Мы остановимся на 1 и 2 уровнях.


6. Арканоид


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

Этапы создания.

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

2. Рисуем собственно мяч и ракетку (небольших размеров, я бы посоветовал 30х30 и 75х25 соответственно)

3. Создаем Таймер, который будет изменять координаты шарика и ракетки и двум Имэджам присваивать их координаты.

4. Дорабатываем программу, чтобы было отражение от стенок.


Итак, код заголовочного файла (только классы):

class TForm1 : public TForm

{

__published: // IDE-managed Components

TImage *Image1; //первый имэдж, мяч

TImage *Image2;//ракетка

TTimer *Timer1; //обрабатывающий таймер

void __fastcall Timer1Timer(TObject *Sender);

void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X,

int Y);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

class mach //мяч

{

public:

int kx,ky; //координаты

int skorx,skory; //скорость перемещения по х и по у

mach() {kx=0;ky=0;skorx=3;skory=3;} //конструктор, ставит в верхний левый угол

} mac1; //один объект


class rocket //ракетка

{

public:

int kx;int ky; //координаты

int skorx; //перемещение

rocket() {skorx=0;kx=0;ky=400;} //ставит ракетку

} rak1; //один объект


Вот код Таймера, в файле срр:

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

mac1.kx+=mac1.skorx;

mac1.ky+=mac1.skory;

rak1.kx+=rak1.skorx;

Image1->Top=mac1.ky;

Image1->Left=mac1.kx;

Image2->Top=rak1.ky;

Image2->Left=rak1.kx;

}

Еще нужен обработчик движений мыши

void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,

int X, int Y)

{

if (X>rak1.kx) rak1.skorx=5;

if (X
}

Теперь при запуске все будет двигаться, хотя и медленно, но не будет отскакивать

Вот обработка отскакивания:


if ((mac1.kx+Image1->Picture->Bitmap->Height>=rak1.kx)&&

(mac1.ky+Image1->Picture->Bitmap->Width>=rak1.ky)&&

(mac1.ky<=rak1.ky+Image1->Picture->Bitmap->Width)&&

(mac1.skory>0)) mac1.skory= -mac1.skory;


if ((mac1.kx+Image1->Picture->Bitmap->Width>=Form1->ClientWidth)

&&(mac1.skorx>0)) mac1.skorx= -mac1.skorx;


if ((mac1.kx<=0)&&(mac1.skorx<0)) mac1.skorx= -mac1.skorx;


if ((mac1.ky<=0)&&(mac1.skory<0)) mac1.skory= -mac1.skory;


if ((mac1.ky+Image1->Picture->Bitmap->Height>=Form1->ClientHeight)

&&(mac1.skory>0))

{ Timer1->Enabled=false;ShowMessage("Game over!");} //вделайте сюда свою обработку поражения.


Контрольные вопросы

1. Что такое Image?Каким его свойством задается изображение?

2. Зачем использовать классы в арканоиде? Нельзя ли обойтись переменными?

3. А почему сразу нельзя перейти к изучению навороченной графики?


Контрольные ответы:

1 Это визуальный компонент, реализующий выведение графического изображения; Своиством Bitmap.

2. Так удобнее, имеется протсая возможность модификации

3. Нельзя. Нужно сперва потренироваться, где попроще.


Задания.

Переделайте арканоид, чтобы:

1. а) ракетка останавливалась при приближении к мыши.

б) ракетка замедлялась/ускорялась, в зависимости от расстояния до указателя мыши.

в) ракетка постепенно поднималась.

2. а) мячик отскакивал под заданным углом.

б)мячик отскакивал под произвольным угом.

в) было несколько мячиков. ( Подсказка: пользуйтесь свойством Visible Имэджа)

В программе:

3. а) Сделайте обработку проигрыша

б) Сделайте выигрыш и его обработку.

4. а) Сделайте подсчет очков и времени.

б) Сделайте вывод счета. Подсказка:сделайте нижний(левый) бортик и измените отсчет отражений.

в) Сделайте вывод результатов в файл.

5. а) Сделайте главное меню.

б) Сделайте меню настроек.


7 Крестики-нолики


Этапы создания.

1. Создаем 9 Едитов и обрабатываем клики по ним.

Необходимо создать также поле (двумерный массив 3х3)

2. Создаем Имэджи, делаем невидимыми Едиты и переводим клики одних в клики других.

3. Создаем интеллект компьютеру.

4. Создаем условия выигрыша и проигрыша.


Размещаем на форме 9 Едитов: слева направо и сверху вниз.

Создаем массив, переменную хода.

Вот как выглядит окно:



Вот код класса формы в заголовочном файле:

class TForm1 : public TForm

{

__published: // IDE-managed Components

TEdit *Edit1;

TEdit *Edit2;

TEdit *Edit3;

TEdit *Edit4;

TEdit *Edit5;

TEdit *Edit6;

TEdit *Edit7;

TEdit *Edit8;

TEdit *Edit9;

TEdit *Edit10;

TButton *Button1;

TButton *Button2;

TButton *Button3;

void __fastcall Button3Click(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall Edit1Click(TObject *Sender);

void __fastcall Edit2Click(TObject *Sender);

void __fastcall Edit3Click(TObject *Sender);

void __fastcall Edit4Click(TObject *Sender);

void __fastcall Edit5Click(TObject *Sender);

void __fastcall Edit6Click(TObject *Sender);

void __fastcall Edit7Click(TObject *Sender);

void __fastcall Edit8Click(TObject *Sender);

void __fastcall Edit9Click(TObject *Sender);

private: // User declarations

public: // User declarations

void vivod();

void klik(int n);

__fastcall TForm1(TComponent* Owner);

};


Не пытайтесь просто копировать его, создавайте обработку событий!

Вот код файла реализации:

TForm1 *Form1;//это| у вас должно быть :)

Byte pole[3][3]; // \|/ создаёте

String vari[3]={" ","X","O"};

Byte turn=1;

//---------------------------------------------------------------------------

void TForm1::vivod() //Вывод, пока в Едиты, можно легко переделать на имэджы

{

for (int k=0;k<3;k++) {

if (pole[0][0]==k) Edit1->Text=vari[k];

if (pole[0][1]==k) Edit2->Text=vari[k];

if (pole[0][2]==k) Edit3->Text=vari[k];

if (pole[1][0]==k) Edit4->Text=vari[k];

if (pole[1][1]==k) Edit5->Text=vari[k];

if (pole[1][2]==k) Edit6->Text=vari[k];

if (pole[2][0]==k) Edit7->Text=vari[k];

if (pole[2][1]==k) Edit8->Text=vari[k];

if (pole[2][2]==k) Edit9->Text=vari[k];


}

}

//---------------------------------------------------------------------------

void TForm1::klik(int n) //вообще клики

{

if (pole[0][n-1]==0) pole[0][n-1]=turn; //заполнение массива значениями

if (turn==1) turn=2;

else turn=1;

vivod(); //вывод в Едиты

}

//---------------------------------------------------------------------------

И еще под конструктором:

void __fastcall TForm1::Button3Click(TObject *Sender) //выход

{

Application->Terminate();

}

//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender) //новая игра

{

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

for (int j=0;j<3;j++) {

pole[i][j]=0;

}

}

vivod();

}

void __fastcall TForm1::Edit1Click(TObject *Sender) {klik(1);}

void __fastcall TForm1::Edit2Click(TObject *Sender) {klik(2);}

void __fastcall TForm1::Edit3Click(TObject *Sender) {klik(3);}

void __fastcall TForm1::Edit4Click(TObject *Sender) {klik(4);}

void __fastcall TForm1::Edit5Click(TObject *Sender) {klik(5);}

void __fastcall TForm1::Edit6Click(TObject *Sender) {klik(6);}

void __fastcall TForm1::Edit7Click(TObject *Sender) {klik(7);}

void __fastcall TForm1::Edit8Click(TObject *Sender) {klik(8);}

void __fastcall TForm1::Edit9Click(TObject *Sender) {klik(9);}


Как переделать код на Имэджи:

Клики переставить;

vivod переделать: в зав-ти от значения, Image1->Picture->LoadFromFile("krest.bmp"); к примеру. Всево потребуется, соответственно 9 имэджей и 3 файла с картинками bmp


Как обойтись 1 имэджэм/вообще без имэджей:

В заголовочном файле вне класса пишем:

Graphics::TBitmap *bmp1;//имя любое, понятное

Graphics::TBitmap *bmp2;

Graphics::TBitmap *bmp3;

В конструкторе формы пишем:

bmp1->LoadFromFile("pust.bmp");

bmp2->LoadFromFile("krest.bmp");

bmp3->LoadFromFile("nol.bmp");


В vivod е пишем:

...

Form1->Canvas->Draw(0,0,bmp1);

На форме рисуется картинка без всяких имэджей!

Я маленько модифицировал эту идею:

В гаголовочном файле:

Graphics::TBitmap *bmp1[3];

В конструкторе формы:

bmp1[0]= new Graphics::TBitmap;

bmp1[1]= new Graphics::TBitmap;

bmp1[2]= new Graphics::TBitmap;

bmp1[0]->LoadFromFile("p.bmp");//Свои названия картинок, разумеется

bmp1[1]->LoadFromFile("k.bmp");

bmp1[2]->LoadFromFile("n.bmp");

И vivod соответственно:

void TForm1::vivod()

{

for (int k=0;k<3;k++) { //Эту часть можно будет

if (pole[0][0]==k) Edit1->Text=vari[k];

if (pole[0][1]==k) Edit2->Text=vari[k];

if (pole[0][2]==k) Edit3->Text=vari[k];

if (pole[1][0]==k) Edit4->Text=vari[k];

if (pole[1][1]==k) Edit5->Text=vari[k];

if (pole[1][2]==k) Edit6->Text=vari[k];

if (pole[2][0]==k) Edit7->Text=vari[k];

if (pole[2][1]==k) Edit8->Text=vari[k];

if (pole[2][2]==k) Edit9->Text=vari[k];

} // убрать, когда все будет работать

for (int k=0;k<3;k++) {

if (pole[0][0]==k) Form1->Canvas->Draw(10,10,bmp1[k]);

if (pole[0][1]==k) Form1->Canvas->Draw(70,10,bmp1[k]);

if (pole[0][2]==k) Form1->Canvas->Draw(130,10,bmp1[k]);

if (pole[1][0]==k) Form1->Canvas->Draw(10,70,bmp1[k]);

if (pole[1][1]==k) Form1->Canvas->Draw(70,70,bmp1[k]);

if (pole[1][2]==k) Form1->Canvas->Draw(130,70,bmp1[k]);

if (pole[2][0]==k) Form1->Canvas->Draw(10,130,bmp1[k]);

if (pole[2][1]==k) Form1->Canvas->Draw(70,130,bmp1[k]);

if (pole[2][2]==k) Form1->Canvas->Draw(130,130,bmp1[k]);

}

} //КПД правда, только 33% - можете придумать лучше.

Вот снимок:




Теперь нужно сделать событие Form-> OnMouseDown

//здесь мы реализуем "нажатия по полям"

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,

TShiftState Shift, int X, int Y)

{

if (X>=10&&X<=60&&Y>=10&&Y<=60) klik(1);

if (X>=70&&X<=120&&Y>=10&&Y<=60) klik(2);

if (X>=130&&X<=180&&Y>=10&&Y<=60) klik(3);

if (X>=10&&X<=60&&Y>=70&&Y<=120) klik(4);

if (X>=70&&X<=120&&Y>=70&&Y<=120) klik(5);

if (X>=130&&X<=180&&Y>=70&&Y<=120) klik(6);

if (X>=10&&X<=60&&Y>=130&&Y<=180) klik(7);

if (X>=70&&X<=120&&Y>=130&&Y<=180) klik(8);

if (X>=130&&X<=180&&Y>=130&&Y<=180) klik(9);

}

Итак, графическая часть сделана.

(Можно убрать Едиты с формы и из программы)

Вот скриншот:



Осталось сделать интеллект, проигрыш и победу.

Добавьте функции prov() , over(int n), KompHod(int trn); в класс формы

файл реализации:

//---------------------------------------------------------------------------

void TForm1::klik(int n)

{

if (turn==0) return; //если никто не ходит

if (pole[0][n-1]==0&&turn==1) pole[0][n-1]=turn; //если крестики, то присв. массиву...

if (turn==1) turn=2; //переход хода

else KompHod(2); //если 2 (0 в начале), ходит Комп

vivod(); //вывод

if (prov()==1) return; //если игра закончена, можно модифицировать

}

//---------------------------------------------------------------------------

int TForm1::prov()

{

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

if (pole[i][0]==pole[i][1]&&pole[i][1]==pole[i][2]&&pole[i][2])

{over(pole[i][2]);return 1;} //строки

}

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

if (pole[0][i]==pole[1][i]&&pole[1][i]==pole[2][i]&&pole[2][i])

{over(pole[2][i]);return 1;} //столбцы

}

if (pole[0][0]==pole[1][1]&&pole[1][1]==pole[2][2]&&pole[2][2])

{over(pole[2][2]);return 1;} //диагонали

if (pole[0][2]==pole[1][1]&&pole[1][1]==pole[2][0]&&pole[2][0])

{over(pole[2][0]);return 1;}

return 0;

}

//---------------------------------------------------------------------------

void TForm1::KompHod(int trn)

{

met1:

int a=random(3);int b=random(3);//произвольные числа

if (intellect==1) {if (pole[a][b]==0) pole[a][b]=trn;else goto met1;} //если пустая -ставить, нет -снова

turn=1; //переход хода

}

//---------------------------------------------------------------------------

void TForm1::over(int n)

{

if (n==1) ShowMessage("Crosses won!"); //выигрыш крестиков

if (n==2) ShowMessage("Rounds won!");// ноликов

if (n==3) ShowMessage("Draw...");//ничья

if (n==1||n==2||n==3) turn=0;

}


Теперь осталось доработать искусственный интеллект. Я думаю, вы и сами с этим справитесь.

Хотя нет.

Подскажу:

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

if (pole[0][i]==pole[1][i]&& pole[0][i]&& !pole[2][i]) pole[2][i]=trn;

} равны не нуль нуль поставить


Вопросы и задания


Вопросы

1. Как нам создать Bitmap? Как загрузить его из файла?

2. Как рисовать прямо на форме без имэджей?

3. Чем можно заменить кнопки?Как это сделать?


Задания

Модифицируйте программу:

1. Уберите строку состояния, если сделали, и создайте, если нет.

2. Сделайте, наконец интеллект!

3. Сделайте сохранение результатов.

4. Сделайте возможность изменения игроков.

5. Добавьте еще игроков.

6. Сделайте поле больше.

7. Сделайте их трехмерными.


Творческое задание.


Сделайте маленький калькулятор или часы, в которых нет кнопок, но есть их видимость

(и результат). Каждая кнопка будет иметь 3 состояния: нормальное, наведенное, нажатое.





Похожие:

Создание компьютерных игр iconА. Серавин game is over или психология компьютерных игр
Уверяю вас, что абсолютное большинство людей живёт рядом с такой же педалью… Похожую ситуацию, забывание о еде и сне, мы наблюдали...
Создание компьютерных игр iconДокументы
1. /Создание коммерческих игр.doc
Создание компьютерных игр iconКак сохранить здоровье ребенка при работе за компьютером?
Если же на экране высвечивается не обучающая программа, а одна из многочисленных компьютерных игр, подростки, даже чувствуя утомление,...
Создание компьютерных игр iconКак сохранить здоровье ребенка при работе за компьютером?
Если же на экране высвечивается не обучающая программа, а одна из многочисленных компьютерных игр, подростки, даже чувствуя утомление,...
Создание компьютерных игр iconСпособы увеличения привлекательности он-лайн игр на флэш
Практически все простые игры – это римейки старых синклеровских и досовских игр. Несмотря на обилие сложных современных игр простые...
Создание компьютерных игр iconКомпьютерная графика Изучив эту тему вы узнаете: Виды графических компьютерных изображений
Большинство редакторов ориентированы не столько на создание изображений, сколько на их обработку
Создание компьютерных игр iconИгровой тир нового поколения «Game тир 4D» Игровой тир нового поколения «Game тир 4D»
Захватывающие игровые сценарии лучших компьютерных игр теперь переносятся в настоящий тир, где стрелок в близкой к реальности обстановке...
Создание компьютерных игр iconДокументы
1. /Влияние компьютерных игр.doc
2. /Паспорт...

Создание компьютерных игр iconКомпьютерные игры: жизнь и виртуальная реальность «И не может ли получится так, что растущее племя уйдет в виртуальные миры и мы не сумеем понять, вернется оно к нам или нет»
А. Г. Асмолов в комментарии к книге Бурлакова И. В. «Homo Gamer: психология компьютерных игр». Недавно в программе «Вести» показали...
Создание компьютерных игр iconИспользование компьютерных средств обучения в дисциплинах естественнонаучного цикла
При проведении занятий в компьютерных классах возрастает активность обучаемых, самостоятельно прорабатывающих большой объем учебной...
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©podelise.ru 2000-2014
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов