IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 8. diel - Aréna s mágom (dedičnosť a polymorfizmus)

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:5.7.2016 9:11

Mám vlastní kód na Arenu s Mágem a funguje, jen nemohu přijít na to, proč mi to nepíše :
" utrpěl poškození ...hp ". Tu metodu BranSe() mi to vynechává ,asi,....nevím.

Public Class Bojovnik
Protected jmeno As String
Protected zivot As Integer
Protected maxZivot As Integer
Protected utok As Integer
Protected obrana As Integer
'instance kostky
Protected kostka As Kostka
Public zprava As String
Protected mana As Integer
Protected maxMana As Integer
Protected magickyUtok As Integer

'pro atributy vytvořme konstruktor-instance bojovníka
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 Overrides Function ToString() As String
Return jmeno
End Function
Public Function Nazivu() As Boolean
Return (zivot > 0)
End Function
' Public Sub BranSe1(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 Sub
Protected Function GrafUkazatel(ak­tualni As Integer, maximalni As Integer) As String
Dim s As String = "["
Dim celkem As Integer = 20
Dim pocet As Double = Math.Round 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 Function GrafZivot() As String
Dim s As String = "["
Dim celkem As Integer = 20
Dim pocet As Double = Math.Round 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

Protected Sub NastavZpravu(zprava As String)
Me.zprava = zprava
End Sub
Public Function VratPosledniZ­pravu() As String
Return Me.zprava
End Function

Public Overridable 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())
' Console.Write­Line("úder:" & uder & "")
' Console.Write­Line("zranění:" & zraneni & "")
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"
End If
Else
zprava = [String].Format("{0} odrazil útok", jmeno)
NastavZpravu(zpra­va)
End If
End Sub
End Class

Module Module1
Sub Main()
' Dim kostka As Kostka = New Kostka()
' Console.Write­Line(kostka.Vrat­PocetSten())
' Console.ReadKey()
' Dim kostka As Kostka = New Kostka(14)
' Console.Write­Line(kostka.Vrat­PocetSten())
' Console.ReadKey()
' Dim krychle As Kostka = New Kostka()
' Dim ctrnactisten As Kostka = New Kostka(14)
' Console.Write­Line(krychle.Vrat­PocetSten())
' Console.Write­Line(ctrnactis­ten.VratPocet­Sten())
' Console.ReadKey()

'budeme kostkami v cyklu házet
Dim krychle As Kostka = New Kostka()
Dim ctrnactisten As Kostka = New Kostka(14)
'hod krychlí
Console.Write­Line("Kostka s {0} stěnami", krychle.VratPo­cetSten)
For i = 0 To 9
Console.Write(krychle­.hod() & " ")
Next
Console.WriteLine() : Console.WriteLine()
'hod 14ti stěnem
Console.Write­Line("Kostka s {0} stěnami", ctrnactisten.Vrat­PocetSten)
For i = 0 To 9
Console.Write(ctrnac­tisten.hod() & " ")
Next

Console.ReadKey()
' Dim krychle As Kostka = New Kostka(6)
Dim souper As Bojovnik = New Bojovnik("Boran", 50, 10, 10, krychle)
Dim bojovnik As Bojovnik = New Bojovnik("Zagoran", 100, 50, 10, krychle)
Console.Write­Line("Bojovník:{0}", bojovnik) 'test ToString...jmeno
Console.Write­Line("Naživu:{0}", bojovnik.Nazivu()) 'test Nazivu
Console.Write­Line("Život:{0}", bojovnik.Graf­Zivot()) 'test života
bojovnik.Utoc(bo­jovnik) 'test útoku
Console.Write­Line("život po útoku:{0}", bojovnik.Graf­Zivot())
souper.Utoc(bo­jovnik)
Console.Write­Line("život:{0}", souper.GrafZivot())
Console.Write­Line(souper.Vrat­PosledniZpravu())
Console.Write­Line(bojovnik­.VratPosledniZ­pravu())
Console.Write­Line("život Zagorana po útoku:{0}", bojovnik.Graf­Zivot())
Console.Write­Line("Bojovnik: {0}", souper)
bojovnik.Utoc(sou­per)
Console.Write­Line("život Borana po útoku:{0}", souper.GrafZivot())
Console.Write­Line("Konec prvního zápasu Zagoran-Boran")

Console.ReadKey()

