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 SubAihe on jo aika vanha, joten et voi enää vastata siihen.