Ejemplo n.º 1
0
  /**
   * Tarkistetaan maailmassa hengailevat mahdolliset yksinäiset kuplat, eli sellaiset, jotka eivät
   * ole mitään kautta kiinni katossa. Jos sellaisia löytyy, asetetaan ne putoaviksi.
   */
  public void tarkistaYksinaiset() {

    ArrayList<Kupla> pysyvat = new ArrayList<Kupla>();

    /*
     * Käydään läpi kaikki maailman kuplat. Jos kupla on ylärivissä,
     * lisätään se pysyvien listaan kutsumalla metodia lisaaPysyva, joka
     * lisää listaan myös kaikki kuplan naapurin naapurit.
     */
    for (int i = 0; i < this.kuplat.size(); i++) {
      Kupla tutkittava = this.kuplat.get(i);
      if (tutkittava.annaY() == 50 && tutkittava.onEhja()) {
        this.lisaaPysyva(tutkittava, pysyvat);
      }
    }

    /*
     * Nyt kun on tallennettu pysyvien listaan kaikki ne maailman kuplat,
     * jotka ovat naapureidensa kautta kiinni katossa, asetetaan putoaviksi
     * kaikki listan ulkopuolelle jääneet.
     */
    for (int i = 0; i < this.kuplat.size(); i++) {
      if (!pysyvat.contains(this.kuplat.get(i)) && this.kuplat.get(i).onEhja()) {
        this.kuplat.get(i).asetaPutoavaksi();
      }
    }
  }
Ejemplo n.º 2
0
 /**
  * Metodi pudottaa kaikki maailman putoaviksi asetetut kuplat eli käynnistää niiden putoamisen
  * käyttäen apunaan nykyisen hetken ja edellisen hetken välistä erotusta (joka annetaan
  * ohjaaja-luokassa).
  *
  * @param muutos jonka arvolla kuplaa liikutetaan
  */
 public void pudota(long muutos) {
   for (int i = 0; i < this.kuplat.size(); i++) {
     Kupla tutkittava = this.kuplat.get(i);
     if (tutkittava.onPutoava() && tutkittava.onEhja()) {
       tutkittava.putoa(muutos);
     }
   }
 }
Ejemplo n.º 3
0
 /** Tutkitaan maailman kuplat ja selvitetään, ovatko ne ehjiä. */
 public void tutkiEhjat() {
   this.ehjat = new ArrayList<Kupla>();
   Iterator<Kupla> iteraattori = this.kuplaiteraattori();
   while (iteraattori.hasNext()) {
     Kupla tutkittava = iteraattori.next();
     if (tutkittava.onEhja()) {
       ehjat.add(tutkittava);
     }
   }
 }
Ejemplo n.º 4
0
  /**
   * Metodi palauttaa listan maailman kuplien väreistä.
   *
   * @return lista kuplien väreistä
   */
  public ArrayList<Vari> annaKuplienVarit() {

    ArrayList<Vari> kuplienVarit = new ArrayList<Vari>();
    Iterator<Kupla> iteraattori = this.kuplaiteraattori();

    while (iteraattori.hasNext()) {
      Kupla tutkittava = iteraattori.next();

      /* Kukin väri lisätään vain kerran listaan. */
      if (tutkittava.onEhja() && !kuplienVarit.contains(tutkittava.annaVari())) {
        kuplienVarit.add(tutkittava.annaVari());
      }
    }
    return kuplienVarit;
  }
Ejemplo n.º 5
0
  /**
   * Metodi lisää kuplia maailmaan joka kymmenennen ampumiskerran jälkeen. Aluksi pudotetaan kaikkia
   * maailman kuplia ja pisteitä yhden rivin verran alaspäin. Sitten luodaan yläriviin uudet kuplat
   * ja pisteet joka toisella kerralla limittäin ja joka toisella suoraan. Uudet pisteet täytyy
   * luoda, jotta kuplat asettuisivat oikein, kun niitä ammutaan uuteen yläriviin.
   */
  public void lisaaKuplia() {

    this.tutkiEhjat();

    /* Kuplia lisätään vain, jos maailmassa on ehjiä kuplia.*/
    if (!this.ehjat.isEmpty() && !this.onVainPutoavia()) {

      /* Kuplia lisätään tiettyjen ampumiskertojen välein. */
      if (this.ampumiskerrat % 10 == 0) {

        /*
         * Käydään läpi maailman pisteet ja pudotetaan niitä yhden
         * rivin verran alaspäin.
         */

        Iterator<Piste> iteraattori = this.pisteiteraattori();
        while (iteraattori.hasNext()) {
          Piste pudotettava = iteraattori.next();
          pudotettava.asetaSijainti(pudotettava.annaX(), pudotettava.annaY() + 45);
        }

        /* Pudotetaan myös kuplia yhden rivin verran alaspäin. */

        for (int i = 0; i < this.kuplat.size(); i++) {
          Kupla pudotettava = this.kuplat.get(i);
          pudotettava.asetaSijainti(pudotettava.annaX(), pudotettava.annaY() + 45);

          /*
           * Jos pudotettavat kuplat putoavat maailman alareunan
           * yli (tai siis ali hehheh), niin peli hävitään.
           */

          if (pudotettava.onEhja() && pudotettava.annaY() >= 450) {

            this.pelimaailma.lopetaPeli(false);
          }
        }

        /*
         * Joka toisella kerralla kuplat luodaan limittäin ja joka
         * toisella "suoraan". Aloitetaan limittäin luomisesta, koska
         * alempi rivi on tehty "suoraan".
         *
         */

        if (this.lisaamiskerrat % 2 == 0) {

          /* Luodaan uudet pisteet (8) yläreunaan. */
          for (int a = 0; a < 8; a++) {
            Piste uusi = new Piste(this.alkupiste_x + 45 + (a * 45), this.alkupiste_y + 22.5);
            this.pisteet.add(uusi);
          }

          /* Luodaan rivin verran (8) kuplia yläreunaan. */
          for (int b = 0; b < 8; b++) {
            Kupla uusi = new Kupla(this.alkupiste_x + 22.5 + (b * 45), this.alkupiste_y, this);
            this.kuplat.push(uusi);
          }
          this.lisaamiskerrat++;

          /* Nyt luodaan uudet pisteet ja kuplat "suoraan". */
        } else {

          /* Luodaan uudet pisteet (9) yläreunaan. */
          for (int a = 0; a < 9; a++) {
            Piste uusi = new Piste(this.alkupiste_x + 22.5 + (a * 45), this.alkupiste_y + 22.5);
            this.pisteet.add(uusi);
          }

          /* Luodaan rivin verran (9) kuplia yläreunaan. */
          for (int b = 0; b < 9; b++) {
            Kupla uusi = new Kupla(this.alkupiste_x + (b * 45), this.alkupiste_y, this);
            this.kuplat.push(uusi);
          }
          this.lisaamiskerrat++;
        }
      }

      /* Jos maailmassa ei ole enää ehjiä kuplia, peli on voitettu. */
    } else {
      this.peliLoppunut = true;
      this.pelimaailma.lopetaPeli(true);
    }
  }