Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6 random-ongelma (VBA)

feltsu [10.10.2009 19:40:13]

#

Moikka!

Mulla on tässä nyt semmonen peliprojekti meneillään ja siinä sitten pitäis taistella vihuja vastaan vuoropohjasessa taistelusysteemissä ja nyt tarviisin vähän vinkkejä ja vihjeitä että miten pystyn toteuttamaan systeemin joka hakee random vihun taulukosta? Tai siis ku siinä on tietokantafilu josta se peli hakee kaikki vihujen tiedot ja tallentaa ne sitten MonsterDataTypeen (itsetehty taulukkotsydeemi). Ja siihen MonsterDataTypeen kuuluu esim MonHp, MonLvl, MonName ja muuta vastaavaa sälää. Niin tässä nyt ei sinäällään valmista koodia kysellä (eikä tarvii edes välttämättä tietää just Visual Basic 6:sesta yhtikäs mitään, kunhan muuten ohjelmointikonsepti hanskassa). Niin että vinkkejä, vihjeitä ja ideoita, mistä suunnasta tätä ongelmaa kannattais lähteä lähestymään, olisi oikein mukava saada!

-Feltsu

Metabolix [10.10.2009 20:10:44]

#

Tekstistäsi en ymmärtänyt, mikä on ongelmana. Satunnaisen vihollisen saa, kun arpoo luvun ja ottaa luvun osoittaman vihollisen taulukosta. Pseudokoodina siis näin:

min = alaraja(vihollistaulu)
max = ylaraja(vihollistaulu)
i = arvo_luku_valilta(min, max)
vihollinen = vihollistaulu(i)

Ei ole kovin ihmeellistä, vai onko? Itse en ainakaan tarvitse tähän yhtäkään erityistä "ohjelmointikonseptia", vaan ihan taulukko ja satunnaislukufunktio riittävät.

neau33 [10.10.2009 21:29:10]

#

MORJENS TAAS feltsu!

tässä valmispaskaa vihun arpomiseen VBA-versiona...

Private Type EnemyType
    Name As String
    isAlive As Boolean
    'jne...
End Type

Private Enemies() As EnemyType
Private CurrentEnemy As Integer

Private Sub UserForm_Activate()

    Static IsInitialized As Boolean
    If Not IsInitialized Then

       IsInitialized = True

        Dim i As Integer
        ReDim EnemyTable(0)

        For i = 0 To 9
                ReDim Preserve Enemies(i)
            Enemies(i).Name = "Enemy " & CStr(i)
            Enemies(i).isAlive = True
        Next i

    End If

End Sub

Private Sub CommandButton1_Click()

    Dim theEnemy As Variant
    Dim index As Integer

DoItAgain:

    index = RaffleIndex(LBound(Enemies), UBound(Enemies))

    If Enemies(index).isAlive Then
        CurrentEnemy = index
        theEnemy = Enemies(index).Name
        MsgBox theEnemy
    Else
        GoTo DoItAgain
    End If

End Sub

Private Function RaffleIndex( _
min As Integer, max As Integer) As Integer

    Randomize

    RaffleIndex = CInt((max - min) * Rnd() + min)

End Function

feltsu [10.10.2009 23:31:55]

#

UI! KIITTI! Tosta oli kyllä loads of help :D Nyt koitan vaan soveltaa että vertaa vielä player leveliä monsterin leveliin ja valitsee vaan oikean tasoisia vastuksia :D Kivaa aivotyöskentelyä kyllä! Mutta luultavasti viimeistään maanantaina tuun itkemään ku en saa toimimaan :D Kohtuu nuub viel näissä touhuissa, mut toisaalta tällä tavalla opinkin parhaiten (taino toisiks parhaiten, parhaimmin oppimisin jos istuisin tunnilla ja maikka selittäis mutta se on sitte taas ihan toinen juttu)

-Feltsu

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta