source: 2014/koodauskerho/38/TuroR/Tekstiseikkailu/Tekstiseikkailu/MainWindow.xaml.cs @ 5839

Revision 5839, 5.1 KB checked in by sieerinn, 5 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Windows;
6using System.Windows.Controls;
7using System.Windows.Data;
8using System.Windows.Documents;
9using System.Windows.Input;
10using System.Windows.Media;
11using System.Windows.Media.Imaging;
12using System.Windows.Navigation;
13using System.Windows.Shapes;
14
15namespace Tekstiseikkailu
16{
17    /// <summary>
18    /// Interaction logic for MainWindow.xaml
19    /// </summary>
20    public partial class MainWindow : Window
21    {
22        private Huoneet huoneet;
23        private Huone valittuHuone;
24
25        public MainWindow()
26        {
27            InitializeComponent();
28            huoneet = new Huoneet();
29            Huone eteinen = this.huoneet.LisaaHuone("Eteinen", "Otat kengät pois jalasta ja astut peremmälle.");
30            Huone olohuone = this.huoneet.LisaaHuone("Olohuone", "Olohuoneessa on paljon sohvia. Istut yhdelle sohvalle.");
31            Huone makuuhuone = this.huoneet.LisaaHuone("Makuuhuone", "Ole varuillasi");
32            Huone Katolle = this.huoneet.LisaaHuone("Katto", "Katollan on kylmä ja olet vaarassa jäätyä");
33            Huone Hotelli = this.huoneet.LisaaHuone("hotelli", "voitit pelin ja pääsit pois talosta");
34            Huone keittiö = this.huoneet.LisaaHuone("Keittiö", "Hävisit pelin ja jouduit tiskaamaan");
35           
36            eteinen.LisaaOvi(olohuone, false);
37            olohuone.LisaaOvi(makuuhuone);
38            olohuone.LisaaOvi(keittiö, false);
39            makuuhuone.LisaaOvi(Katolle);
40            KirjoitaHuoneenTiedotRuudulle(eteinen);
41 
42            this.valittuHuone = eteinen;
43        }
44
45        public void KirjoitaTekstiRuudulle(string kirjoitettavaTeksti)
46        {
47            textBlockViestiIkkuna.Text += kirjoitettavaTeksti + "\n";
48            scrollViewer1.UpdateLayout();
49            scrollViewer1.ScrollToBottom();
50        }
51
52        public void KirjoitaOvilistaRuudulle(Huone huone)
53        {
54            KirjoitaTekstiRuudulle("Voit mennä seuraaviin paikkoihin:");
55            foreach (Ovi ovi in huone.Ovet)
56            {
57                KirjoitaTekstiRuudulle(" * " + ovi.Mihin.Nimi);
58            }
59        }
60
61        private void buttonToiminto_Click(object sender, RoutedEventArgs e)
62        {
63            // Poistetaan alusta ja lopusta turhat välilyönnit:
64            textBoxKomentorivi.Text = textBoxKomentorivi.Text.Trim();
65
66            // Katkaistaan komento alku- ja loppuosiin
67            // ensimmäisen välilyönnin kohdalta:
68            int katkaisukohta = textBoxKomentorivi.Text.IndexOf(' '); // etsitään ensimmäinen välilyönti
69            string alkuosa;
70            string loppuosa;
71            if (katkaisukohta > 0)
72            {
73                alkuosa = textBoxKomentorivi.Text.Substring(0, katkaisukohta);
74                loppuosa = textBoxKomentorivi.Text.Substring(katkaisukohta + 1);
75            }
76            else // jos katkaisukohtaa ei löydy, kyseessä oli vain yksittäinen sana
77            {
78                alkuosa = textBoxKomentorivi.Text;
79                loppuosa = "";
80            }
81
82            // Tulostetaan käyttäjän kirjoittama komentoteksti ruudulle
83            // aivan ensimmäisenä ennen seuraavaa tekstiä:
84            KirjoitaTekstiRuudulle("> " + textBoxKomentorivi.Text);
85            textBoxKomentorivi.Text = "";
86
87            // Tarkistetaan komento ja toimitaan sen mukaan:
88            if (alkuosa.Length == 0)
89            {
90                // jos komentoa ei ole syötetty, ei tehdä mitään,
91                // vaan kirjoitetaan esille huoneen kuvaus:
92                KirjoitaHuoneenTiedotRuudulle(this.valittuHuone);
93            }
94            else if (alkuosa == "mene") // jos 1. sana on mene...
95            {
96                if (loppuosa.Length == 0)
97                {
98                    KirjoitaTekstiRuudulle("Minne pitäisi mennä?");
99                    return;
100                }
101                // tarkistaa onko toisen sanan mukaista huonetta ja menee sinne, jos on:
102                foreach (Ovi ovi in valittuHuone.Ovet)
103                {
104                    if (ovi.Mihin.Nimi.ToLower().Equals(loppuosa.ToLower()))
105                    {
106                        this.valittuHuone = ovi.Mihin;
107
108                        // Tulostetaan uuden huoneen kuvausteksti ruudulle:
109                        KirjoitaHuoneenTiedotRuudulle(this.valittuHuone);
110                        return;
111                    }
112                }
113                KirjoitaTekstiRuudulle("Huoneen nimi ei ole kelvollinen.");
114            }
115            else
116            {
117                KirjoitaTekstiRuudulle("Komento \"" + textBoxKomentorivi.Text + "\" tuntematon.");
118                return; // Poistutaan aliohjelmasta, koska komento ei ollutkaan järkevä
119            }
120
121
122        }
123
124        public void KirjoitaHuoneenTiedotRuudulle(Huone huone)
125        {
126            KirjoitaTekstiRuudulle("Olet paikassa: " + huone.Nimi);
127            KirjoitaTekstiRuudulle(huone.Teksti);
128            KirjoitaOvilistaRuudulle(huone);
129        }
130    }
131}
Note: See TracBrowser for help on using the repository browser.