IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Karel Ohář
Člen
Avatar
Karel Ohář:5.1.2017 18:51

Zdravím, mám třídu Postava.cs a od ní mám třídy co dědí: Lukostrelec.cs, Bojovnik.cs a Kouztelnik.cs.
dělám v konzoli a chci udělat že si hráč vybere jakou chce třídu, ale nevím jak udělat jeden objekt který by mi dokázal vytvořit jakoukoli třídu si vyberu, jde to nějak ? předem děkuji.

 
Odpovědět
5.1.2017 18:51
Avatar
Odpovídá na Karel Ohář
Luboš Běhounek Satik:5.1.2017 19:35

Nejjednodušší postup je třeba něco takového:

Postava VytvorPostavu(string typPostavy, string jmeno)
{
  if (typPostavy=="lukostrelec")
    return new Lukostrelec(jmeno);
  else
    if (typPostavy=="bojovnik")
      return new Bojovnik(jmeno);
}
Nahoru Odpovědět
5.1.2017 19:35
https://www.facebook.com/peasantsandcastles/
Avatar
Karel Ohář
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
Karel Ohář:5.1.2017 20:03

Děkuji, ale vůbec nevím jak váš kód přidat do toho svého, asi bych to měl přidat jako metodu ale nevím do které třídy. ať se snažím jak chci, program mi to nechce vzít.

Editováno 5.1.2017 20:03
 
Nahoru Odpovědět
5.1.2017 20:03
Avatar
HONZ4
Člen
Avatar
Odpovídá na Karel Ohář
HONZ4:5.1.2017 20:57

ukaž co jak to děláš, když ti to nejde

 
Nahoru Odpovědět
5.1.2017 20:57
Avatar
Karel Ohář
Člen
Avatar
Odpovídá na HONZ4
Karel Ohář:5.1.2017 21:04

Potřebuji aby hráč mohl přijmout třídu Ninja, Nabusenec a Valecnik, momentálně to mám že je to vždy válečník, jen se k tomu vypíše co to doopravdy mělo být.

 
Nahoru Odpovědět
5.1.2017 21:04
Avatar
HONZ4
Člen
Avatar
Odpovídá na Karel Ohář
HONZ4:5.1.2017 21:13

pro vkládání kódu slouží tlačítko </>
a dej sem celý obsah toho souboru, ať je vidět i to podstatné!

 
Nahoru Odpovědět
5.1.2017 21:13
Avatar
Karel Ohář
Člen
Avatar
Odpovídá na HONZ4
Karel Ohář:5.1.2017 21:14
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Mortal_Kombat
{
    class Prostredi
    {
        private Postava postava;
        public Valecnik hrac = new Valecnik("AA",1,1,1,"Kokot");

        public void gene()
        {
            int volba = 0,dzivoty= 0,dhbitost=0,dutok=0;
            string jmeno="";
            string jmenoTridy="";
            Random random = new Random();

            Console.WriteLine("Vítej ve hře Mortal Kombat\nZvol si nějaké husté jméno:");
            jmeno = Console.ReadLine();
            Console.WriteLine("Vyber si postavu\n1. Nabusenec (Tezkopadna, ale silna hora masa)\n2. Ninja (Neni moc silny, ale je velice hbity)\n3. Valecnik (Neni moc hbity ani moc silny, ale ma hafo zivotu)\n");
            volba = Console.Read();
            switch(volba)
            {
                case 1:
                    jmenoTridy = "Nabušenec";
                    dutok = random.Next(0, 21) + 150;
                    dzivoty = random.Next(0, 101) + 900;
                    dhbitost = random.Next(0, 11);
                    break;
                case 2:
                    jmenoTridy = "Ninja";
                    dutok = random.Next(0, 21) + 80;
                    dzivoty = random.Next(0, 101) + 800;
                    dhbitost = random.Next(0, 6) + 50;
                    break;
                case 3:
                    jmenoTridy = "Válečník";
                    dutok = random.Next(0, 21) + 90;
                    dzivoty = random.Next(0, 101) + 1200;
                    dhbitost = random.Next(0, 11) + 20;
                    break;
                /*default:
                    Console.Clear();
                    gene();
                    break;*/
            }
            hrac = new Valecnik(jmeno, dzivoty, dutok, dhbitost, jmenoTridy);
        }
        public void Hra()
        {
            gene();
            hrac.VypisPostavu();
            Console.ReadKey();
        }
    }
}
 
Nahoru Odpovědět
5.1.2017 21:14
Avatar
HONZ4
Člen
Avatar
HONZ4:5.1.2017 21:24

Zase ten random.. škoda mluvit.

Vypadá to, že budeš muset ukázat i (alespoň) konstruktor Valecnik (špatně vytváříš postavu)

Editováno 5.1.2017 21:27
 
Nahoru Odpovědět
5.1.2017 21:24
Avatar
Karel Ohář
Člen
Avatar
Odpovídá na HONZ4
Karel Ohář:5.1.2017 21:30

