Переменные client и server представляют клиентскую и серверную сетевые компоненты. Важно понять, что в каждом запущенном образе игры используется лишь одна из указанных переменных. Иначе говоря, если игра работает в режиме сервера, то используется переменная server, в противном случае – client. Переменная isServer отслеживает, работает ли программа в режиме сервера.
Переменная status содержит текст, выводимый в строке состояния, а переменная gameOver говорит, закончена игра или нет. Переменная myMove определяет, может ли игрок совершить ход, или следует ожидать хода соперника. И наконец, переменная curSlot хранит номер текущего выбранного столбца на игровой доске.
Переменные класса C4Canvas впервые появляются в методе start(), код которого приведен в листинге 15.5.
Листинг 15.5. Метод start() класса C4Canvas начинается с инициализации переменных игры и активации сервиса клиент/сервер
public void start() {
// установить вывод на экран
display.setCurrent(this);
// инициализация изображений фишек
try {
piece[0] = Image.createImage("/RedPiece.png");
piece[1] = Image.createImage("/BluePiece.png");
}
catch (IOException e) {
System.err.println("Failed loading images!");
}
// инициализация спрайта стрелки
try {
// Create the arrow sprite
arrowSprite = new Sprite(Image.createImage("/Arrow.png"), 18, 16);
arrowSprite.setFrame(isServer ? 0 : 1); //Спрайт стрелки имеет два фрейма (синий и красный), каждый из которых используется в определенном режиме работы
}
catch (IOException e) {
System.err.println("Failed loading images!");
}
// инициализация проигрователей
try {
InputStream is = getClass().getResourceAsStream("Legal.wav");
legalPlayer = Manager.createPlayer(is, "audio/X-wav");
legalPlayer.prefetch();
is = getClass().getResourceAsStream("Illegal.wav");
illegalPlayer = Manager.createPlayer(is, "audio/X-wav");
illegalPlayer.prefetch();
is = getClass().getResourceAsStream("Win.wav");
winPlayer = Manager.createPlayer(is, "audio/X-wav");
winPlayer.prefetch();
is = getClass().getResourceAsStream("Lose.wav");
losePlayer = Manager.createPlayer(is, "audio/X-wav");
losePlayer.prefetch();
}
catch (IOException ioe) {
}
catch (MediaException me) {
}
// инициализация переменных игры
gameOver = true;
myMove = !isServer; // клиент всегда ходит первым
curSlot = 0;
gameState = new C4State();
// запуск сетевого сервиса
if (isServer) { //Начиная с этой точки мидлет работает в режиме сервера или клиента
server = new C4Server(this);
server.start();
}
else {
client = new C4Client(this);
client.start();
}
// запуск потока анимации
sleeping = false;
Thread t = new Thread(this);
t.start();
}