03.11.2014 Views

Выпуск 5 - Российский государственный профессионально ...

Выпуск 5 - Российский государственный профессионально ...

Выпуск 5 - Российский государственный профессионально ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

вить номер типа корабля, к которому она относится,<br />

например, если односекционный — 1,<br />

2-секционный — 2 и т.д., а если в клетке корабля<br />

нет — 0. Соответствующие значения будем<br />

хранить в массиве с именем тип из 40 элементов.<br />

Следовательно, для указанной расстановки<br />

кораблей имеем:<br />

1) для 4-секционного:<br />

For i = 6 To 9<br />

тип(i) = 4<br />

Next i<br />

2) для 3-секционных:<br />

For i = 21 To 23<br />

тип(i) = 3<br />

Next i<br />

For i = 37 To 39<br />

тип(i) = 3<br />

Next i<br />

3) для 2-секционных:<br />

тип(3) = 2<br />

тип(4) = 2<br />

тип(12) = 2<br />

тип(13) = 2<br />

тип(17) = 2<br />

тип(18) = 2<br />

4) для односекционных:<br />

тип(15) = 1<br />

тип(27) = 1<br />

тип(32) = 1<br />

тип(34) = 1<br />

С учетом сказанного условие, по которому после<br />

“ранения” какого-либо корабля можно зафиксировать<br />

факт потопления односекционного корабля,<br />

будет таким:<br />

поле(ход – 1) = 0 And поле(ход + 1) = 0<br />

— 2-секционного:<br />

поле(ход – 1) = 2 Or поле(ход + 1) = 2<br />

— 3-секционного:<br />

поле(ход - 2) = 2<br />

And поле(ход - 1) = 2<br />

Or поле(ход - 1) = 2<br />

And поле(ход + 1) = 2<br />

Or поле(ход + 1) = 2<br />

And поле(ход + 2) = 2<br />

Для 4-секционного корабля соответствующее<br />

условие будет достаточно громоздким (возможны<br />

4 варианта):<br />

поле(ход - 3) = 2<br />

And поле(ход - 2) = 2<br />

And поле(ход - 1) = 2<br />

Or поле(ход - 2) = 2<br />

And поле(ход - 1) = 2<br />

And поле(ход + 1) = 2<br />

Or поле(ход - 1) = 2<br />

And поле(ход + 1) = 2<br />

And поле(ход + 2) = 2<br />

Or поле(ход + 1) = 2<br />

And поле(ход + 2) = 2<br />

And поле(ход + 3) = 2<br />

Чтобы определить, что игра закончилась, следует<br />

подсчитывать количество потопленных кораблей.<br />

Итак, разобравшись с логикой игры, можем перейти<br />

к кнопкам.<br />

Разместить их на листе и оформить на кнопке<br />

соответствующую надпись можно, вызвав панель<br />

инструментов Формы 2 . К каждой кнопке “привязываются”<br />

так называемые “макросы” — программы,<br />

написанные на языке программирования VBA,<br />

которые выполняются по щелчку на той или иной<br />

кнопке. Макрос можно создать сразу после размещения<br />

кнопки или потом.<br />

В первом случае после появления окна Назначить<br />

макрос объекту (рис. 3) необходимо:<br />

— изменить имя макроса на “Новая игра” или<br />

“Подтвердить ход”;<br />

— щелкнуть на кнопке Создать и в появившемся<br />

окне кода оформить макрос, записав в нем необходимые<br />

действия.<br />

Во втором случае следует вызвать правой кнопкой<br />

мыши контекстное меню и выбрать в нем пункт<br />

Назначить макрос. Последующие действия аналогичны<br />

описанным для первого случая.<br />

Рекомендуем читателям, прежде чем идти<br />

дальше, потренироваться с созданием кнопок<br />

и “привязки” к ним макросов. В качестве действий<br />

в макросах укажите, например, команду<br />

MsgBox("Здравствуйте, люди!").<br />

Рис. 3<br />

Теперь о содержании “наших” макросов.<br />

По щелчку на кнопке с надписью “Подтвердить<br />

ход” должны проводиться следующие действия:<br />

1. Считывание введенного в ячейке Е5 номера<br />

клетки.<br />

2. Проверка соответствующей клетки поля:<br />

если в соответствующем ей элементе<br />

массива поле записан 0<br />

то<br />

это промах<br />

все<br />

если записано 1<br />

то |это как минимум "ранение"<br />

Надо записать в данный элемент<br />

значение 2,<br />

2<br />

Или панель Элементы управления.<br />

59<br />

май 2012 / ИНФОРМАТИКА

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!