Tady to máš, mohl by jsi mi prosím trochu popsat jak bych měl postavu vytvářet správně ?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Mortal_Kombat
{
    class Valecnik : Postava
    {
        string jmenoTridy;
        public Valecnik(string _jmeno, int _zivoty, int _utok, int _hbitost, string jmenoTridy) :
            base(_jmeno, _zivoty, _utok, _hbitost) {
            this.jmenoTridy = jmenoTridy;
        }
        public void VypisPostavu()
        {
            Console.WriteLine("¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤");
            Console.WriteLine("Jméno: {0}", jmeno);
            Console.WriteLine("Třída: {0}", jmenoTridy);
            Console.WriteLine("Životy: {0}",zivoty);
            Console.WriteLine("Útok: {0}", utok);
            Console.WriteLine("Hbitosty: {0}", hbitost);
            Console.WriteLine("¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤");
        }
    }
}
Editováno 5.1.2017 21:30
 
Nahoru Odpovědět
5.1.2017 21:30
Avatar
HONZ4
Člen
Avatar
Odpovídá na Karel Ohář
HONZ4:5.1.2017 21:44

toto máš ok, takže ještě postavu

 
Nahoru Odpovědět
5.1.2017 21:44
Avatar
Karel Ohář
Člen
Avatar
Odpovídá na HONZ4
Karel Ohář:5.1.2017 21:51
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Mortal_Kombat
{
    class Postava
    {
        protected string jmeno;
        protected int zivoty;
        protected int utok;
        protected int hbitost;

        public Postava(string _jmeno, int _zivoty, int _utok, int _hbitost)
        {
            this.jmeno = _jmeno;
            this.zivoty = _zivoty;
            this.utok = _utok;
            this.hbitost = _hbitost;
        }


        public bool jenazivu()
        {
            return (zivoty > 0);
        }

    }

}
 
Nahoru Odpovědět
5.1.2017 21:51
Avatar
HONZ4
Člen
Avatar
Odpovídá na Karel Ohář
HONZ4:5.1.2017 21:57

teď jsem si všiml chyby.

tu volbu kdybys ji chtěl mít int, tak bys tu hodnotu musel parsovat

 
Nahoru Odpovědět
5.1.2017 21:57
Avatar
Karel Ohář
Člen
Avatar
Odpovídá na HONZ4
Karel Ohář:5.1.2017 22:02

Dobře, děkuji a jak tam mám někam zakomponovat tento kód ?

Postava VytvorPostavu(string typPostavy, string jmeno)
{
  if (typPostavy=="lukostrelec")
    return new Lukostrelec(jmeno);
  else
    if (typPostavy=="bojovnik")
      return new Bojovnik(jmeno);
}
 
Nahoru Odpovědět
5.1.2017 22:02
Avatar
HONZ4
Člen
Avatar
Odpovídá na Karel Ohář
HONZ4:5.1.2017 22:13

nevím jaké mezi těmi třídami budeš mít vztahy, ale něco jako:

string volba = "";
int dzivoty = 0, dhbitost = 0, dutok = 0;
string jmeno = "";
string jmenoTridy = "";

Console.WriteLine("Vítej ve hře Mortal Kombat\nZvol si nějaké husté jméno:");
jmeno = Console.ReadLine();
Console.WriteLine("Vyber si postavu\n1. Nabusenec (Tezkopadna, ale silna hora masa)\n2. Ninja (Neni moc silny, ale je velice hbity)\n3. Valecnik (Neni moc hbity ani moc silny, ale ma hafo zivotu)\n");
volba = Console.ReadLine();
switch (volba)
{
    case "1":
        jmenoTridy = "Nabušenec";
        dutok = random.Next(0, 21) + 150;
        dzivoty = random.Next(0, 101) + 900;
        dhbitost = random.Next(0, 11);
        postava = new Nabusenec(jmeno, dzivoty, dutok, dhbitost, jmenoTridy);
        break;
    case "2":
        jmenoTridy = "Ninja";
        dutok = random.Next(0, 21) + 80;
        dzivoty = random.Next(0, 101) + 800;
        dhbitost = random.Next(0, 6) + 50;
        postava = new Ninja(jmeno, dzivoty, dutok, dhbitost, jmenoTridy);
        break;
    case "3":
        jmenoTridy = "Válečník";
        dutok = random.Next(0, 21) + 90;
        dzivoty = random.Next(0, 101) + 1200;
        dhbitost = random.Next(0, 11) + 20;
        postava = new Valecnik(jmeno, dzivoty, dutok, dhbitost, jmenoTridy);
        break;
}

ta to budeš možná provádět až v dalším kroku. Ale to je jedno princip bude podobný.

Editováno 5.1.2017 22:15
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
5.1.2017 22:13
Avatar
Karel Ohář
Člen
Avatar
Odpovídá na HONZ4
Karel Ohář:5.1.2017 22:29

Moc ti děkuji, už to funguje :-)

 
Nahoru Odpovědět
5.1.2017 22:29
Avatar
HONZ4
Člen
Avatar
Odpovídá na Karel Ohář
HONZ4:5.1.2017 23:03

není zač.
Na závěr přidávám odkaz pro vysvětlení použití metody Console.Read()

 
Nahoru Odpovědět
5.1.2017 23:03
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Karel Ohář
vajkuba1234:5.1.2017 23:21

Co se tyce tvorby postavy, tak bych pouzil vzor Factory (doctes se o nem v navrhovych vzorech dale v tutorialech). To bys mel nejjednodussi asi. Zvolis si co chces za postavu pres parametr treba a v nastavis si hodnoty jednotlivych postav a to ti vrati vytvoreny objekt. Mel bys to pak i hezky rozdelene...

Nahoru Odpovědět
5.1.2017 23:21
No hope, no future, JUST WAR!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.