Как можно видеть присутствуют все
Как можно видеть присутствуют все методы необходимые для реализации жизненного цикла приложения. Правда, реализацию методов я оставил пустой, для того чтобы не путать читателя и дать общую картину. В реальном приложении естественно этого делать не следует. Я думаю, что описывать предназначение каждого из методов и когда он вызывается более подробно, не имеет смысла. Для того чтобы получить более детальную информацию обратитесь к исходному коду приложения на компакт-диске.
Типичный класс Canvas выглядит так:
pr
public class MyCanvas extends Canvas implements CommandListener {
public MyCanvas() {
// Инициализация необходимых переменных происходит
// здесь. Например, мы хотим создать еще одну команду
// меню:
addCommand(new Command("Exit", Command.EXIT, 1)); }
public void commandAction(Command command, Displayable displayable) {
// Здесь происходит обработка команд меню.
}
protected synchronized void keyPressed(int keyCode) {
// Здесь происходит перехват нажатий клавиш управления
// телефона
}
otected void paint(Graphics g) {
// Рисуем здесь
}
} // end of class
Для получения более детальной информации обратитесь к исходному коду приложения на компакт-диске. Для того чтобы помочь вам разобраться с исходным кодом, ниже мы разместили некоторые комментарии.
Логика игры реализована в классе Engine. Алгоритм игры достаточно прост, мы обходим все варианты комбинаций в двумерном массиве, отражающем текущее состояние игрового поля. При этом, анализируя массив из трех полей — сечение (две диагонали, три вертикали и три горизонтали), мы расставляем приоритеты. Если приоритет встретившейся комбинации выше приоритета текущей комбинации, то встретившаяся комбинация становится текущей.
Ниже, c краткими пояснениями, приведено тело функции, которая является сердцем алгоритма:
protected boolean analaize()
{
// считаем,сколько в одном ряду крестиков, ноликов, пустых мест:
int x_counter = 0;
int o_counter = 0;
int e_counter = 0;
for (int i = 0; i < buffer.size(); i++)
{
Cell cell = (Cell)buffer.elementAt(i);
if (cell.value == STATE.E)
{
e_counter++;
}
if (cell.value == STATE.O)
{
o_counter++;
}
if (cell.value == STATE.X)
{
x_counter++;
}
}
// В зависимости от количества крестиков, ноликов или пустых
// мест определяем комбинацию (тип состояния) — searchState
int _searchState = SEARCH_STATE.ANY;
// user win
if (x_counter == 3)
{
_searchState = SEARCH_STATE.X_X_X;
this.gameState = GAMESTATE.USERWIN;
return true;
}
// engine can win :
if ((o_counter == 2)&&(e_counter == 1))
{
_searchState = SEARCH_STATE.O_O_E;
}
// danger - user can win :
if ((x_counter == 2)&&(e_counter == 1))
{
_searchState = SEARCH_STATE.X_X_E;
}
// good combination :
if ((o_counter == 1)&&(e_counter == 2))
{
_searchState = SEARCH_STATE.O_E_E;
}
// also good combination :
if (e_counter == 3)
{
_searchState = SEARCH_STATE.E_E_E;
}
// Если приоритет новой комбинации больше приоритета
// текущей комбинации,определяем новую комбинацию как
// текущую и запоминаем ее в переменных класса:
if (this.searchState < _searchState)
{
this.searchState = _searchState;
this.searchBuffer = new Vector();
// copy vector:
for (int i = 0; i < this.buffer.size(); i++)
{
this.searchBuffer.addElement(this.buffer.elementAt(i));
}
}
return false;
}
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий