- •Ход работы:
- •7.1 Описание классов.
- •7.2 Определяем первый класс Кубик - tDice
- •7.3 Описание метода для объекта Кубик, имитирующий его бросок.
- •7.4. Описываем класс Игрок
- •7.6 Описание Конструктора tPlayer
- •7.7 Описание класса судьи tReferee
- •7.7.1. Алгоритм реализация метода NewGameQ в файле Game.Cpp (смотри рисунок 5)
- •7.7.3 Метод GameFinish() дает информацию окончена ли игра или нет.
- •8. Продолжаем работать с интерфейсом программы на форме Form1.( смотри рисунок 1)
- •Событие «Новая игра»
- •8.2 Новая игра: описание методов ShowInfo(),EndGameTest().
- •8.2.1. Описание метода ShowInfo()
- •8.2.2 Текстовые константы , новый пользовательский файл Text.H
- •8.2.3. Конструктор класса tForm1
- •8.2.4. Проверка завершения текущей партии метод EndGameTest().
- •9. Программный код пункта меню «Новая Игра»
- •2.— А что делать, если партия продолжается?
- •10. Программный код пункта меню «Бросить кубик»
- •10. Программный код пункта меню «Передать очередь хода»
- •11. Продолжаем работать с интерфейсом программы на форме Form1.( смотри рисунок 1)
- •11.1 Настраиваем командные кнопки
- •12 Программирование пользовательского интерфейса
- •13. Случайная генерация
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 только один раз и это должно быть в теле конструктора класса.