'vytvoření objektů
Console.Write­Line("následu­je zápas Zagoran-Mág Gandalf")
Dim zagoran As New Bojovnik("Zagoran", 100, 25, 10, krychle)
Dim gandalf As New Mag("Gandalf", 50, 15, 12, krychle, 30, 45)
Dim arena As New Arena(zagoran, gandalf, krychle)

'zápas
arena.Zapas()
Console.ReadKey()
End Sub
End Module

Imports System.Threading
Public Class Arena
Public bojovnik1 As Bojovnik
Public bojovnik2 As Bojovnik
Public kostka As Kostka
Public Sub New(bojovnik1 As Bojovnik, bojovnik2 As Bojovnik, kostka As Kostka)
Me.bojovnik1 = bojovnik1
Me.bojovnik2 = bojovnik2
Me.kostka = kostka
End Sub
Private Sub Vykresli()
Console.Clear()
Console.WriteLine("-----------------ARENA------------------" & vbLf)
Console.Write­Line("Bojovní­ci::" & vbLf)
VypisBojovnika(bo­jovnik1)
Console.WriteLine()
VypisBojovnika(bo­jovnik2)
Console.WriteLine()
End Sub
Public Sub VypisZpravu(zprava As String)
Console.Write­Line(zprava)
Thread.Sleep(700)
End Sub
Public Sub Zapas()
Dim b1 As Bojovnik = bojovnik1
Dim b2 As Bojovnik = bojovnik2
Console.Write­Line("Vítejte v Aréně!")
Console.Write­Line("Dnes se utkají {0} s {1}!" & vbLf, bojovnik1, bojovnik2)
Console.Write­Line("Zápas může začít....")
'prohození bojovníků
Dim zacinaBojovnik2 As Boolean = (kostka.hod() <= kostka.VratPo­cetSten() / 2)
If zacinaBojovnik2 Then
b1 = bojovnik2
b2 = bojovnik1
End If
Console.Write­Line("Začínat bude bojovnik {0}!" & vbLf & "Zápas může začít...", b1)
Console.ReadKey()
'cyklus s bojem
While b1.Nazivu() AndAlso b2.Nazivu()
b1.Utoc(b2)
Vykresli()
VypisZpravu(b1­.VratPosledniZ­pravu())
'zpráva o útoku
VypisZpravu(b2­.VratPosledniZ­pravu())
'zpráva o obraně
If b2.Nazivu() Then
Console.Write­Line("b2.žije", b2)
b2.Utoc(b1)
Vykresli()
VypisZpravu(b2­.VratPosledniZ­pravu())
'zpráva o útoku
'zpráva o obraně
VypisZpravu(b1­.VratPosledniZ­pravu())
End If
Console.WriteLine(" ")

End While
If b1.Nazivu() Then Console.Write(b1) : Console.Write(" žije")

If b2.Nazivu() Then Console.Write(b2) : Console.Write(" žije")
Console.WriteLine(" Zápas skončil")
End Sub
Private Sub VypisBojovnika(b As Bojovnik)
Console.Write­Line(b)
Console.Write("Ži­vot:")
Console.Foregrou­ndColor = ConsoleColor.Red
Console.Backgrou­ndColor = ConsoleColor.Dar­kRed
Console.Write­Line(b.GrafZi­vot())
Console.Reset­Color()
If TypeOf b Is Mag Then
Console.Write("Ma­na: ")
Console.Foregrou­ndColor = ConsoleColor.Blue
Console.Backgrou­ndColor = ConsoleColor.Dar­kBlue
Console.Write­Line(DirectCas­t(b, Mag).GrafMana())
Console.Reset­Color()
End If
End Sub

End Class

poradi mi někdo? Díky

Odpovedať
5.7.2016 9:11
statik
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovedá na Jaroslav Trojan
Adam Ježek:5.7.2016 12:36

Posíláš kódy jako plaintext, a už poněkolikáté.
Jsi tu aktivní již skoro čtvrt roku, pamatuji si, že už minimálně jednou jsem ti říkal, jak vkládat kód a jak vkládat dlouhý kód, a nebyl jsem jediný, kdo ti to říkal.

Další komemtář, který nebude splňovat určitá pravidla pro vložení kódu ti bez jakéhokoliv oznámení smažu hned, jak si ho všimnu.

Odpovedať
5.7.2016 12:36
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Jaroslav Trojan
Tvůrce
Avatar
Jaroslav Trojan:8.7.2016 13:16

Už jsem na to přišel, program funguje správně! Není třeba mi odpovídat.

Odpovedať
8.7.2016 13:16
statik
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!