Читаем Создание игр для мобильных телефонов полностью

Вот и все, что касается переменных класса C4State. Теперь вы, вероятно, понимаете переменные класса и что они моделируют. Давайте перейдем к рассмотрению методов этого класса.

Конструктор класса C4State инициализирует массив map, игровую доску и массивы счета (листинг 15.11).

Листинг 15.11. Конструктор C4State инициализирует массив map игры Connect 4 и игровую доску

public C4State {

// инициализация map

int i, j, k, count = 0;

if (map == null) {

map = new boolean[7][6][winPlaces];

for (i = 0; i < 7; i++)

for (j = 0; j < 6; j++)

for (k = 0; k < winPlaces; k++)

map[i][j][k] = false;

// установить горизонтальные выигрышные комбинации

for (i = 0; i < 6; i++)

for (j = 0; j < 4; j++) {

for (k = 0; k < 4; k++)

map[j + k][i][count] = true;

count++;

}

// установить вертикальные выигрышные комбинации

for (i = 0; i < 7; i++)

for (j = 0; j < 3; j++) {

for (k = 0; k < 4; k++)

map[i][j + k][count] = true;

count++;

}

// установить прямые диагональные комбинации

for (i = 0; i < 3; i++)

for (j = 0; j < 4; j++) {

for (k = 0; k < 4; k++)

map[j + k][i + k][count] = true;

count++;

}

// установить обратные диагональные комбинации

for (i = 0; i < 3; i++)

for (j = 6; j >= 3; j–) {

for (k = 0; k < 4; k++)

map[j – k][i + k][count] = true;

count++;

}

}

// инициализировать доску

for (i = 0; i < 7; i++) //В начале игры на доске нет фишек

for (j = 0; j < 6; j++)

board[i][j] = Empty;

// инициализировать счет

for (i = 0; i < 2; i++)

for (j = 0; j < winPlaces; j++)

score[i][j] = 1;

numPieces = 0;

}

Несмотря на то что конструктор содержит большой фрагмент кода, в нем выполняется лишь инициализация массива возможных победных комбинаций.

Метод isWinner класса C4State (листинг 15.12) проверяет, победил ли игрок.

Листинг 15.12. Метод isWinner класса C4State проверяет, одержал ли игрок победу

public boolean isWinner(int player) {

// проверить, победил ли игрок

for (int i = 0; i < winPlaces; i++)

if (score[player][i] == 16) //Число 16 в массиве счета говорит о победе

return true;

return false;

}

Метод isWinner определяет победу, проверяя элементы массива score на равенство 16.

Метод isTie проверяет ничью в игре, для чего он просто сравнивает значения переменных numPieces и maxPieces. Если они равны, это означает, что доска заполнена. Код метода isTie приведен в листинге 15.13.

Листинг 15.13. Метод isTie класса C4State проверяет, закончилась ли игра ничьей

public boolean isTie {

// проверить ничью

return (numPieces == maxPieces);

}

Метод dropPiece помещает фишку в колонку на доске (листинг 15.14). Листинг 15.14. Метод dropPiece класса C4Stste размещает фрагмент в указанном месте игрового поля

public int dropPiece(int player, int xPos) {

// проверить, есть ли в колонке место

int yPos = 0;

while ((board[xPos][yPos] != Empty) && (++yPos < 6))

;

// колонка заполнена

if (yPos == 6) //Колонка заполнена, поэтому возвратить значение, соответствующее ошибке (-1)

return -1;

// в колонке есть место

board[xPos][yPos] = player;

numPieces++;

updateScore(player, xPos, yPos);

return yPos;

}

Метод dropPiece в качестве параметра принимает координату X колонки. Сначала он проверяет, что в указанной колонке есть свободное место. Вы могли заметить, что игровая доска хранится в переменной board вверх тормашками. Такая инверсия облегчает процесс добавления фишки в колонку. Если ход возможен, то элементу массива board присваивается значение, соответствующее игроку, а значение переменной numPieces увеличивается на 1. Затем обновляется массив score, для чего вызывается метод updateScore.

Метод updateScore класса C4State обновляет элементы массива score (листинг 15.15).

Листинг 15.15. Метод updateScore класса C4State обновляет элементы массива score

private void updateScore(int player, int x, int y) {

// Update the score for the specified piece

for (int i = 0; i < winPlaces; i++)

if (map[x][y][i]) {

score[player][i] <<= 1;

score[1 – player][i] = 0;

}

}

Перейти на страницу:

Похожие книги

С компьютером на ты. Самое необходимое
С компьютером на ты. Самое необходимое

Рассказывается о работе в операционной системе Windows (на примере версий XP и 7), текстовом редакторе Word 2010 и других приложениях, необходимых каждому пользователю: архиваторах, антивирусах и программах для просмотра видео и прослушивания музыки (Winamp, QuickTime Pro). Большое внимание уделяется работе в Интернете. Рассказывается о программах для просмотра Web-страниц, об электронной почте, а также о различных полезных приложениях для работы в сети — менеджерах закачек файлов, ICQ, Windows Live Messenger, MSN и многих других. Во втором издании рассмотрена новая ОС — Windows 7, а также последние версии приложений для пользователей.Для начинающих пользователей ПК.

Андрей Александрович Егоров , Андрей Егоров

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT
От «кирпича» до смартфона
От «кирпича» до смартфона

Перед вами уникальное исследование мира мобильной индустрии, превращенное его автором Эльдаром Муртазиным, ведущим аналитиком Mobile Research Group и главным российским специалистом по мобильным телефонам, в захватывающий бизнес-триллер. Гигантские компании — Nokia, Motorola, Samsung бросают на мобильный фронт колоссальные силы, создают альянсы, охотятся за лучшими специалистами, шпионят друг за другом. Разработки ведутся в обстановке строжайшей секретности. Цель — выпустить на рынок новую, уникальную модель раньше конкурентов или даже полностью изменить наше представление о мобильном телефоне, как это недавно удалось Apple со своим iPhone.Эта книга предназначена для тех, кто видит в мобильном телефоне не просто средство связи, а чудо инженерной мысли, смелое воплощение дизайнерских фантазий, символ нашей эпохи.

Эльдар Викторович Муртазин , Эльдар Муртазин

Справочная литература / Прочая компьютерная литература / Прочая справочная литература / Книги по IT / Словари и Энциклопедии