Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: tekstiseikkailuun useita valintoja

jokunen1 [11.12.2012 16:31:45]

#

Olen tekemässä javalla ensimmäisti teksti seikkailuani ja haluaisin apua. Heluaisin tietää miten saan tuossa koodissa niin että vastaukseksi kelpaa useampi vaihtoehto. Esim: Tulee vastaus otat kiven vaikka kirjottaisi vastaukseksi: Nosta kivi. Ja että voisin lisätä vaihtoehtija sen mukaan miten haluan. Eli että :vastaus1 = ota kivi ja nosta kivi ja mahdollisesti muita vaihtoehtoja.Ja niin että ohjelma jatkaa suorittamista eri kohdasta kun vastaus1 ehdon täyttyessä taisilmukan toistuessa.
Toivottavasti ymmärsitte mitä yritin selittää.

Koodi:

import java.util.*;

public class Peli {
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
	       System.out.println("Peli");
               System.out.println("");
               System.out.println("");
               System.out.println("Tekijät:");
               System.out.println("");
               System.out.println("Ohjelmointi:");
               System.out.println("Juho");
                       System.out.println("Peli!");
        try {
    // Ainoa oleellinen rivi on seuraava.
    Thread.sleep(1000); // 1 s = 1000 ms
} catch (InterruptedException ex) {
    // Jotain meni pieleen...
}
        System.out.println("");
        System.out.println("Paina ENTER aloittaaksesi");
       String aloitus = input.nextLine();

        System.out.println("Peli alkaa!");





        while(true) {
        System.out.println("Olet metsässä näät edessäsi kiven ja puun?");
        System.out.println("");
        System.out.println("");
        String vastaus1 = input.nextLine();
        if (vastaus1.equals("ota kivi")) {
            break;
        }
        System.out.println("Vastaus ei kelpaa, Yritä uudelleen...");
        }
        System.out.println("");
        System.out.println("Otat kiven");




    }
}

Metabolix [11.12.2012 16:34:10]

#

Useita erilaisia tekstejä samalle toiminnolle saa näin:

if (vastaus1.equals("ota kivi") || vastaus1.equals("nosta kivi")) {
	break;
}

Javassa ei ole hyppykäskyjä, joten et voi jatkaa ohjelmaa mielivaltaisesta kohdasta. Yksi mahdollisuus monen vaihtoehdon toteuttamiseen on kuitenkin tällainen:

int tila = 1;
while (tila != 0) {
	String vastaus = null;
	switch (tila) {
		case 1:
			System.out.println("Olet metsässä. Mitä teet?");
			vastaus = input.nextLine();
			if (vastaus.equals("ota kivi")) {
				tila = 2;
				continue;
			}
			if (vastaus.equals("kaada puu")) {
				tila = 3;
				continue;
			}
			break;
		case 2:
			System.out.println("Nostit kiven. Entä seuraavaksi?");
			vastaus = input.nextLine();
			if (vastaus.equals("kaada puu")) {
				tila = 3;
				continue;
			}
			break;
		case 3:
			System.out.println("Kaadoit puun. Peli päättyi.");
			// Vastausta ei tarvita.
			break;
	}
	if (vastaus == null || vastaus.equals("lopeta peli")) {
		break;
	}
	System.out.println("Vastaus ei kelpaa! Yritä uudelleen.");
}

Jatkossa kannattaa muuttaa ohjelmaa niin, että et joudu kirjoittamaan suurta määrää vaihtoehtoja ja if-lauseita ohjelmaan. Alle sadalla koodirivillä voi tehdä tekstipelimoottorin, joka lukee tilanteet ja vaihtoehdot tekstitiedostosta.

Lisäys: Muokkasin koodia alla olevan kommentin johdosta.

jokunen1 [11.12.2012 17:00:22]

#

Juu, kiitos avustasi vastauskin tuli tosi nopeasti. Pitää kattoo tekstipelimoottorii. Sitten koodissasi vastaus jää loputtomaan silmukkaan vai onko se tarkoitus?

User137 [11.12.2012 21:01:34]

#

Omaa ajattelua kai oletettiin ;)

Pelisihän saa toimia miten vaan, yksi tapa on tämä:

case 2:
    System.out.println("Nostit kiven...");
    tila = 1;
    break;
case 3:
    System.out.println("Kaadoit puun...");
    tila = 1;
    break;

Silloin peli palaa takaisin tilaan 1, eli "Olet metsässä". Mutta voithan jatkaa ohjelmaa ja laittaa sen tekemään muuta. Esim jos kaadoit puun, ehkä siitä seuraa jotain.

Metabolix [11.12.2012 22:06:42]

#

Niin, koodini idea on, että laitat kohtiin 2 ja 3 samanlaisen koodin kuin kohdassa 1, jotta peli jatkuu järkevästi. Koko peli tulee siis tähän switch-rakenteen sisälle, jokaiseen caseen yksi mahdollinen pelitilanne.

Muokkasin vielä edellisen viestini koodia niin, että pelin lopetus ja ilmoitus virheellisestä valinnasta ovat yhteisiä kaikissa tilanteissa eikä vastauksen kysymiseen tarvita erillistä silmukkaa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta