Урок 3: Шпаргалки для начинающих программистов, глава 2

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

Наш цикл не будет представлен в классической форме. Просмотрев коды нескольких программ PSP, я убедился в сложности их построения. Поскольку все программы составляются таким же способом, то будет правильным, подробнее рассказать читателю о нем. Каждый раз мы используем цикл «infinite» (бесконечный цикл). Кроме оператора false (ранее я об этом не говорил), позволяющего прекратить выполнение цикла, у нас есть другой оператор – «break». Когда программа встречает данный оператор, она прекращает выполнение текущего цикла, и управление передается оператору, который следует за циклом. Итак, с этого момента начинается наш цикл:

while(1) {


Как вы можете видеть, этот оператор управления будет всегда находить значение «true» (истина); «1» соответствует «true». Таким образом, следующий код (строки между открывающейся квадратной скобкой и закрывающейся) будет неоднократно повторяться до тех пор, пока не встретится с оператором «break».

В следующей строке мы определяем значения «pad». Она использует функцию, описанную в файле «pspctrl.h», созданном ранее. Это вызов функции, который мы рассматривали в уроке 2. Наша ситуация имеет некоторые особенности. Во-первых, мы присваиваем «pad» два значения. Отделяем их запятой. Во-вторых, нам необходимо передать переменную. Следует включить имя переменной вместо числа или строки. В-третьих, нам нужно задать переменную перед оператором «&», который фактически является оператором адреса. Со временем изучения программирования вы лучше познакомитесь с его возможностями. А пока вам необходимо знать следующее: для того чтобы присвоить адрес, а не значение переменной, используйте оператор «&». Теперь присвоим значение «pad», чтобы задействовать средства управления PSP:

sceCtrlReadBufferPositive(&pad, 1);


Если у вас возник вопрос, касающийся цифры «1». То данным образом, указывая цифру «1», мы определяем количество буферов для чтения.

Следующая строка – оператор «if» (если). Он выстраивает логику программы. Оператор if позволяет выполнить блок кода, если условное выражение истинно. Нам необходимо, чтобы оператор «break» выходил из цикла после нажатия кнопки [X]. Более того, чтобы он не приостанавливал программу, а позволял перейти к следующему оператору. Если утверждение ложно, то он пропустит часть кода. В случае встрече с оператором «else», он выполнит указанный фрагмент кода или продолжит двигаться дальше. Если отсутствует оператор «else», то никакой оператор не выполняется и осуществляется повторное прохождение через цикл до тех пор, пока не нажата кнопка [X]. Завершаем наш цикл с помощью последней закрывающейся квадратной скобкой:

If (pad.Buttons & PSP_CTRL_CROSS) { break;}}


Если «if» кнопка [X] нажата, то цикл обрывается. В противном случае выполнение цикла продолжается.

Теперь со счетчиком. После нажатия кнопки [X] нам нужно запустить счетчик, который будет продолжаться до тех пор, пока пользователь не нажмет кнопку [O]. Что мы для этого делаем? Запускаем другой цикл и добавляем в код выхода (заменяем «PSP_CTRL_CIRCLE» на «PSP_CTRL_CROSS»):

while(1) {
sceCtrlReadBufferPositive(&pad, 1);
if(pad.Buttons & PSP_CTRL_CIRCLE) {break;}

Теперь нам нужно применить новую функцию. Она позволит нам очистить экран. Так как у нас на экране еще присутствует надпись «Нажмите [X] для запуска таймера», то мы должны убрать ее. К тому же, после очередного повторения цикла, данный код будет повторяться. Поэтому следует стереть данную надпись. Для этого печатаем следующее:

pspDebugScreenClear();


Благодаря этому мы уберем все лишнее с экрана и будем готовы вывести на печать обновленное значение нашего счетчика (а также помочь пользователю остановить счетчик и выйти из программы).
Первая строка должна быть вам знакомой. Ведь это простой оператор «printf». Одна вещь в конце строки вам может показаться непонятной – это «\\n». Итак, комбинация «\\n» представляет собой специальный символ, обозначающий новую строку. Он равнозначен нажатию клавиши «Enter» на клавиатуре. Второй оператор «printf» немного отличается. Он понадобится нам для вывода переменной «counter» на печать. С этой целью мы будем использовать оператор «%», который определяет, какую переменную мы хотим вывести на экран, а именно ее тип. Для целого числа будем применять «i» (integer – целое число). Вторым задаваемым параметром будет переменная, которую мы хотим вывести на экран. В нашей ситуации мы хотим вывести переменную «counter». Таким образом, помещаем в нашу программу следующие две строки:

printf("Press [O] To Stop the Timer\\n");
printf("Counter: %i", counter);

Мы завершили вторую часть третьего урока. Продолжим наши учения в третьей части, в которой мы полностью составим нашу программу. Поехали…?