Psst. EU dotace 85 % pro OSVČ a firmy lze nyní čerpat i na e-learning. Více informací
Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij halloweenské akce 80% výuky zdarma!
Python týden

Lekce 5 - Bojovník do arény

V předešlém cvičení, Řešené úlohy k 4. lekci OOP v VB .NET, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

Již tedy víme, jak fungují reference a jak můžeme s objekty zacházet. Bude se nám to hodit dnes i příště. Tento a příští VB.NET tutoriál budou totiž věnovány dokončení naší arény. Hrací kostku již máme, ještě nám chybí další 2 objekty: bojovník a samotná aréna. Dnes se budeme věnovat bojovníkovi. Nejprve si popišme, co má bojovník umět, poté se pustíme do psaní kódu.

Atributy

Bojovník se bude nějak jmenovat a bude mít určitý počet hp (tedy života, např. 80hp). Budeme uchovávat jeho maximální život (bude se lišit u každé instance) a jeho současný život, tedy např. zraněný bojovník bude mít 40hp z 80ti. Bojovník má určitý útok a obranu, obojí vyjádřené opět v hp. Když bojovník útočí s útokem 20hp na druhého bojovníka s obranou 10hp, ubere mu 10hp života. Bojovník bude mít referenci na instanci objektu Kostka. Při útoku či obraně si vždy hodí kostkou a k útoku/obraně přičte padlé číslo. (Samozřejmě by mohl mít každý bojovník svou kostku, ale chtěl jsem se přiblížit stolní podobě hry a ukázat, jak OOP opravdu simuluje realitu. Bojovníci tedy budou sdílet jednu instanci kostky.) Kostkou dodáme hře prvek náhody, v realitě se jedná vlastně o štěstí, jak se útok nebo obrana vydaří. Konečně budeme chtít, aby bojovníci podávali zprávy o tom, co se děje, protože jinak by z toho uživatel nic neměl. Zpráva bude vypadat např. "Zalgoren útočí s úderem za 25hp.". Zprávami se zatím nebudeme zatěžovat a vrátíme se k nim až nakonec.

Již víme, co budeme dělat, pojďme na to! :) K projektu aréna si přidejme třídu Bojovnik a dodejme ji patřičné atributy. Všechny budou privátní:

Class Bojovnik
    ''' <summary>
    ''' Jméno bojovníka
    ''' </summary>
    Private jmeno As String
    ''' <summary>
    ''' Život v HP
    ''' </summary>
    Private zivot As Integer
    ''' <summary>
    ''' Maximální zdraví
    ''' </summary>
    Private maxZivot As Integer
    ''' <summary>
    ''' Útok v HP
    ''' </summary>
    Private utok As Integer
    ''' <summary>
    ''' Obrana v HP
    ''' </summary>
    Private obrana As Integer
    ''' <summary>
    ''' Instance hrací kostky
    ''' </summary>
    Private kostka As Kostka
End Class

Komentáře můžete sklapnout, aby nezabíraly zbytečné místo. Nicméně je velmi dobrý nápad je k atributům psát. Třída Kostka musí samozřejmě být v našem projektu.

Metody

Pojďme pro atributy vytvořit konstruktor, nebude to nic těžkého. Komentáře zde vynechám, vy si je dopište podobně, jako u atributů výše. Nebudu je psát ani u dalších metod, aby se tutoriál zbytečně neroztahoval a zůstal přehledný.

Public Sub New(jmeno As String, zivot As Integer, utok As Integer, obrana As Integer, kostka As Kostka)
    Me.jmeno = jmeno
    Me.zivot = zivot
    Me.maxZivot = zivot
    Me.utok = utok
    Me.obrana = obrana
    Me.kostka = kostka
End Sub

Všimněte si, že maximální zdraví si v konstruktoru odvodíme a nemáme na něj parametr v hlavičce metody. Předpokládáme, že bojovník je při vytvoření plně zdravý, stačí nám tedy znát pouze jeho život a maximální život bude stejný.

Přejděme k metodám, opět se nejprve zamysleme nad tím, co by měl bojovník umět. Začněme tím jednodušším, budeme chtít nějakou textovou reprezentaci, abychom mohli bojovníka vypsat. Překryjeme tedy metodu ToString(), která vrátí jméno bojovníka. Určitě se nám bude hodit metoda, vracející zda je bojovník naživu (tedy typu Boolean). Aby to bylo trochu zajímavější, budeme chtít kreslit život bojovníka do konzole, nebudeme tedy psát, kolik má života, ale "vykreslíme" ho takto:

