201311090823


Programmeerimisring IV.

Objektid

    It's a curious feeling to see the edge receding
    It seems the more I know, the more I don't know
    Does this ever end?
    
    Tony Banks, Curious Feeling, 1979

Funktsioonid plus muutujad moodustavad klasse. Klass on nagu küpsetusvorm, mille abil võib suvalist arvu objekte (ehk juba söödavaid küpsiseid) luua, (küpsetusvorm pole eriti maitsev, kuigi abstraktselt öeldes (abstract methods, static variables, etc.) on söödav (static behaviour have side effects on every instance)). Proovime sellest kuidagi aru saada. Koodi on võimalik katsetada, näiteks greenfoot projektis HelloWorld (Programmeerimisring III). Laiendame veidi enda volitusi SevenWorld.java faili suhtes:

  ...
    
  public int x = 0;
  public int y = 0;
  
  // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
  String foo() {
    int m = 3;
    return "" + m++;
  }

  public SevenWorld() {    
      super(1024, 768, 1);
      print7( foo());
      print7( foo());
      print7( foo());
  // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  }
  ...
  
Vastuseks saame 333: Iga kord kui kutsutakse välja funktsioon foo() ta unustab, et oli m++. Aga milleks return lauses see "" + ?  Vastus Java stiilis: See pole mingi Java, selle asemel tuleb kirjutada hoopis:

  String stringReturningIntegerVariableValue = Integer.toString( m);
  m = m + 1;
  return stringReturningIntegerVariableValue;
  
Selleks, et m muutuks, tõstame ta funktsiooni kehast välja:

  int m = 3;
  String foo() {
      return "" + m++;
  }
  
Vastus: 345. Nüüd foo() ja m käivad ühes komplektis, mida tulebki kajastada sõnaga klass ning nimetame seda kapseldamiseks (encapsulation).

  class SevenWorld {
      ...
      int m = 3;
      String foo() {
          return "" + m++;
      }
      ...
  }
  

Collision Detect.

Tekkis küsimus, kuidas ZeppelinGame mängus siga ei saaks läbi seina ujuda. Vastik vastus kõlab nii -- selleks pole vajadust (Appendix A). Et kiviseinast tavaliselt läbi ei saa, (isegi ei näe) veendume [3] stsenaariumis "Interactive Landscape" ning Appendix B abil (nukunäidend).

------------------------------------------------------------------------

Appendix A. Siga kuulab klahve "right", "down", "0", "1" and "2":

Vasak kallas:

  A. "Right" -- animatsioon: ujub lähema sügava veeni, siis jääb seisma.
  B. "Down" -- animatsioon: sukeldub põhja, võtab kristalli, tõuseb vee pinnale tagasi. Ujub lähima teleport-kabiinini. Teleport läheb läbipaistvaks, ning on näha kui palju kristalle hetkel sees on:
  
    0 -- keegi eelnejatest pole kristalli siia jätnud ning siga pole sukeldunud.
    1 -- sea poolt püütud või eelneja poolt jäetud kristall.
    2 -- nii sea poolt püütud kui ka eelneja poolt jäetud kristallid.
  
  C. "0", "1", "2" - sööb kristalle ära saades ekstraelu. Ujub edasi ning jääb seisma A positsioonis.

------------------------------------------------------------------------

Appendix B.

TI (AI) mängu stsenaarium. Mari(a|o) asub keskel, ning liiigub vasakult paremale (tegelikult roheline maastik sinise taevaga liigub paremalt vasakule). Mingi aja pärast tema ees on sein, mängib Pink Floydi "Is there anybody out there?.." plaadilt "The Wall" (1980). Mari viskab äsja leitud puuhalu üle seina, ning hetke pärast teiselt poolt seina lendab tagasi värskelt väljalõigatud puulusikas. Kes viskas, pole teada. "Yes, certainly there have to be someone on the other side of the wall.." mõtleb ta, ning hüppab seinast üle. Maastik muutub porgandi-värviliseks ning taevas mustaks (nagu Marsil kombeks ikka), ees on läbimatu kuristik. Abiks on lõpmatu USK ning nagu Indiana Jones "The last crusade" filmis (1989, ~1:45) või Prince of Persia mängus (1989,  level 12, [1]) -- tuleb teha samm tühjusesse, ning nähtamatu silla osa, kuhu oli juba jalg astunud, muutub nähtavaks. (Kuid iga järgmine samm -- otse kuristikku). Lõpuks Mari on paremal kaldal. Maa siin on must ja taevas punane. Lõpuks Mari jõuab maailma äärele, kus tekstuurid kaovad, ning jääb ainult peenikeste roheliste joontega mustal taustal kujundatud kolmnurkade 3D võrgustik -- karkass (raw frame, mesh, "The Thirteen's Floor",  1999, ~1:xx [2]). Samaks muutub ka Mari keha.

Mis saab edasi?

Links

[1]. http://www.youtube.com/watch?v=Xv20j8ChtRY
[2]. http://en.wikipedia.org/wiki/The_Thirteenth_Floor
[3]. http://www.greenfoot.org/scenarios/7069

