Új hozzászólás Aktív témák

  • trisztan94

    őstag

    Sziasztok!

    Egy programozástechnikai kérdésem lenne:

    Windows Phone 8-ra fejlesztek egy angol nyelvoktató alkalmazást. Két részre van osztva:

    1. rész: írás és hallás alapján történő tanulás
    2. rész: mondatok összeillesztése

    A két rész szorosan kapcsolódik egymáshoz.

    Az első rész működése:
    Kirak a képernyőre két egyező mondatot egymás alá a program. Az egyik magyarul, a másik angolul. Felolvassa a magyart, vár 2mp-et majd felolvassa az angolt. Ezek után még ezt 4x megcsinálja, csak más mondatokkal.
    Ez a része megvan.

    A második rész működése:
    Az első részben megjelenített mondatokat kell újra összerakni. Kiírja a magyar mondatot, ennek az angol megfelelőjét kell összerakni 12 szóból, helyes sorrendben. Na most itt az az egyik fő dolog, hogy a 12 szóból 12-x random szó, az x pedig a mondatba való szavak nyilván (hogy ki lehessen rakni a mondatot).

    Na most ezt én próbáltam objektumorientáltan megoldani, úgyis rég dolgoztam már úgy, nem árt egy kis gyakorlás, meg hát sokkal szebb is úgy az egész.

    Osztályok, felépítésük, egymáshoz való kapcsolatuk:

    Először felsorolom az osztályokat:
    ElsoResz
    Mondat
    Szo
    HasznalhatoMondatok
    Extraszavak
    MasodikResz

    Az ElsoResz.cs-ben van az első rész logikája, tehát a random mondat kiválasztása a lehetséges mondatokból, annak a kiírása. Jelenleg egy sima void metódus tölti fel a mondatokat explicit módon, így:

    private List<Mondat> Mondatok = new List<Mondat>();
    private int idSzamlalo = 0;
    private void mondatFeltoltes()
    {
    Mondat mondat = new Mondat(idSzamlalo, "Szeretem a fagyit.", "I like ice cream");
    Mondatok.Add(mondat);

    idSzamlalo++;
    mondat = new Mondat(idSzamlalo, "Ő hol van?", "Where is she?");
    Mondatok.Add(mondat);

    idSzamlalo++;
    mondat = new Mondat(idSzamlalo, "Annak tizennégy éves", "Ann is fourteen");
    Mondatok.Add(mondat);
    }

    Mondat.cs-ben van a mondatok felépítése, az így néz ki:

    public class Mondat
    {
    public int ID;
    public string magyar; //magyar mondat
    public string angol; //angol mondat
    public string[] angolSzavak; //mondat szavai (angol)
    public string[] magyarSzavak; //mondat szavai (magyar, de most ez lényegtelen)

    public Mondat(int ID, string magyar, string angol)
    {
    this.ID = ID;
    this.magyar = magyar;
    this.angol = angol;
    }

    public void setAngolSzavak (string[] angolSzavak)
    {
    this.angolSzavak = angolSzavak;
    }

    public string[] getAngolSzavak()
    {
    return angolSzavak;
    }

    public void setMagyarSzavak(string[] magyarSzavak)
    {
    this.magyarSzavak = magyarSzavak;
    }

    public string[] getMagyarSzavak()
    {
    return magyarSzavak;
    }
    }

    Amikor végigmentek a mondatok, akkor átlépünk a 2. részre. Oda úgy lépünk, hogy a kiírt mondatokat berakom egy statikus osztályba, a HasznalhatoMondatok.cs-be, ami így néz ki:

    public static class HasznalhatoMondatok
    {
    public static List<Mondat> Mondatok = new List<Mondat>();

    public static void setMondatok(List<Mondat> _Mondatok)
    {
    Mondatok = _Mondatok;
    }

    public static List<Mondat> getMondatok()
    {
    return Mondatok;
    }
    }

    Így rakom bele az ElsoResz.cs-ből navigálás előtt:

    HasznalhatoMondatok.setMondatok(Mondatok);

    Tehát beraktuk a mondatokat a HasznalhatoMondatok osztályba, átlépünk a 2. részre. A MasodikResz.cs-ben ez történik:

    partial class MasodikResz : PhoneApplicationPage
    {
    private List<Mondat> mondatok = new List<Mondat>();
    private int szavakSzama = 12;

    //constructor
    public MasodikResz()
    {
    mondatok = HasznalhatoMondatok.getMondatok();
    foreach(var item in mondatok)
    {
    string[] mondatSzavai = item.angol.Split(' ');

    }

    InitializeComponent();
    }
    }

    Tehát letároljuk egy osztályon belüli listában a felhasznált mondatokat, majd utána .Split-eljük a mondatot, így szavak lesznek belőlük, amit majd a Mondat osztály angolSzavak mezőjébe rakunk majd be.

    Ezeken kívül van még a Szo osztály, ami működésileg hasonló a Mondat osztályhoz:

    class Szo
    {
    public string szo;
    public bool isInMondat;

    public Szo(string szo, bool isInMondat)
    {
    this.szo = szo;
    this.isInMondat = isInMondat;
    }
    }

    És van még az ExtraSzavak osztály, ami szintén adatbázisból fog majd jönni, de most még explicit van feltöltve, de az is nagyon hasonló lesz a HasznalhatoMondatok osztályhoz, tehát statikus:

    public static class ExtraSzavak
    {
    public static List<Szo> Szavak = new List<Szo>();

    public ExtraSzavak()
    {
    szavakFeltoltese();
    }

    private void szavakFeltoltese()
    {
    Szo szo = new Szo("Banana", false);
    Szavak.Add(szo);
    szo = new Szo("House", false);
    Szavak.Add(szo);
    szo = new Szo("Dog", false);
    Szavak.Add(szo);
    szo = new Szo("Cat", false);
    Szavak.Add(szo);
    szo = new Szo("Apple", false);
    Szavak.Add(szo);
    szo = new Szo("Orange", false);
    Szavak.Add(szo);
    szo = new Szo("Pear", false);
    Szavak.Add(szo);
    szo = new Szo("Grape", false);
    Szavak.Add(szo);
    szo = new Szo("Boat", false);
    Szavak.Add(szo);
    szo = new Szo("Car", false);
    Szavak.Add(szo);

    }

    public static void setSzavak(List<Szo> _Szavak)
    {
    // TODO: Complete member initialization
    Szavak = _Szavak;
    }

    public static List<Szo> getSzavak()
    {
    return Szavak;
    }

    (ez még nem komplett, vágom, hogy miket nem lehet statikus osztályba rakni, most fogom átírni)

    Tehát az lenne a kérdésem, hogy nem bonyolítom-e túl, esetleg nem vétek-e egy hihetetlenül triviális hibát? A gondolatmenete jó a felépítésnek? Ti mit csinálnátok másképpen?

    Előre is köszönök szépen minden segítséget és bocsánat a hosszúra sikeredett hsz.-ért :R

Új hozzászólás Aktív témák