demo
Class AstiaPeli

java.lang.Object
  extended by demo.AstiaPeli
Direct Known Subclasses:
AstiaPeli2

public class AstiaPeli
extends java.lang.Object

John McLane (Bruce Willis) joutui elokuvassa Die Hard 3 ongelman eteen, jossa piti kahdella vesikanisterilla mitata jonkin muun suuruinen vesimäärä "tarkasti" ja näin estää pommin räjähtäminen. Koska aika meni varsin tiukalle, on vastaavien tilanteiden harjoittelemiseksi nyt tehty uusi menestysohjelma "Astia".
Pelillä demonstroidaan/harjoitellaan miten voidaan kahdella astialla, 5 l ja 8 l, muodostaa kaikki mahdolliset tilavuudet 1-13 l. Pelissä on kaksi varsinaista astiaa: a5 ja a8, sekä kolmas apuastia ampari. Nestettä voidaan kerrallaan kaataa yhdestä astiasta toiseen joko siten, että astian koko sisältö tyhjennetään jos se mahtuu tai astista kaadetaan sen verran että toinen astia tulee täyteen.
Tee ohjelma jota voitasiin käyttää seuraavasti:

  Käytössäsi on 8 ja 5 litran astia ja Ämpäri (100 l)

  8 litran astiassa on 0 litraa
  5 litran astiassa on 0 litraa
  Mistä kaadetaan ja mihin >ä 8[ret]
  8 litran astiassa on 8 litraa
  5 litran astiassa on 0 litraa
  Mistä kaadetaan ja mihin >8 5[ret]
  8 litran astiassa on 3 litraa
  5 litran astiassa on 5 litraa
  Mistä kaadetaan ja mihin >5 ä[ret]
  8 litran astiassa on 3 litraa
  5 litran astiassa on 0 litraa
  Mistä kaadetaan ja mihin >8 5[ret]
  8 litran astiassa on 0 litraa
  5 litran astiassa on 3 litraa
  Mistä kaadetaan ja mihin >[ret]
Toteutettu peli-luokaksi, jossa käytetään hyväksi Astia2-luokkaa.

Version:
1.0, 09.02.2003, 1.1, 14.02.2003
Author:
Vesa Lappalainen

Field Summary
protected  Astia[] astiat
          Taulukko astioista
private  int lkm
           
private static int MAXLKM
           
 
Constructor Summary
AstiaPeli()
          Astiapelin alustus.
 
Method Summary
 int etsi(java.lang.String nimi)
          Etsii sen astian, jolla on annettu nimi.
 int getLkm()
          Palautetaan astioiden lukumäärä pelissä
 void lisaaAstia(java.lang.String nimi, double tilavuus)
          Lisätään uusi astia peliin.
static void main(java.lang.String[] args)
          Astiapelin pääohjelma
 void nimiOhje(java.lang.String mista, java.lang.String mihin)
          Tulostetaan ohjeet nimistä.
 void pelaa()
          Käynistetään peli.
 void tulostaMaarat()
          Tulostetaan astioissa olevat nestemäärät
 void tulostaOhje()
          Tulostetaan pelin ohje
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MAXLKM

private static final int MAXLKM
See Also:
Constant Field Values

astiat

protected Astia[] astiat
Taulukko astioista


lkm

private int lkm
Constructor Detail

AstiaPeli

public AstiaPeli()
Astiapelin alustus. Laitetaan aina ämpäri mukaan.

Method Detail

getLkm

public int getLkm()
Palautetaan astioiden lukumäärä pelissä

Returns:
astioiden lukumäärä

lisaaAstia

public final void lisaaAstia(java.lang.String nimi,
                             double tilavuus)
Lisätään uusi astia peliin. Luodaan tätä varten uusi astia.

Parameters:
nimi - lisättävän astian nimi
tilavuus - lisättävän astian tilavuus
Example:
  AstiaPeli peli = new AstiaPeli();
  peli.getLkm() === 1;
  peli.lisaaAstia("5",5);
  peli.getLkm() === 2;
  peli.lisaaAstia("8",8);
  peli.getLkm() === 3;
 

