C++ Builder :: Игрописательство :: Как написать игру за 21 день ?

Главная

Введение

ЛИКБЕЗ
C++ Builder


ЛИКБЕЗ
C++

Глава №1
Глава №2
Глава №3
Глава №4
Глава №5
Глава №6

Исходники
к пособию

Мои исходники

Статьи
&
Книги


Гостевая

Ссылки

About

E-mail

Rambler's Top100


Краткий справочник по языку C++
 

Переменная.

 Скорее всего, это слово вы слышали в школе. Например, исходя из школьного опыта, вы можете увидеть, что в уравнении x+1=2, переменной является x.

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

Откройте Билдер, нарисуйте кнопочку и нажмите на нее дважды. У вас появится окошко с кодом программы.

 void __fastcall TForm1::Button1Click(TObject *Sender)
{

 }

 Вставьте этот текст в код кнопки:

char a=100;
ShowMessage(a);
ShowMessage(int(a));

 Чтобы получилось так:

 void __fastcall TForm1::Button1Click(TObject *Sender)
{
 char a=100;
 ShowMessage(a);
 ShowMessage(int(a));
 ShowMessage(a”);
}

 

Далее по тексту, если я буду говорить «назначить действие кнопке» я буду иметь в виду проделанные вами действия.

 А теперь запустите программу (F9) и посмотрите, что происходит при нажатии кнопки Button1.

Если вы нигде не опечатались (с кем не бывает), у вас при нажатии на кнопку должны вылетать по очереди три окошка с надписями «d» «100» и «a».

Про опечатки.

 Для тех кто опечатался и для всех остальных: ОБРАЩАЙТЕ ВНИМАНИЕ НА РЕГИСТР БУКВ т КАКИМИ БУКВАМИ НАПИСАНО КАЖДОЕ СЛОВО БОЛЬШИМИ ИЛИ МАЛЕНЬКИМИ.

 Так, например, если вы напишите вместо «ShowMessage» «Showmessage» у вас ничего не будет работать.

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

 Что это было ?

Теперь я поясню вам что, собственно говоря, было здесь написано. Начнем, разумеется с первой строчки. А именно с того, что же такое «char». «сhar» - это сокращение от английского слова character, что переводится на русский, как «символ». В коде вашей программы это означает объявление переменной символьного типа. Найти переменную, я думаю, не составит большого труда – здесь ею будет “a”. Соответственно «a=100» значит, что переменная «а» изначально будет равна 100. 

Не будем надолго задерживаться здесь и перейдем последующим строчкам. Вы видите здесь трижды повторяющееся слово «ShowMessage». Если вы запускали эту программу, то видели 3 выскакивающих окошка. Пока объясним это так: слово «ShowMessage» означает выскакивающее окошко.

 Т.е вы можете написать ShowMessage(“Какой угодно текст, ваще безразницы”); и он выведет его вам.

 * Также вы можете написать ShowMessage(а); где «a» переменная. Переменную нужно писать без кавычек !!!

 Чуть позже мы рассмотрим тему функции и вы узнаете в полной мере, что это такое. 

Размер ячейки памяти. Что есть что и сколько оно занимает ?

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

 Бит – ноль или единица. Наименьшая единица информации.

 Как и в первом классе объясню это на яблоках:

 1 бит

 1 – у вас яблоко есть. 0 – его нет.

2 бита

 Однако, если вы вдвоем с другом и у каждого может яблоко быть и не быть возникает 4 возможных ситуации – 1) яблоки есть у вас обоих. 2) яблок нет ни у кого 3) яблоко есть у вас и нет у него 4) яблоко есть у него и нет у вас.

3 бита и больше.

 Если друга у вас два т всего вас трое, то возможных ситуаций получается уже 8 на языке 0-1 это можно записать так: 111, 110, 100, 101, 011, 010, 001, 000.

 В случае с 4-мя битами комбинаций (ситуаций) будет 16, с 5-ю 32 и.т.д. Из этого можно заключить вывод, что число комбинаций равно 2^n (два в степени n).

 Байт – 8 бит. Из вышеописанного видно, что в байте можно закодировать одну из 256 комбинаций и следовательно число от 0 до 255. Обратите внимание, что нулевая комбинация считается, как отдельная и поэтому последним числом из возможных будет 255.

 

Обратите внимание:

 Килобайт = 1024 байт, а никак не 1000 как вы могли сначала подумать. Откуда взялось это число? 2^10=1024. Соответственно и мегабайт = 1024 килобайта.

 1 байт занимают переменные типа char. В этих переменных, как правило, числа никто не хранит – в основном они используются для хранения символьных данных, ведь максимальным числом, которое можно записать в эту переменную будет 255 и то, если это unsigned (беззнаковый) char.

