|
Вступление Примеры Словарь Вопросы Sun Microsystems |
Примеры программирования на Java
import java.applet.*;
import java.awt.*;
//========================================
class Coordinate
// Для начала в программе объявляется новый класс Coordinate,
// который содержит координаты x и y. Используя обьекты класса Coordinate,
// можно хранить координаты объекта. Функция-конструктор класса использует
// значения его параметров для ввода переменных координат:
{
public int x;
public int y;
public Coordinate(int x, int y)
{
// Параметры функции-конструктора тоже называются х и у, как и переменные-
// члены класса. Для различия между ними используется ключевое слово this.
// Функцию-конструктор можно было бы описать и так:
// public Coordinate(int a, int b)
// {
// x = a;
// y = b;
// }
this.x = x;
this.y = y;
}
}
//============================================
public class space extends Applet implements Runnable
{
Graphics g;
Image background; // Здесь будет храниться картинка фона
Image home; // В этой переменной будет содержаться движущейся объект
Coordinate coordinate;
Thread thread; // переменная типа Поток
int width; // Данные переменные хранят ширину и
int height; // высоту фонового изображения
int count; // Здесь фиксируется число загруженных изображений
int grad; // Вспомогательная переменная. Она используется при
// формировании траектории дыижения корабля
boolean done_loading = false;
//=====================================================================
public void init()
{
g = getGraphics();
// Получение изображения для фона и объекта из файлов
background = getImage(getCodeBase(), "space.jpg");
home = getImage(getCodeBase(), "salyut.gif");
width = size().width;
height = size().height;
get_coordinate();
repaint();
// Создается изображение вне экрана ( createImage), а
// затем выводится на экран функцией drawImage.
Image offScrImage = createImage(width, height);
Graphics offScrGC = offScrImage.getGraphics();
offScrGC.drawImage(background, 0, 0, this);
}
//==========================================================================
public void start() // Запуск потока
{
if (thread == null)
(new Thread(this)).start();
}
//===========================================================================
public void delay () // функция задержки
{
try
{
Thread.sleep(10);
}
catch (InterruptedException e)
{
}
}
//=======================================================================
void get_coordinate()
{
// Начальное положение объекта
coordinate = new Coordinate(100, 100);
}
//========================================================
void move()
{
if (count > 1 ) // Когда все изображения загружены в память можно
// начинать движение
{
int old_x = coordinate.x;//Сохранение координат предыдущего ("старого")
int old_y = coordinate.y;// местоположения
int dx = (int) (Math.random() * 2); //dx и dy -- приращение координат.
int dy = (int) (Math.random() * 2); // Они могут принимать значения 0, 1
switch ( grad%4) // Формирование траектории
{
case 1:
dy = -dy;
break;
case 2:
dx = -dx;
dy = -dy;
break;
case 3:
dx = -dx;
break;
}
int new_x = old_x + dx; // Вычисление "новых" координат
int new_y = old_y + dy;
// При удалении объекта необходимо восстановить "старое" фоновое
// изображение. Для этого достаточно перерисовать только
// невидимую часть. Для этого создается копия графического
// контекста g2.
Graphics g2;
g2 = g.create();
// Затем clipRect создает прямоугольник отсечения ( там где раньшеЂ
// было изображение объекта )
g2.clipRect(coordinate.x, coordinate.y,home.getWidth(null) ,home.getHeight(null) );
// Если "новое" изображение объекта попадает полностью в границы
// аплета, то новые координаты становяться текущими. Затем восстанавливается
// фоновое изображение и выводиться объект уже в новом месте с координатами
// new_x и new_y
if ( ((new_x > 0) & (new_x < (width -home.getWidth(this )))) & ((new_y > 0) & (new_y < (height - home.getHeight(this)))))
{
coordinate.x = new_x;
coordinate.y = new_y;
g2.drawImage(background, 0, 0, null);
g.drawImage (home, coordinate.x, coordinate.y, this);
}
else
grad ++;
}
}
//=====================================================================
public void run()
{
while (true) // Работает пока запущен аплет
{
move();
delay();
}
}
//=====================================================================
public boolean imageUpdate ( Image img, int infoflags, int x, int y,
int w, int h)
{
// Пока фоновое изображение загружается, параметр
// infoflags не равен ALLBITS. Переменная done_loading
// равна false, и в строке статуса Вы видите Loading
if (infoflags == ALLBITS)
{
done_loading = true;
count ++;
repaint();
return false;
}
else
{
showStatus ("Loading");
return true;
}
}
//======================================================
public void paint (Graphics _g)
{
if (!done_loading)
showStatus ("Loading");
else
{
showStatus ("OK");
g.drawImage (background, 0, 0, this);
g.drawImage (home, coordinate.x, coordinate.y, this);
}
}
//==============================================
} Ѓ
|
||