tulostaOhje

public void tulostaOhje()
Tulostetaan pelin ohje

Example:
  Suuntaaja.StringOutput so = new Suuntaaja.StringOutput();
  AstiaPeli peli = new AstiaPeli();  peli.lisaaAstia("5",5);  peli.lisaaAstia("8",8);
  peli.tulostaOhje();
  so.ero("Käytössäsi on 5.0 sekä 8.0 litran astiat ja Ämpari (100.0 l)\n") === null;
  so.palauta();
 

tulostaMaarat

public void tulostaMaarat()
Tulostetaan astioissa olevat nestemäärät


etsi

public int etsi(java.lang.String nimi)
Etsii sen astian, jolla on annettu nimi.

Parameters:
nimi - etsittävän astian nimi
Returns:
astian indeksi taulukossa tai -1 jos ei löydy
Example:
 
  AstiaPeli peli = new AstiaPeli();  peli.lisaaAstia("5",5);  peli.lisaaAstia("8",8);
  peli.etsi("ä") === 0;
  peli.etsi("Ä") === 0;
  peli.etsi("5") === 1;
  peli.etsi("8") === 2;
  peli.etsi("9") === -1;
 

nimiOhje

public void nimiOhje(java.lang.String mista,
                     java.lang.String mihin)
Tulostetaan ohjeet nimistä.

Parameters:
mista - mistä yritettiin
mihin - mihin yritettiin
Example:
  Suuntaaja.StringOutput so = new Suuntaaja.StringOutput();
  AstiaPeli peli = new AstiaPeli(); peli.lisaaAstia("5",5); peli.lisaaAstia("8",8);
  peli.nimiOhje("4","6");
  String tulos = "Nimeä ei tunneta: 4 tai 6\n" +
                 "Tunnetaan nimet: \n"         +
                 "ä 5 8 \n";
  so.ero(tulos) === null;             
  so.palauta();
 

pelaa

public void pelaa()
Käynistetään peli. Peli loppuu kun käyttäjä syöttää tyhjän rivin.

Example:
 Suuntaaja.StringInput si = new Suuntaaja.StringInput();  
 Suuntaaja.StringOutput so = new Suuntaaja.StringOutput();
 
 si.input("ä 8\n8 5\n4 5\n\n");  
 String tulos =
   "Käytössäsi on 5.0 sekä 8.0 litran astiat ja Ämpari (100.0 l)\n"+
   "5.0 litran astiassa on 0.0 litraa nestettä\n" +
   "8.0 litran astiassa on 0.0 litraa nestettä\n" +
   "Mistä kaadetaan ja mihin >"                   + // NOPMD
   "5.0 litran astiassa on 0.0 litraa nestettä\n" +
   "8.0 litran astiassa on 8.0 litraa nestettä\n" +
   "Mistä kaadetaan ja mihin >"                   +
   "5.0 litran astiassa on 5.0 litraa nestettä\n" +
   "8.0 litran astiassa on 3.0 litraa nestettä\n" +
   "Mistä kaadetaan ja mihin >"                   +
   "Nimeä ei tunneta: 4 tai 5\n"                  +
   "Tunnetaan nimet: \n"                          + 
   "ä 5 8 \n"                                     +
   "5.0 litran astiassa on 5.0 litraa nestettä\n" +
   "8.0 litran astiassa on 3.0 litraa nestettä\n" +
   "Mistä kaadetaan ja mihin >";
 
   AstiaPeli peli = new AstiaPeli();
   peli.lisaaAstia("5",5);
   peli.lisaaAstia("8",8);
   peli.tulostaOhje();
   peli.pelaa();
 
 so.ero(tulos) === null; 
 si.palauta(); so.palauta();
 

main

public static void main(java.lang.String[] args)
Astiapelin pääohjelma

Parameters:
args - ei käytössä