Если это обычный char, то только от -127 до 128, а во многих случаях этого будет мало).

 Поэтому, для хранения чисел используется тип int, занимающий 4 байта (по крайней мере в C++ Builder'e). «int» - это опять же сокращение от английского слова «integer» - целое. Честно говоря, далеко не любое целое число поместится в int, т в int могут храниться числа от 0 до 65535 (или от -32768 до 32768). 2^16=65536.

 На заметку: по умолчанию если вы присваиваете переменной тип int, считается, что переменная знаковая и область ее допустимых значений от -32768 до 32768. Но вы можете поставить перед int идентификатор unsigned, что по-английски значит «беззнаковый» и область значений станет от 0 до 65535.

Кстати, узнать сколько байт занимает переменная можно, используя встроенную функцию языка C - sizeof.

int i;
ShowMessage(sizeof(i));
char c;
ShowMessage(sizeof(c));

 А что если вам захочется записать не целое число, а дробное или целое, но большего размера? Для таких случаев существуют типы float и double.

 Обратите внимание: несмотря на то, что область значений char от -127 до 128, вы можете написать char x=300; и компилятор не выдаст вам ошибки, однако, при выводе ShowMessage(int(x)); вы получите 44.

 Приведение типов. Функции IntToStr, StrToInt

C++ Builder и многие другие современные среды разработки позволяют некоторые вольности при работе с типами. Поэтому во многих случаях работает как такой код

Button2->Caption="5";

Так и такой:

Button2->Caption=5;

И, хотя по сути, символьной переменной присваивается числовое значение, ничего криминального не происходит. Все это работает из-за автоматического приведения типов, который используется при работе с типом AnsiString (да-да Caption и многие другие свойства именно этого типа а не классического char).

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

Массивы

 Простые переменные это конечно хорошо, но, подумайте, сколько вам нужно будет объявить переменных, чтобы записать это предложение по буквам?

 Много. Да ладно, можете уже не считать.

 И придумали люди вместо того чтобы писать так:

char a1=’с’;
char a2=’л’;
char a3=’о’;
char a4=’в’;
char a5=’о’;

 писать char a[5]=”слово”;

 «a[5]» называется массивом.

 Хотя, сейчас пользоваться типом char нежелательно

 Функция.

Функция - Именованный кусок кода, который может принимать на вход какие-то параметры и может возвращать на выходе какое-то значение. Передача параметров осуществляется через стек в прямом или обратном порядке.

Понятно? Нет? На самом деле все гораздо проще. Возьмем, например, функцию знакомую вам по школе y=x2.

int parabola(x)
{
 return x*x;
}

 вызывать ее из другого места можно к примеру так:

int a;
int b;
b=parabola(a);

 Условия и циклы.

 Циклы очень тесно взаимосвязаны с массивами. Представим такую задачу: массив из 10 элементов нужно заполнить одним и тем же значением.

Без цикла это выглядит так: 

int a[10];
a[0]=5;
a[1]=5;
a[2]=5;
a[3]=5;
a[4]=5;
a[5]=5;
a[6]=5;
a[7]=5;
a[8]=5;
a[9]=5;

С циклом все заметно проще:

 for(int i=0;i<10;i++)
 a[i]=5;

 Классы и Объекты (экземпляры классов)

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

 Начинаем работать с C++ Builderом.

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

 void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
 Caption=Key;
}

Сделайте самостоятельно прогу, которая будет решать квадратные уравнения.

Для разогрева мы с вами сделаем калькулятор. «А как же игры?», - спросите вы. Всему свое время. Имейте терпение.

Как сделать, чтобы ваш шедевр смогли увидеть миллионы людей ?

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

 Тут есть два варианта: 1-й – скопировать и носить с собой где-нибудь все требуемые библиотеки; 2-й – включать эти библиотеки в экзешник при компиляции. В разных ситуациях применяют как первый так и второй способ.

 Достоинства первого способа и недостатки второго: при включении библиотек в экзешник он разрастается в размерах, однако размер его будет гораздо меньше чем размер всех требуемых библиотек + размер экзешника без библиотек.

 Суть второго способа способа состоит в том, чтобы зайти в Project->Options->Packages и снять галку Build with Runtime Packages, а затем зайти Project->Options->Linker и снять галку Use dynamic RTL.

 

 

 
 
Hosted by uCoz