Вступление
Примеры Словарь Вопросы
Sun Microsystems

Примеры программирования на Java

Космос
(space.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 
  {
    
     Graphics g;
     
     Image background; // Здесь будет храниться картинка фона
     Image home; // В этой переменной будет содержаться движущейся объект
     
     Coordinate coordinate;
         
     boolean done_loading = false;
    
     int width; // Данные переменные хранят ширину и
     int height;//			 высоту фонового изображения 
	 
     int X;
     int Y;

//=====================================================================

	public void init()
 	{
 	  
 	   g = getGraphics();
    // Получение изображения для фона и объекта из файлов
     	   background = getImage(getCodeBase(), "sat.jpg"); 
 	   home = getImage(getCodeBase(), "mir.gif");
 	   
 	   width = size().width;
 	   height = size().height;
 	  
      
 	   get_coordinate();
	 
 	    // Создается изображение вне экрана ( createImage), а
	   // затем выводится на экран функцией drawImage.
	   Image offScrImage = createImage(width, height);
 	   Graphics offScrGC = offScrImage.getGraphics();
	   offScrGC.drawImage(background, 0, 0, width, height, this);
	      
 
 }
 //========================================================
  // Обработка событий нажатия клавиши
 public boolean keyDown(Event evt, int key)
   
   {
   // Реакция на нажатие стрелок на клавиатуре
    switch(key)
       {
      case Event.UP:
      move_s(-1, 0);
      break;
      case Event.DOWN:
      move_s(1, 0);
      break;
      case Event.LEFT:
      move_s(0, -1);
      break;
      case Event.RIGHT:
      move_s(0, 1);
      break;
       } 
     	
     return true;
    } 
 	
	
 	
//==========================================================
void get_coordinate()
  {
     // Начальное положение объекта 
     coordinate = new Coordinate(100, 100);
   }

//========================================================
 public void move_s(int dy, int dx)
   {
  //dx и dy -- приращение координат. Они могут принимать значения -1, 0, 1  
  
   int old_x = coordinate.x; //Сохранение координат предыдущего (" старого")
   int old_y = coordinate.y; // местоположения
  
   int new_x = old_x + dx; // Вычисление "новых" координат
   int new_y = old_y + dy;
   
   // При удалении объекта  необходимо восстановить "старое" фоновое
   // изображение. Для этого достаточно перерисовать только 
   // невидимую часть. Для этого создается копия графического
   // контекста g2.
 	  
   Graphics g2;
   g2 = g.create();
   
   // Затем clipRect создает  прямоугольник отсечения ( там где раньше
   // было изображение объекта )	
 	  
   g2.clipRect(old_x, old_y, home.getWidth(this), home.getHeight(this));
     
  // Если "новое" изображение объекта попадает полностью в границы
  // апплета, то новые координаты становятся текущими. Затем восстанавливается
  // фоновое изображение и выводится объект уже в новом месте с координатами
  // 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, new_x, new_y,  this);
   } 
 }
//=====================================================================
public boolean mouseDown(Event evt, int x, int y) 
	
	// Если указатель мыши помещается в  область апплета, 
	// и нажимается любая клавиша мыши,
	// то таким образом задается направление движения объекта
	
	{
	  X = x;
	  Y = y;
   
     if ( x <= coordinate.x)
      {
       for ( int i=0; i < ( coordinate.x - x); i++)
       {
      
        if ( y <= coordinate.y)
        move_s ( -1, -1);
             
        else 
        move_s ( 1, -1); 	
     	
       }
      }
    else 
     {
     for ( int i=0; i < (x - coordinate.x); i++)
        {
    
     if ( y <= coordinate.y)
        move_s ( -1, 1);
       
        else 
        move_s ( 1, 1);
     	
       }
     }
    
     return true;
    } 
//======================================================================
 
//======================================================================
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;
	          repaint();
	          
	          return false;
	        }
	      else 
	          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);
        }
    } 
 	   
//==============================================
 }