Заметки по работе с DirectX8.1 SDK и по созданию 3D-игр  
     
   
     
  [Базовые уроки по DirectX] [Основы DirectMusic на Delphi] [Основы DirectInput8 на Delphi] [Основы DirectSound8 на Delphi]  
  [Разработка компьютерной игры] [Пример игры Donuts3D]  
     
 
Разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008
 
     
 

Данный небольшой урок является введением в программирование игр на C++ для DirectX 9

Вам нужно иметь установленную среду Microsoft Visual Studio 2005 или 2008 (можно триал),

и DirectX SDK 9 версии, или лучше самой последней - DirectX SDK August 2008.

 
     
  [назад] [далее] [к содержанию]  
     
  Мы рассматриваем основные конструкции языка C++ на примере работы в Microsoft Visual Studio 2008  
     
 

В предыдущих уроках - [Первый старт], [Меняем иконку приложения], [Добавляем другую модель]

мы ознакомились с первыми шагами, которые нужно выполнить для начала работы с directx в Microsoft Visual Studio 2008 - настроить примеры для корректной компиляции, сменить иконку в собственном проекте и наконец приступить к первым модификациям кода

 
     
 

Задача: вывести значение переменной на экран

Реализация: можно поместить на форму метку (label). Если реализовать вывод значения переменной по нажатию на кнопку.

При этом возникают следующие вопросы:

Как получить доступ к метке label на форме из кода?

Сначала решаем так: объявляем переменную, по нажатию на кнопку в ее свойстве Text выводим значение переменной

В заголовочном файле Form1.h

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
//int i = 0;
//MessageBox::Show("Hello, World!");
//Sender.Text = "1";
button1->Text = "1";

}

код помеченный коричневым был сгенерирован системой, код помеченный зеленым был записан нами

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

1

 
     
 

Функция перевода числа в текст?

itow (перевод int в строку Unicode)

эквивалент для .Net Framework - System::Convert::ToString

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
int i = 0;
button1->Text = Convert::ToString(i);

}

 
     
 

Показанный выше пример выводит число 0 в виде текста на поверхность кнопки!

Теперь можно заняться исследованиями языка C++

 
     
 

Разработка мини-калькулятора

Самый простейший вариант программы это небольшой калькулятор, который бы выполнял основные арифметические операции - сложение, вычитание, умножение, деление

должно быть поле для ввода значений и отображения результата,

кнопки +, -, *, /, =

Работа происходит так: в поле вводится первое число, нажимается кнопка операции, вводится второе число, нажимается = при этом в поле ввода должен появиться результат

 
     
 

Реализация - на форме нужно разместить элементы управления Button (5 шт), в качестве поля ввода TextBox

Дать элементам управления более осмысленные имена (свойство Name в панели Properties), например

plus_button, minus_button, mult_button, div_button, result_button, EnterFieldtextBox

Для свойства Text кнопок установите +, -, *, /, = соответственно

 
     
   
     
  По нажатию на кнопки - + * / значение текстового поля должно заноситься в переменную первого операнда (x), в специальную переменную должен заноситься код операции (code_op), по нажатию на кнопку = значение текстового поля должно заноситься в переменную второго операнда (y), должен вычисляться результат (res) и выводится в текстовое поле  
     
  Для очистки регистров x, y, res и code_op можно добавить специальную кнопку - Clear  
     
 

Вообще программирование приложения Windows Forms в MSVS 2008 сильно напоминает методы работы в Delphi 7!

Я не удержался и удалил кнопку Say Hello. Как поведет себя MSVS ? К сожалению код обработчика мне пришлось удалять вручную. Среда Delphi в этом случае повела бы себя более разумно - во время сохранения изменений когда код обработчика был бы пуст она бы удалила метод обработчика из кода. MSVS 2008 как видим этого не сделала. В этом плане MSVS сильно отличается от Delphi 7. Еще меня удивило, что код модуля формы для обработчиков нажатий кнопок попадает в заголовочный файл формы Form1.h. Возможно это связано с тем, что не вводился специальный тип файла для хранения данных формы. В Delphi 7 для этих целей есть специальный файл *.dfm

