Stránka 1 z 1

Moje hra - přičítání život - chyba  Vyřešeno

Napsal: 27 zář 2014 20:18
od Skelller
Ahoj.. Zrovna dělám konzolovou hru.. neumím najít chybu.. Když dám všechny body do obrany nepřítele to léči.. nevíte proč?

Kód: Vybrat vše

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

namespace Bojovka
{
    class postava
    {
        public string jmeno;
        public int utok = 0;
        public int obrana = 0;
        public int zivoty;
        public int bodyrozdeleni = 35;

        public void VyberAtributy()
        {
            Console.WriteLine("----------------");
            Console.WriteLine(jmeno);
            Console.WriteLine("Útok: " + utok);
            Console.WriteLine("Obrana: " + obrana);
            Console.WriteLine("Životy " + zivoty);
            Console.WriteLine("----------------");
        }
        public void RozdeleniAtributu()
        {
            Console.WriteLine("Zbývá rozdělit " + bodyrozdeleni + " bodů");
            Console.WriteLine("Které dovednosti chcete zlepšit?");
            Console.WriteLine("U pro útok");
            Console.WriteLine("O pro obranu");
        }
        public int VyhodnoceniObrany()
        {
            int konecnyutok = utok - obrana;
            return konecnyutok;
        }

        public void DalsiNepratele(string Jmeno, int Utok, int Obrana, int Zivoty)
        {
            jmeno = Jmeno;
            utok = Utok;
            obrana = Obrana;
            zivoty = Zivoty;
        }
    }
    class Program
    {

        static void Main(string[] args)
        {
           
            //Vytvoření všeho a rozdělení atributů
            postava postavahrace = new postava();
            postava nepritel1 = new postava();
           
            Console.WriteLine("Zadejte prosím svoji přezdívku: ");
            postavahrace.zivoty = 100;
            postavahrace.jmeno = Console.ReadLine();
            Console.WriteLine("Vytvořte postavu rozdělením bodů mezi jednotlivé atributy");
            while (postavahrace.bodyrozdeleni > 0)
            {
                postavahrace.VyberAtributy();
                postavahrace.RozdeleniAtributu();

                    switch (Console.ReadLine())
                    {
                        case "U":
                            postavahrace.bodyrozdeleni -= 5;
                            postavahrace.utok += 5;
                            postavahrace.VyberAtributy();
                            postavahrace.RozdeleniAtributu();
                            break;

                        case "O":
                            postavahrace.bodyrozdeleni -= 5;
                            postavahrace.obrana += 5;
                            postavahrace.VyberAtributy();
                            postavahrace.RozdeleniAtributu();
                            break;

                        default:
                            Console.WriteLine("Neplatný vstup!");
                            break;
                    }
                    if (postavahrace.bodyrozdeleni == 0)
                    {
                        Console.WriteLine();
                    }
                }

                //Bojování proti nepřátelům
                Random nahodnacisla = new Random();
                nepritel1.DalsiNepratele("Kostlivec", 20, 10, 80);
                Console.WriteLine("Potkal jsi kostlivce, který má tyto atributy");
                nepritel1.VyberAtributy();
                Console.WriteLine("Chceš na něho zaútočit? [A/N]");
                if (Console.ReadLine() == "A")
                {
                    Console.WriteLine();
                    Console.WriteLine("Souboj začíná!");
                    Console.WriteLine("----------------");

                    while (postavahrace.zivoty > 0 && nepritel1.zivoty > 0)
                    {
                        int konecnyutokhrace = postavahrace.utok - nepritel1.obrana;
                        int konecnyutoknepritele = nepritel1.utok - postavahrace.obrana;
                        if (postavahrace.obrana > konecnyutoknepritele)
                        {
                            konecnyutoknepritele = 0;
                        }
                        else if (nepritel1.obrana > konecnyutokhrace)
                        {
                            konecnyutokhrace = 0;
                        }
                        Console.WriteLine("Útok začíná");
                        while (true)
                        {
                            if (postavahrace.zivoty <= 0 || nepritel1.zivoty <= 0)
                            {
                                break;
                            }
                            nepritel1.zivoty -= konecnyutokhrace;
                            postavahrace.zivoty -= konecnyutoknepritele;
                            Console.WriteLine("Po útoku máš " + postavahrace.zivoty + " životů");
                            Console.WriteLine("Kostlivec má " + nepritel1.zivoty + " životů");
                            Console.WriteLine("Pro další útok stiskni libovolnou klávesu");
                            Console.ReadKey();

                        }
   
                    }
                }
               
           


            Console.ReadKey();
        }
    }
}

Re: Moje hra - přičítání život - chyba

Napsal: 28 zář 2014 13:06
od Skelller
Fakt nikdo neví? Můžu nějak pomoct v orientaci kodu?

Re: Moje hra - přičítání život - chyba

Napsal: 28 zář 2014 21:48
od CZechBoY
Nechce se mi to číst jak je to dlouhý :D
Se koukni kolik odebíráš a jak se k tý hodnotě přistupuje...

Re: Moje hra - přičítání život - chyba

Napsal: 01 říj 2014 20:17
od omilis
Nevím jestli si už na to přišel, ale problém bude nejspíše v této podmínce

Kód: Vybrat vše

                   
if (postavahrace.obrana > konecnyutoknepritele)
{
     konecnyutoknepritele = 0;
}
else if (nepritel1.obrana > konecnyutokhrace)
{
     konecnyutokhrace = 0;
}

Problém je, že ta druhá podmínka se vůbec nevyhodnocuje, pokud platí ta první. Nemělo by tam být to else.

Re: Moje hra - přičítání život - chyba

Napsal: 02 říj 2014 11:23
od Skelller
Díky omilis.. Vyřešil jsem to tak, že tu podmínku else if jsem hodil jako vnořenou do té první ;)

Re: Moje hra - přičítání život - chyba

Napsal: 02 říj 2014 18:28
od omilis
Když to dáš jako vnořenou, tak to taky nebude správně. Udělej to jako dvě nezávislé podmínky.

Kód: Vybrat vše

                 
if (postavahrace.obrana > konecnyutoknepritele)
{
     konecnyutoknepritele = 0;
}


if (nepritel1.obrana > konecnyutokhrace)
{
     konecnyutokhrace = 0;
}

Re: Moje hra - přičítání život - chyba

Napsal: 02 říj 2014 22:00
od kulisak6
nic vice nez souhlasit

Re: Moje hra - přičítání život - chyba

Napsal: 04 říj 2014 16:38
od Skelller
A co by se mohlo stát kdyby to bylo v té vnořené?

Re: Moje hra - přičítání život - chyba

Napsal: 04 říj 2014 21:39
od faraon
Co by se mohlo stát? Třeba to že se ta druhá podmínka nikdy neprovede ;-)