[#########    ]

Výše uvedený život by odpovídal asi 70%. Dosud zmíněné metody nepotřebovaly žádné parametry. Samotný útok a obranu nechme na později a pojďme si implementovat ToString(), Nazivu() a GrafickyZivot(). Začněme s ToString(), tam není co vymýšlet:

Public Overrides Function ToString() As String
    Return jmeno;
End Function

Nyní implementujme metodu Nazivu(), opět to nebude nic těžkého. Stačí zkontrolovat, zda je život větší než 0 a podle toho se zachovat. Mohli bychom ji napsat třeba takto:

Public Function Nazivu() As Boolean
    If zivot > 0 Then
        Return True
    Else
        Return False
    End If
End Function

Jelikož i samotný výraz (zivot > 0) je vlastně logická hodnota, můžeme vrátit tu a kód se značně zjednodušší:

Public Function Nazivu() As Boolean
    Return (zivot > 0)
End Function

Grafický život

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Jak jsem se již zmínil, metoda GrafickyZivot() bude umožňovat vykreslit ukazatel života v grafické podobě. Již víme, že z hlediska objektového návrhu není vhodné, aby metoda objektu přímo vypisovala do konzole (pokud není k výpisu objekt určený), proto si znaky uložíme do řetězce a ten vrátíme pro pozdější vypsání. Ukážeme si kód metody a následně podrobně popíšeme:

Public Function GrafickyZivot() As String
    Dim s As String = "["
    Dim celkem As Integer = 20
    Dim pocet As Double = Math.Round((zivot / maxZivot) * celkem)
    If (pocet = 0) AndAlso (Nazivu()) Then
        pocet = 1
    End If
    For i As Integer = 0 To pocet - 1
        s += "#"
    Next
    s = s.PadRight(celkem + 1)
    s += "]"
    Return s
End Function

Připravíme si řetězec s a vložíme do něj úvodní znak "[". Určíme si celkovou délku ukazatele života do proměnné celkem (např. 20). Nyní v podstatě nepotřebujeme nic jiného, než trojčlenku. Pokud maxZivot odpovídá celkem dílků, zivot bude odpovídat pocet dílkům. pocet je proměnná s počtem dílků aktuálního zdraví.

Matematicky platí, že pocet = (zivot / maxZivot) * celkem;. My ještě doplníme zaokrouhlení na celé dílky.

Měli bychom ošetřit případ, kdy je život tak nízký, že nám vyjde na 0 dílků, ale bojovník je stále naživu. V tom případě vykreslíme 1 dílek, jinak by to vypadalo, že je již mrtvý.

Dále stačí jednoduše for cyklem připojit k řetězci s patřičný počet znaků a doplnit je mezerami do celkové délky. Doplnění provedeme pomocí PadRight() na délku celkem + 1, kde ten znak navíc je úvodní znak "[". Přidáme koncový znak a řetězec vrátíme.

Vše si vyzkoušíme, přejděme do Program.cs a vytvořme si bojovníka (a kostku, protože tu musíme konstruktoru bojovníka předat). Následně vypišme, zda je naživu a jeho život graficky:


Dim kostka As Kostka = New Kostka(10)
Dim bojovnik As Bojovnik = new Bojovnik("Zalgoren", 100, 20, 10, kostka)

Console.WriteLine("Bojovník: {0}", bojovnik) ' test ToString()
Console.WriteLine("Naživu: {0}", bojovnik.Nazivu()) ' test Nazivu()
Console.WriteLine("Život: {0}", bojovnik.GrafickyZivot()) ' test GrafickyZivot()
Class Bojovnik
    Private jmeno As String
    Private zivot As Integer
    Private maxZivot As Integer
    Private utok As Integer
    Private obrana As Integer
    Private kostka As Kostka

    Public Sub New(jmeno As String, zivot As Integer, utok As Integer, obrana As Integer, kostka As Kostka)
        Me.jmeno = jmeno
        Me.zivot = zivot
        Me.maxZivot = zivot
        Me.utok = utok
        Me.obrana = obrana
        Me.kostka = kostka
    End Sub

    Public Function Nazivu() As Boolean
        Return (zivot > 0)
    End Function

    Public Function GrafickyZivot() As String
        Dim s As String = "["
        Dim celkem As Integer = 20
        Dim pocet As Double = Math.Round((zivot / maxZivot) * celkem)
        If (pocet = 0) AndAlso (Nazivu()) Then
            pocet = 1
        End If
        For i As Integer = 0 To pocet - 1
            s += "#"
        Next
        s = s.PadRight(celkem + 1)
        s += "]"
        Return s
    End Function

    Public Overrides Function ToString() As String
        Return jmeno
    End Function

End Class

Konzolová aplikace
Bojovník: Zalgoren
Naživu: True
Život: [####################]

Boj

Dostáváme se k samotnému boji. Implementujeme metody pro útok a obranu.

Obrana

Začněme obranou. Metoda BranSe() bude umožňovat bránit se úderu, jehož síla bude předána metodě jako parametr. Metodu si opět ukážeme a poté popíšeme:

Public Sub BranSe(uder As Integer)
    Dim zraneni As Integer = uder - (obrana + kostka.hod())
    If zraneni > 0 Then
        zivot -= zraneni
        If zivot <= 0 Then
            zivot = 0
        End If
    End If
End Sub

Nejprve spočítáme skutečné zranění a to tak, že z útoku nepřítele odečteme naši obranu zvýšenou o číslo, které padlo na hrací kostce. Pokud jsme zranění celé neodrazili (zraneni > 0), budeme snižovat náš život. Tato podmínka je důležitá, kdybychom zranění odrazili a bylo např. -2, bez podmínky by se život zvýšil. Po snížení života zkontrolujeme, zda není v záporné hodnotě a případně ho dorovnáme na nulu.

Útok

Metoda Utoc() bude brát jako parametr instanci bojovníka, na kterého se útočí. To proto, abychom na něm mohli zavolat metodu BranSe(), která na náš útok zareaguje a zmenší protivníkův život. Zde vidíme výhody referencí ve Visual Basic .NET, můžeme si instance jednoduše předávat a volat na nich metody, aniž by došlo k jejich zkopírování. Jako první vypočteme úder, podobně jako při obraně, úder bude náš útok + hodnota z hrací kostky. Na soupeři následně zavoláme metodu BranSe() s hodnotou úderu:

Public Sub Utoc(souper As Bojovnik)
    Dim uder As Integer = utok + kostka.hod()
    souper.BranSe(uder)
End Sub

To bychom měli, pojďme si zkusit v našem ukázkovém programu zaútočit a poté znovu vykreslit život. Pro jednoduchost nemusíme zakládat dalšího bojovníka, ale můžeme zaútočit sami na sebe:


Dim kostka As Kostka = New Kostka(10)
Dim bojovnik As Bojovnik = New Bojovnik("Zalgoren", 100, 20, 10, kostka)

Console.WriteLine("Bojovník: {0}", bojovnik) ' test ToString()
Console.WriteLine("Naživu: {0}", bojovnik.nazivu())    ' test Nazivu()
Console.WriteLine("Život: {0}", bojovnik.GrafickyZivot()) ' test GrafickyZivot()

bojovnik.Utoc(bojovnik) ' test útoku
Console.WriteLine("Život po útoku: {0}", bojovnik.GrafickyZivot())

Console.ReadKey()
Class Bojovnik
    Private jmeno As String
    Private zivot As Integer
    Private maxZivot As Integer
    Private utok As Integer
    Private obrana As Integer
    Private kostka As Kostka

    Public Sub New(jmeno As String, zivot As Integer, utok As Integer, obrana As Integer, kostka As Kostka)
        Me.jmeno = jmeno
        Me.zivot = zivot
        Me.maxZivot = zivot
        Me.utok = utok
        Me.obrana = obrana
        Me.kostka = kostka
    End Sub

    Public Function Nazivu() As Boolean
        Return (zivot > 0)
    End Function

    Public Function GrafickyZivot() As String
        Dim s As String = "["
        Dim celkem As Integer = 20
        Dim pocet As Double = Math.Round((zivot / maxZivot) * celkem)
        If (pocet = 0) AndAlso (Nazivu()) Then
            pocet = 1
        End If
        For i As Integer = 0 To pocet - 1
            s += "#"
        Next
        s = s.PadRight(celkem + 1)
        s += "]"
        Return s
    End Function

    Public Sub BranSe(uder As Integer)
        Dim zraneni As Integer = uder - (obrana + kostka.hod())
        If zraneni > 0 Then
            zivot -= zraneni
            If zivot <= 0 Then
                zivot = 0
            End If
        End If
    End Sub

    Public Sub Utoc(souper As Bojovnik)
        Dim uder As Integer = utok + kostka.hod()
        souper.BranSe(uder)
    End Sub

    Public Overrides Function ToString() As String
        Return jmeno
    End Function

End Class

Konzolová aplikace
Bojovník: Zalgoren
Naživu: True
Život: [####################]
Život po útoku: [##################  ]

Zdá se, že vše funguje, jak má. Přejděme k poslednímu bodu dnešního tutoriálu a to ke zprávám.

Zprávy

Jak již bylo řečeno, o útocích a obraně budeme uživatele informovat výpisem na konzoli. Výpis nebude provádět samotná třída Bojovnik, ta bude jen vracet zprávy jako textové řetězce. Jedna možnost by byla nastavit návratový typ metod Utoc() a BranSe() na String a při jejich volání vrátit i zprávu. Problém by však nastal v případě, když bychom chtěli získat zprávu od metody, která již něco vrací. Metoda samozřejmě nemůže jednoduše vrátit 2 věci.

Pojďme na věc univerzálněji, zprávu budeme ukládat do privátní proměnné zprava a uděláme metody pro její uložení a navrácení. Samozřejmě bychom mohli udělat proměnnou veřejnou, ale není zde důvod, proč umožnit zvenčí zápis do zprávy a také by skládání složitější zprávy uvnitř třídy mohlo být někdy problematické.

K atributům třídy tedy přidáme:

Private zprava As String

Nyní si vytvoříme dvě metody. Privátní NastavZpravu(), která bere jako parametr text zprávy a slouží pro vnitřní účely třídy, kde nastaví zprávu do privátní proměnné:

Private Sub NastavZpravu(zprava As String)
    Me.zprava = zprava
End Sub

Nic složitého. Podobně jednoduchá bude veřejná metoda pro navrácení zprávy:

Public Function VratPosledniZpravu() As String
    Return Me.zprava
End Function

O práci se zprávami obohatíme naše metody Utoc() a BranSe(), nyní budou vypadat takto:

Public Sub Utoc(souper As Bojovnik)
    Dim uder As Integer = utok + kostka.hod()
    NastavZpravu(String.Format("{0} útočí s úderem za {1} hp", jmeno, uder))
    souper.BranSe(uder)
End Sub

Public Sub BranSe(uder As Integer)
    Dim zraneni As Integer = uder - (obrana + kostka.hod())
    If zraneni > 0 Then
        zivot -= zraneni
        Dim zprava = String.Format("{0} utrpěl poškození {1} hp", jmeno, zraneni)
        If zivot <= 0 Then
            zivot = 0
            zprava &= " a zemřel"
        Else
            zprava = String.Format("{0} odrazil útok", jmeno)
        End If
        NastavZpravu(zprava)
    End If
End Sub

Vše si opět vyzkoušíme, tentokrát již vytvoříme druhého bojovníka:

Dim kostka As New Kostka(10)
Dim bojovnik As New Bojovnik("Zalgoren", 100, 20, 10, kostka)

Console.WriteLine("Život: {0}", bojovnik.GrafickyZivot())
' test GrafickyZivot();
' útok na našeho bojovníka
Dim souper As New Bojovnik("Shadow", 60, 18, 15, kostka)
souper.Utoc(bojovnik)
Console.WriteLine(souper.VratPosledniZpravu())
Console.WriteLine(bojovnik.VratPosledniZpravu())

Console.WriteLine("Život: {0}", bojovnik.GrafickyZivot())

Console.ReadKey()
Class Bojovnik
    Private jmeno As String
    Private zivot As Integer
    Private maxZivot As Integer
    Private utok As Integer
    Private obrana As Integer
    Private kostka As Kostka
    Private zprava As String

    Public Sub New(jmeno As String, zivot As Integer, utok As Integer, obrana As Integer, kostka As Kostka)
        Me.jmeno = jmeno
        Me.zivot = zivot
        Me.maxZivot = zivot
        Me.utok = utok
        Me.obrana = obrana
        Me.kostka = kostka
    End Sub

    Public Function Nazivu() As Boolean
        Return (zivot > 0)
    End Function

    Public Function GrafickyZivot() As String
        Dim s As String = "["
        Dim celkem As Integer = 20
        Dim pocet As Double = Math.Round((zivot / maxZivot) * celkem)
        If (pocet = 0) AndAlso (Nazivu()) Then
            pocet = 1
        End If
        For i As Integer = 0 To pocet - 1
            s += "#"
        Next
        s = s.PadRight(celkem + 1)
        s += "]"
        Return s
    End Function

    Public Sub Utoc(souper As Bojovnik)
        Dim uder As Integer = utok + kostka.hod()
        NastavZpravu(String.Format("{0} útočí s úderem za {1} hp", jmeno, uder))
        souper.BranSe(uder)
    End Sub

    Public Sub BranSe(uder As Integer)
        Dim zraneni As Integer = uder - (obrana + kostka.hod())
        If zraneni > 0 Then
            zivot -= zraneni
            Dim zprava = String.Format("{0} utrpěl poškození {1} hp", jmeno, zraneni)
            If zivot <= 0 Then
                zivot = 0
                zprava &= " a zemřel"
            Else
                zprava = String.Format("{0} odrazil útok", jmeno)
            End If
            NastavZpravu(zprava)
        End If
    End Sub

    Private Sub NastavZpravu(zprava As String)
        Me.zprava = zprava
    End Sub

    Public Function VratPosledniZpravu() As String
        Return Me.zprava
    End Function

    Public Overrides Function ToString() As String
        Return jmeno
    End Function

End Class


Konzolová aplikace
Život: [####################]
Shadow útočí s úderem za 24 hp
Zalgoren utrpěl poškození 10 hp
Život: [##################  ]

Máme kostku i bojovníka, teď již chybí jen aréna.

Tu si vytvoříme hned v příští lekci, VB.NET - Aréna s bojovníky.


 

Stáhnout

Staženo 221x (63.7 kB)
Aplikace je včetně zdrojových kódů v jazyce VB

 

Předchozí článek
Řešené úlohy k 4. lekci OOP v VB .NET
Všechny články v sekci
Objektově orientované programování ve Visual Basic .NET
Článek pro vás napsal Michal Žůrek - misaz
Avatar
Jak se ti líbí článek?
2 hlasů
Autor se věnuje tvorbě aplikací pro počítače, mobilní telefony, mikroprocesory a tvorbě webových stránek a webových aplikací. Nejraději programuje ve Visual Basicu a TypeScript. Ovládá HTML, CSS, JavaScript, TypeScript, C# a Visual Basic.
Aktivity (11)

 

 

Komentáře

Avatar
lexbrychta
Člen
Avatar
lexbrychta:24.8.2015 12:17

Public Sub Utoc(souper As Bojovnik)
Dim uder As Integer = utok + kostka.hod()
NastavZpravu(Strin­g.Format("{0} útočí s úderem za {1} hp", jmeno, uder))
souper.BranSe(uder)
End Sub

Public Sub BranSe(uder As Integer)
Dim zraneni As Integer = uder - (obrana + kostka.hod())
If zraneni > 0 Then
zivot -= zraneni
Dim zprava = String.Format("{0} utrpěl poškození {1} hp", jmeno, zraneni)
If zivot <= 0 Then
zivot = 0
zprava &= " a zemřel"
Else
zprava = String.Format("{0} odrazil útok", jmeno)
End If
NastavZpravu(zpra­va)
End If
End Sub**Public Sub Utoc(souper As Bojovnik)
Dim uder As Integer = utok + kostka.hod()
NastavZpravu(Strin­g.Format("{0} útočí s úderem za {1} hp", jmeno, uder))
souper.BranSe(uder)
End Sub

Public Sub BranSe(uder As Integer)
Dim zraneni As Integer = uder - (obrana + kostka.hod())
If zraneni > 0 Then
zivot -= zraneni
Dim zprava = String.Format("{0} utrpěl poškození {1} hp", jmeno, zraneni)
If zivot <= 0 Then
zivot = 0
zprava &= " a zemřel"
Else
zprava = String.Format("{0} odrazil útok", jmeno)
End If
NastavZpravu(zpra­va)
End If
End Sub**Public Sub Utoc(souper As Bojovnik)
Dim uder As Integer = utok + kostka.hod()
NastavZpravu(Strin­g.Format("{0} útočí s úderem za {1} hp", jmeno, uder))
souper.BranSe(uder)
End Sub

Public Sub BranSe(uder As Integer)
Dim zraneni As Integer = uder - (obrana + kostka.hod())
If zraneni > 0 Then
zivot -= zraneni
Dim zprava = String.Format("{0} utrpěl poškození {1} hp", jmeno, zraneni)
If zivot <= 0 Then
zivot = 0
zprava &= " a zemřel"
Else
zprava = String.Format("{0} odrazil útok", jmeno)
End If
NastavZpravu(zpra­va)
End If
End Sub

 
Odpovědět
24.8.2015 12:17
Avatar
lexbrychta
Člen
Avatar
lexbrychta:24.8.2015 12:19

Nemá být předposlední zdrojový kód takto ? PS: omlouvám se za předešlý komentář, poprosím smazat.

Public Sub Utoc(souper As Bojovnik)
        Dim uder As Integer = utok + kostka.hod()
        NastavZpravu(String.Format("{0} útočí s úderem za {1} hp", jmeno, uder))
        souper.BranSe(uder)
End Sub

Public Sub BranSe(uder As Integer)
        Dim zraneni As Integer = uder - (obrana + kostka.hod())
        If zraneni > 0 Then
                zivot -= zraneni
                Dim zprava = String.Format("{0} utrpěl poškození {1} hp", jmeno, zraneni)
                Else
                        zprava = String.Format("{0} odrazil útok", jmeno)
                End If
                If zivot <= 0 Then
                        zivot = 0
                        zprava &= " a zemřel"
                End If
                NastavZpravu(zprava)
End Sub
 
Odpovědět
24.8.2015 12:19
Avatar
Jaroslav Trojan
Redaktor
Avatar
Odpovídá na lexbrychta
Jaroslav Trojan:26.6.2016 15:02

Tak,jak to máš, to bude programově správně. Chyběla tam verse, když je život <0.

Odpovědět
26.6.2016 15:02
statik
Avatar
Miroslav Němeček:15.2.2017 20:11

V modulu1 mi po napsání tříd vyskočila chyba, příkaz Console.writeline() bralo jako hodnotu třídu a ne jako příkaz aby něco ukázal na obrazovce. Neví někdo co s tím?

 
Odpovědět
15.2.2017 20:11
Avatar
Tomáš Slanina:24.7.2017 12:11

Chci tě jen upozornit že ve funkci
Public Overrides Function ToString() As String
Return jmeno;
End Function

Je nepoužitelný znak ; poprosím o opravení :)

 
Odpovědět
24.7.2017 12:11
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Tomáš Slanina:24.7.2017 12:24

Když jsem otestoval poslední kód tak mi to napsalo že se zalgoren ubránil ale ubralo mu to jeden znak.. tak jsem to pustil znovu a měl ubrané 2 znaky co to je?

 
Odpovědět
24.7.2017 12:24
Avatar
Odpovídá na Tomáš Slanina
Michal Žůrek - misaz:24.7.2017 12:26

a četl jsi ten článek? Četl jsi všechny ve který se tvoří toto demo. Vstupuje tma do hry objekt kostka, který generuje náhodné číslo.

 
Odpovědět
24.7.2017 12:26
Avatar
Tomáš Slanina:24.7.2017 15:06

Jo četl proč?

 
Odpovědět
24.7.2017 15:06
Avatar
Odpovídá na Michal Žůrek - misaz
Ondrej Zadrapa:5. května 17:53

Po nespoctu kontrol porad muj bojovnik odrazi utok. A není to jen u me, i tady na strankach porad odrazi utok. Je to prvek nahody, nebo to tak ma proste byt, nebo je nekde chyba, poradíš mi prosim Te?

 
Odpovědět
5. května 17:53
Avatar
Alesh
Překladatel
Avatar
Odpovídá na Ondrej Zadrapa
Alesh:19. května 19:56

Tak jsi to kontroloval špatně, resp. nepřipouštíš variantu, že to má autor špatně! :-)
Správně to má být takto:

Public Sub BranSe(uder As Integer)
        Dim zraneni As Integer = uder - (obrana + kostka.hod())
        Dim zprava As String
        If zraneni > 0 Then
                zivot -= zraneni
                zprava = String.Format("{0} utrpěl poškození {1} hp", jmeno, zraneni)
                If zivot <= 0 Then
                        zivot = 0
                        zprava &= " a zemřel"
                End If
        Else
                zprava = String.Format("{0} odrazil útok", jmeno)
        End If
        NastavZpravu(zprava)
End Sub
 
Odpovědět
19. května 19:56
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 10 zpráv z 10.