Похоже, что основные идеи создания приложений Windows Forms в Microsoft пришли из Delphi. Или я ошибаюсь?

 
     
 

в коде класса формы добавляем описание наших переменных статичных полей для формы

private: static int x, y, res, code_op;

 
     
 

остальной код (после автоматического добавления обработчиков нажатий на кнопки формы по аналогии с HelloWorldCLR) будет выглядеть так -

 
     
  private: System::Void plus_button_Click(System::Object^ sender, System::EventArgs^ e) {  
 

//запоминаем значение EnterFieldtextBox
x = Convert::ToInt32(EnterFieldtextBox->Text);
//и код операции
code_op = 1;

 
  }  
  private: System::Void clear_button_Click(System::Object^ sender, System::EventArgs^ e) {  
 

x = 0;
y = 0;
res = 0;
code_op = 0;
EnterFieldtextBox->Text = "0";

 
  }  
  private: System::Void result_button_Click(System::Object^ sender, System::EventArgs^ e) {  
 

//запоминаем значение второго операнда
y = Convert::ToInt32(EnterFieldtextBox->Text);
//выполняем вычисление
switch (code_op)
{
case 1:

 
 

res = x + y;
break;

 
 

case 2:

 
 

res = x - y;
break;

 
 

case 3:

 
 

res = x * y;
break;

 
 

case 4:

 
 

if (y != 0)
res = x / y;
break;

 
 

default: ;

 
 

}
//выводим результат
EnterFieldtextBox->Text = Convert::ToString(res);

 
  }  
  private: System::Void minus_button_Click(System::Object^ sender, System::EventArgs^ e) {  
 

//запоминаем значение EnterFieldtextBox
x = Convert::ToInt32(EnterFieldtextBox->Text);
//и код операции
code_op = 2;

 
  }  
  private: System::Void mult_button_Click(System::Object^ sender, System::EventArgs^ e) {  
 

//запоминаем значение EnterFieldtextBox
x = Convert::ToInt32(EnterFieldtextBox->Text);
//и код операции
code_op = 3;

 
  }  
 

private: System::Void div_button_Click(System::Object^ sender, System::EventArgs^ e) {
 
 

//запоминаем значение EnterFieldtextBox
x = Convert::ToInt32(EnterFieldtextBox->Text);
//и код операции
code_op = 4;

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

Щелкаем мышью по текстовому полю, вводим с клавиатуры первое число, нажимаем кнопку операции, снова щелкаем по текстовому полю и вводим второе число, нажимаем знак равно, получаем результат.

Кнопка clear приводит к очистке полей формы x, y, res, code_op и записи строкового значения "0" в свойство Text поля ввода EnterFieldtextBox

Обратите внимание!!! Т.к. MSVS и язык C++ являются чувствительными к регистру букв (заглавные/строчные), то все имена переменных и других идентификаторов необходимо вводить именно так, как вы их записали во время первого объявления!

Т.е. записав в секции объявлений или где-то в коде переменную с именем ReS обращаться к ней нужно именно как ReS, обращения res или Res или даже RES будут восприняты компилятором как обращения к совершенно другой переменной!!!!! Имейте это в виду, если Вы только только начали писать на С++.

Поскольку я хорошо знаком с Delphi 7, то я всегда буду сравнивать MSVS именно с ним. Ваш опыт программирования в других языках и средах сформирует в дальнейшем Ваше собственное мнение.

 
     
     
     
     
     
     
             
   
в следующем уроке мы начнем разбор основных конструкций языка C++
 
             
  [назад] [далее] [к содержанию]  
             
 

Обновления и новости о развитии Delphi DirectX проекта
смотри на сайтах:

http://www.megainformaticsite.pochta.ru
http://www.megainformatic.narod.ru

 
             
             
  (c) Мега Информатик 2006-2009          
         
       

 

Hosted by uCoz