Advertisement
Guest User

midletCanvas.java

a guest
Jan 3rd, 2012
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.47 KB | None | 0 0
  1. import javax.microedition.lcdui.*;
  2.  
  3. class midletCanvas extends Canvas  {
  4.  midlet midlet;
  5.  random Random;
  6.  static int [] PlasmaTab = { //таблица цветов плазмы - 256 элементов
  7.   32,32,33,34,35,35,36,37,38,39,39,40,41,42,42,43,
  8.   44,45,45,46,47,47,48,49,49,50,51,51,52,52,53,54,
  9.   54,55,55,56,56,57,57,58,58,59,59,59,60,60,60,61,
  10.   61,61,62,62,62,62,63,63,63,63,63,63,63,63,63,63,
  11.   63,63,63,63,63,63,63,63,63,63,62,62,62,62,62,61,
  12.   61,61,60,60,60,59,59,58,58,58,57,57,56,56,55,54,
  13.   54,53,53,52,52,51,50,50,49,48,48,47,46,46,45,44,
  14.   43,43,42,41,40,40,39,38,37,37,36,35,34,33,33,32,
  15.   31,30,30,29,28,27,26,26,25,24,23,23,22,21,20,20,
  16.   19,18,17,17,16,15,15,14,13,13,12,11,11,10,10, 9,
  17.    9, 8, 7, 7, 6, 6, 5, 5, 5, 4, 4, 3, 3, 3, 2, 2,
  18.    2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  19.    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2,
  20.    2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9,
  21.    9,10,11,11,12,12,13,14,14,15,16,16,17,18,18,19,
  22.   20,21,21,22,23,24,24,25,26,27,28,28,29,30,31,31
  23.  };
  24.  //Естественно, я не набивал вручную эту таблицу, а получил
  25.  //по закону 32* (1+ sin (x*(2*pi/255)), приведя все к целым числам
  26.  
  27.  static int Delta = 6; //размер ячейки плазмы в пикселах
  28.  
  29.  static int Yold_pos=0, Yold_asp=0, Xold_pos=0, Xold_asp=0;
  30.  int Ynew_pos, Ynew_asp, Xnew_pos, Xnew_asp, x, y, Color;
  31.  static int Width, Height; //Ширина и высота экрана
  32.  static boolean in = false; //состояние перерисовки
  33.  Graphics gbuffer; //а это для
  34.  Image screen;     //двойной буферизации
  35.  
  36.  public midletCanvas (midlet midlet)  {
  37.   this.midlet = midlet;
  38.   Random = new random ();
  39.   setFullScreenMode (true); //Единственный оператор профиля MIDP 2.0
  40.   Width = getWidth ();
  41.   Height = getHeight ();
  42.   screen=Image.createImage(Width,Height);
  43.   gbuffer=screen.getGraphics(); //рисовать будем на gbuffer,
  44.   draw (gbuffer); //а потом одномоментно выводить его на канву!
  45.  }
  46.  
  47.  void draw (Graphics g) { //рисуем в буфере очередное состояние плазмы
  48.   in = true;
  49.   Ynew_pos = Yold_pos;        
  50.   Ynew_asp = Yold_asp;
  51.   for (y=0; y<Height; y+=Delta) {
  52.    Xnew_pos = Xold_pos;      
  53.    Xnew_asp = Xold_asp;
  54.    for (x=0; x<Width; x+=Delta) {
  55.     Color = PlasmaTab[Ynew_pos]+ PlasmaTab[Ynew_asp]+
  56.             PlasmaTab[Xnew_pos]+ PlasmaTab[Xnew_asp];
  57.     g.setColor(((255-Color)<<16 | Color<<8 | 128+(Color>>1)));
  58.     g.fillRect (x,y,Delta,Delta);
  59.     Xnew_pos += 1;
  60.     if (Xnew_pos > 255) Xnew_pos=0;
  61.     Xnew_asp += 7;
  62.     if (Xnew_asp > 255) Xnew_asp=0;
  63.    }
  64.    Ynew_pos += 2;
  65.    if (Ynew_pos > 255) Ynew_pos=0;
  66.    Ynew_asp += 1;
  67.    if (Ynew_asp > 255) Ynew_asp=0;
  68.   }
  69.   Xold_pos -= 2;
  70.   if (Xold_pos<0) Xold_pos=255;
  71.   Xold_asp += Random.get(8);
  72.   if (Xold_asp > 255) Xold_asp=0;
  73.   Yold_pos += 4;
  74.   if (Yold_pos > 255) Yold_pos=0;
  75.   Yold_asp -= Random.get(6);
  76.   if (Yold_asp<0) Yold_asp=255;
  77.   in = false;
  78.  }
  79.  
  80.  protected void paint (Graphics g) {
  81.   if (in == true) return; //Если мы еще в состоянии перерисовки
  82.   g.drawImage(screen,0,0,0);
  83.   draw (gbuffer);
  84.  }
  85.    
  86.  public void keyPressed(int keyCode) {
  87.   switch (keyCode) { //Выход по клавише #
  88.    case Canvas.KEY_POUND:    
  89.     midlet.exitMIDlet();
  90.    break;
  91.   }
  92.  }
  93.  
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement