// Новая игра
void TReferee::NewGame()
{ .
Human.Init();
Computer.Init() ';
if( Dice.GetDiceValueO <== 3 ) ComputerMove() ;
)
Доступ к внутренним переменным и свойствам класса
Метод ComputerMove() пока можно реализовать самым простым способом, не задумываясь над деталями эффективной стратегии игры за компьютер. Когда программа будет отлажена, появится возможность заняться совершенствованием этого алгоритма, пока же это не главное. «
Для простоты предположим, что компьютер во время своего хода всегда бросает кубик только один раз. Во время проверки выброшенного значения потребуется обращаться к переменным Scores и CurrentScores из класса TPIayer (объект Computer). При создании калькулятора упоминалось, что обращение к свойствам стандартных классов осуществляется с помощью комбинации символов —>. В случае с классами, определяемыми программистом, это не так. Для обращения к их свойствам (точно так же, как и при обращении к методам) надо использовать точку. Например, чтобы получить доступ к переменной Scores, содержащейся в переменной Computer класса TPIayer, надо записать
Computer.Scores — Но как же все-таки определить, когда использовать «.», а когда «->»?
Здесь надо сделать небольшое историческое отступление. Язык Си изначально разрабатывался с целью получения очень компактных и очень быстро работающих программ. Такие программы удавалось создавать в основном при использовании языка ассемблера — низкоуровневого, машинного языка элементарных команд, который различен для разных моделей компьютеров. В ассемблере активно применялись средства работы с оперативной памятью, прямого обращения к конкретным ячейкам ОЗУ, и в Си были учтены общие особенности различных ассембле-ров. Для этого в язык было введено понятие указателей — особых типов переменных, хранящих не данные, а физические адреса тех мест в памяти,
135