public void paint (Graphics g)
{
. . .
}
}
В отличие от языка C++ в Java связь со следующим ферзем определяется как объект типа
Queen, а не как указатель на Queen. Перед посылкой сообщения ферзю, определяемому
переменной neighbor, выполняется явная проверка на ненулевое значение.
Поскольку язык Java предоставляет богатое множество графических подпрограмм,
решение будет отличаться от прочих тем, что окончательная расстановка ферзей будет
нарисована на экране. Метод paint рисует ферзя, потом изображает соседей.
class Queen
{
. . .
public void paint (Graphics g)
{
// x, y — левый верхний угол
int x = (row — 1) * 50;
int y = (column — 1) * 50;
g.drawLine(x+5, y+45, x+45, y+45);
g.drawLine(x+5, y+45, x+5, y+5);
g.drawLine(x+45, y+45, x+45, y+5);
g.drawLine(x+5, y+35, x+45, y+35);
g.drawLine(x+5, y+5, x+15, y+20);
g.drawLine(x+15, y+20, x+25, y+5);
g.drawLine(x+25, y+5, x+35, y+20);
g.drawLine(x+35, y+20, x+45, y+5);
g.drawLine(x+20, y+20, 10, 10);
// затем рисуем соседа
if (neighbor != null)
neighbor.paint(g);
}
}
Графические программы рисуют маленькую корону, выглядящую вот так:
В языке Java нет ни глобальных переменных, ни «безклассовых» функций. Как мы
опишем более детально в главе 8, программа начинается с определения подкласса
системного класса Applet и переопределения некоторых методов. В частности, метод init
используется для инициализации приложения, а метод paint — для перерисовки экрана.
Мы также определим метод mouseDown, вызываемый при нажатии кнопки мыши, чтобы
заставить программу переходить к следующему решению. Назовем класс нашего
приложения QueenSolver и определим его так:
public class QueenSolver extends Applet
{ private Queen lastQueen;
public void init()
{ lastQueen = null;
for (int i = 1; i <= 8; i++)
PDF created with pdfFactory Pro trial version www.pdffactory.com