Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проект №7. Описание игры с использованием ООП.docx
Скачиваний:
23
Добавлен:
11.04.2015
Размер:
223.71 Кб
Скачать

7.2 Определяем первый класс Кубик - tDice

Первым добавляем в программу самый простой класс — Кубик. В нем будет всего один метод, который можно назвать GetDiceValue(). Он будет возвращать значение типа int (целое число от 1 до 6), а вот параметров у него никаких нет — они не нужны. Надо также добавить одну переменную LastValue, в которую будет записываться последнее выброшенное на кубике значение.

class TDice 

{

public:

int LastValue;

int GetDiceValue() ;

};

Теперь в файле Game.cpp надо указать, что же реально метод делает. Определение метода GetDiceValue() удобно добавить в самый конец файла Game.cpp.

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

int TDice::GetDiceValue()

{

}

А далее, вместо заключительной точки с запятой, которая в файле Game.h завершала описание метода, приводятся фигурные скобки — знакомый нам логический блок, в котором размещаются операторы, определяющие логику работы данного метода.

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

7.3 Описание метода для объекта Кубик, имитирующий его бросок.

В C++Builder есть удобная стандартная функция random(), которая в качестве параметра получает целое числоn,а возвращает тоже целое число из диапазона от 0 доn-1. Тогда бросание кубика с шестью гранями будет имитироваться выражением random ( 6 ) +1. Только для использования функции random() в файл Game.cpp надо включить заголовочный файл stdlib.h:

#include <stdlib.h>

Полностью метод, имитирующий бросание кубика, запишется так:

// бросаем кубик - получаем значение от 1 до 6

int TDice::GetDiceValue()

{

LastValue = random(6)+1;

return LastValue;

}

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

Сейчас нами был создан класс «Игральный кубик», который фактически не привязан к создаваемой программе. Его реализацию можно легко выделить и в дальнейшем включать в другие приложения, уже не тратя время на повторное программирование. В этом заключается огромное преимущество языка Си++, позволяющего повторно использовать ранее разработанные классы, составляя программу из готовых компонентов. Такой подход наглядно реализован в С++Вuilder— в его библиотеке визуальных компонентов, представляющих собой классы Си++. Конечно, такие многократно используемые классы должны быть очень хорошо отлажены.

7.4. Описываем класс Игрок

Описание класса Игрок надо продолжить в файле Game.h, вслед за описанием класса TDice:

classTPlayer

{

public:

intScores, CurrentScores, WinNum;

};

Переменные Scores - суммарное количество очков,

CurrentScores- очки, набранные на текущем ходу

WinNum- число выигранных партий.

Эти переменные помещены в общую (public) часть описания класса так как размер создаваемой программы не велик, и специально ограничивать доступ к каким-то переменным нет необходимости.

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

Метод lnit(), как и другие методы, которые будут вызываться из других классов, надо разместить в общей части описания TPlayer:

class TPIayer

{

public:

int Scores, CurrentScores, WinNum;

void Init() ;

};

Определение метода lnit() в файле Game.cpp запишется так:

//Инициализация внутренних переменных класса Игрок

void TPIayer::Init()

{

Scores = CurrentScores = 0;

}

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