import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * Luokka Pelitesti on testiluokka, joka testaa tekstipohjaisen * pelin perustoiminnot aloittamalla pelin ja pyörittämällä vuoroja * niin kauan, kuin peli on käynnissä. Tekstipohjaisessa pelissä ei * voi muuttaa asetuksia. * * @author Karoliina Tiuraniemi * @version 1.0, 18.1.2009 * */ public class Pelitesti { private Peli peli; private Matikka matikka; /** * Metodi, joka aloittaa pelin. Peli peli poistettu parametreistä * */ public void aloita(){ System.out.println("* * * ÖTÖKKÄMATIKKA * * *"); System.out.println("(c) Karoliina Tiuraniemi 2008"); System.out.println(); System.out.println("Taso 1: Kuinka monta?"); System.out.println("Taso 2: Laske yhteen!"); System.out.println("Valitse taso:"); int komento = this.pyydaKomento(); if (komento == 1){ this.peli = new Peli(1, 5); } else if (komento == 2){ this.peli = new Peli(2, 5); } this.matikka = this.peli.annaMatikka(); System.out.println("Peli kestää " + this.peli.annaVuoromaksimi() + " vuoroa."); System.out.println(""); this.pelaa(); } /** * Metodi, joka pitää pelin pyörimässä ja pelaa vuoroja * kunnes peli on loppunut. */ public void pelaa(){ while(!this.peli.peliLoppui()){ this.pelaaVuoro(); } } /** * Metodi, joka pyytää ja käsittelee käyttäjän komennon. * @return komento jos komento on tulkittavissa ja se on numero * -1 muulloin. */ public int pyydaKomento(){ try { // lukee komentotulkkiin syötetyn komennon ja puskuroi sen InputStreamReader input = new InputStreamReader(System.in); BufferedReader lukija = new BufferedReader(input); // muuttaa komennon integeriksi int komento = Integer.parseInt(lukija.readLine()); System.out.println("Komento on " + komento); return komento; } catch (NumberFormatException nfe){ System.out.println("Arvauksen pitää olla numero!"); return -1; } catch (IOException e){ System.out.println("Ei onnistunut."); return -1; } } /** * Metodi, joka pelaa yhden vuoron. Alussa valitun tason mukaan * vuorossa joko arvotaan kuinka monta ötökkää on laskettavana * tai sitten arvotaan käyttäjälle lasku ratkaistavaksi. * Yrityskertoja on kolme, jos osuu ensimmäisellä arvauskerralla * oikeaan, saa pisteen. * */ public void pelaaVuoro(){ this.peli.lisaaVuorolaskuri(); System.out.println("Pelataan vuoro " + this.peli.annaVuorolaskuri()); // valitaan vuoron tehtävä tason mukaan. if (this.peli.annaTaso() == 1){ this.matikka.arvoMontako(); } else if (this.peli.annaTaso() == 2){ this.matikka.arvoLasku(); } this.matikka.arvoVaihtoehdot(); int yrityslaskuri = 0; // annetaan käyttäjälle kolme yrityskertaa. while (yrityslaskuri < 3){ int komento = this.pyydaKomento(); // komennon on oltava positiivinen, koska negatiivinen numero // tarkoittaa että on tapahtunut virhe. while (komento < 0){ System.out.println("Arvauksen on oltava positiivinen!"); komento = this.pyydaKomento(); } this.matikka.asetaArvaus(komento); // jos osuu ensimmäisellä arvauskerralla oikeaan, saa pisteen. if (this.matikka.tulosOikein()){ if (yrityslaskuri == 0){ this.peli.lisaaTuloslaskuri(); } break; } // jos yrityksiä on vielä jäljellä, siitä ilmoitetaan else if (yrityslaskuri < 2){ System.out.print("Yritä uudestaan!"); } yrityslaskuri++; } System.out.println(""); } /** * Päämetodi, joka käynnistää tekstipohjaisen pelin. * @param args */ public static void main(String[] args) { Pelitesti pelitesti = new Pelitesti(); pelitesti.aloita(); } }