Tuli eteen outo ongelma.
Kutsun pääohjelmasta luokkaa, joka puolestaan kutsuu activeX-kontrollia.
Kun kutsussa on parametrejä, niin jostain syystä luokka nollaa ne syötemuuttujat.
Onko se luokan tapa, vai onko koodissani jossain piilevä vika?
'PL B = Pyr.Tarkista(CardIndex, pTable)' Pyr on luokan globaali kutsu-kahva 'Global Pyr As New C_Pyramid' If .Card(CardIndex).Value = 1 Then Soita "Jipii.wav" ... 'Pyr -luokka (class) Public Function Tarkista(CardInd As Integer, FromPlace As enumPlaces) As Boolean PL.M1.Move_ToStack4 CardInd, L1.Suit + 1, 20, False 'Kutsutaan activeX ... 'ActiveX Public Sub Move_ToStack4(ByVal CardIndex As Integer, ByVal StackIndex As Integer, ByVal Speed As Integer, Optional ByVal EmptyCard As Boolean = False)
Kun suoritus palautuu takaisin PL-formille, on esim CardIndex nollautunut...
eli rivi 'If .Card(CardIndex).Value = 1 Then Soita "Jipii.wav"' aiheuttaa jo virheen...
millainen virhe tulee?
Siis ton muuttujan (CardIndex) nollautuminen on se virhe =)
kun ei sitä koodissa nollata missään...
Näillä lähtötiedoilla ei kyllä saa mitään aikaiseksi. Voitko pistää koko projektin johonkin tai tehdä esimerkkiprojektin, jossa sama ongelma tulee esille.
Sitä paitsi, testiohjelmani kertoo että "CardIndex ei vaihtunut, JoreSoft valehtelee"
Ohjelma, josta kerroin on korttipeli moottori, joka hoitaa kaiken pakoista, pinoista liikkumisesta jne jne... löysin sen virheenkin =)
Koodia on liikaa ja vielä keskeneräistä, kun taas aloitin koko homman uudestaan...
versio 3 tai 4 alkaa olla =)
Luulin että toi ByVal estää muuttujan muuttumisen kutsupäässä...
Julkaisen tään ilmaisena, jahka saan valmiiksi =) eihän VB6:lla tehtyä voi myydä...
tässä Kolme Tornia pasianssipelin koodi. aika lyhyt, kun moottori hoitaa suurimman osan...
Option Explicit Sub Start() Dim S$, I%, Koko As t_Size With PL.E1 'Play if you dare!!! =) 'PL.B1.BassPlayMusic "Päivänsäde ja menninkäinen.it", True 'PL.E1.Visible = True 'Laitetaan näkyville Soita "Mix.wav" .Run True PL.G1.ShowIndex = False ' no Debug I = .LoadTable(PeliTiedosto(0, Game), , , , 20) If I = -1 Then Exit Sub Koko = PL.F1.GetPictureSizeTwip() PL.Width = Koko.W 'Asetetaan formin koko samaksi kuvan kanssa PL.Height = Koko.H .Width = Koko.W .Height = Koko.H .WaitUntilAllCardsStop 'Odotetaan, että kaikki kortit on saavuttaneet paikkansa PL.F1.Wait 200 'Näytetään kortteja oikeinpäin hetki For I = 1 To 18 'käännetään kolme ylintä riviä .Table_TurnCardOver I, False Next I .PrintAll .WaitUntilAllCardsStop Gameover = False 'Peli ei ole päättynyt AnnaKortti 'PL.G1.ShowIndex = True 'Debug mode End With End Sub Sub Tarkista(C As Integer, Table As Integer) Dim I% With PL.E1 Soita "card.wav" I1 = .Card(C) If Not I1.Face Then: Exit Sub K1 = PL.S1.TableStack_Card() If Not I1.Face Then Ena: Exit Sub 'Ei lukittuja kortteja CMove = False If I1.Value - 1 = K1.Value Or I1.Value + 1 = K1.Value Then CMove = True If (I1.Value = 1 And K1.Value = 13) Or (I1.Value = 13 And K1.Value = 1) Then CMove = True If CMove Then I = PL.S1.TableStack_CardIndex() If I = -1 Then Exit Sub PL.M1.Move_ToStack I, 20 PL.M1.Move_ToTableStack C, 20 .WaitUntilAllCardsStop NäytäPiiloitettu 'Ylin rivi If Table >= 1 And Table <= 3 Then Soita "Jipii.WAV" Else Soita "error.WAV" End If End With End Sub Private Sub NäytäPiiloitettu() Dim I%, J%, K% With PL.E1 .Table_ShowHidedCard 19, 27, -10, True .Table_ShowHidedCard 10, 11, -7, True .Table_ShowHidedCard 13, 14, -8, True .Table_ShowHidedCard 16, 17, -9, True 'Ylin kerros If Not .Table_CardOn(4) And Not .Table_CardOn(5) And .Table_CardOn(1) Then .Table_TurnCardOver 1, True If Not .Table_CardOn(6) And Not .Table_CardOn(7) And .Table_CardOn(2) Then .Table_TurnCardOver 2, True If Not .Table_CardOn(8) And Not .Table_CardOn(9) And .Table_CardOn(3) Then .Table_TurnCardOver 3, True End With End Sub Sub OnkoPeliOhi() Dim I%, J%, K% If Gameover Then Exit Sub 'Tarkistetaan menikö peli läpi NäytäPiiloitettu With PL.E1 If Not .Table_CardOn(2) And Not .Table_CardOn(3) And Not .Table_CardOn(1) Then Soita "Jipii.wav" 'DisableNapit PeliLäpi = True Soita "APPLAUSE.wav" .WaitUntilAllCardsStop MsgBox "Sait pelin läpi" PL.Lopputoimet Exit Sub End If 'Tarkistetaan loppuiko peli kesken CMove = False If .Deck_Counter() > 0 Then Exit Sub For I = 27 To 1 Step -1 J = .Table_Ind(I) If .Table_CardOn(I) Then J = .Card(J).Value K = PL.S1.TableStack_Card.Value If J - 1 = K Or J + 1 = K Then CMove = True If (J = 1 And K = 13) Or (J = 13 And K = 1) Then CMove = True End If Next I Soita "TAPS.wav" .WaitUntilAllCardsStop End With MsgBox "Peli ohi!!" PL.Lopputoimet End Sub Sub Demo() Dim I As Integer If Gameover Then Exit Sub With PL.E1 .WaitUntilAllCardsStop DL = DL - 1 'Onko pöydällä yhtään korttia? CMove = False For I = 1 To 28 If .Table_CardOn(I) Then CMove = True: Exit For Next I 'Jos pakka loppu, eikä pöydälläkään kortteja, lopetetaan peli If .Deck_Counter = 0 And Not CMove Then PL.Lopputoimet: Exit Sub If DL <= 0 And .Deck_Counter > 0 Then PL.E1_DeckClick 1, 0 DL = 29 Exit Sub End If If DL <= 0 And .Deck_Counter = 0 Then DL = 29 If .Table_CardOn(DL) Then 'Onko pöytäpaikassa korttia? If .Table_Ind(DL) > 0 Then 'Onhan sen kortin index suurempi kuin 0 ? I1 = .Card(.Table_Ind(DL)) If I1.Face Then ' Onko kortti valittavissa? CMove = False ' Siirtolippu If PL.S1.TableStack_Counter() > 0 Then K1 = PL.S1.TableStack_Card() 'onko kortti +1 suurempi tai -1 pienempi? If I1.Value - 1 = K1.Value Or I1.Value + 1 = K1.Value Then CMove = True If (I1.Value = 1 And K1.Value = 13) Or (I1.Value = 13 And K1.Value = 1) Then CMove = True If CMove Then 'Clikataan pöytäkorttia ja siirrä kortti pöytäpinoon PL.E1_TableClick 1, .Table_Ind(DL), DL DL = 29 End If End If End If End If End If End With End Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.