Re: Custom types drives me nuts – t his can't be happening… can it?
Johnny Rosenberg <[email protected]> Thu, 18 Aug 2011 18:16:32 +0200
| Newsgroups | gmane.comp.openoffice.devel.api |
|---|---|
| Message-ID | <CADo7T4d2Uz=brLfRL1QJE_x0MBsCq+1oEnq7aS3SicbY7Vu2aw@mail.gmail.com> |
2011/8/16 Andrew Douglas Pitonyak <[email protected]>: > Oh my goodness! It is always something small that wastes hours of time. Yes, it seems like it most of the time=E2=80=A6 But if the bug you mentioned about that Private acts like Public was fixed, I wouldn't have had this problem, would I? :) Or if I had the magic words =E2=80=9DOption Compatible=E2=80=9D involved=E2= =80=A6 ;D Kind regards Johnny Rosenberg =E3=82=B8=E3=83=A7=E3=83=8B=E3=83=BC=E3=83=BB=E3=83=AD=E3=83=BC=E3=82=BC=E3= =83=B3=E3=83=90=E3=83=BC=E3=82=B0 > > On 08/15/2011 08:48 AM, Johnny Rosenberg wrote: >> >> Okej, forget this, I solved it. Immediately after I sent this I found >> the problem! All I needed to do to find it out was probably to write >> about it somewhere=E2=80=A6 >> >> I found the problem when I did a search in all modules for my type >> =E2=80=9DDieStatistics=E2=80=9D. I found it in a module called =E2=80=9D= Experiment=E2=80=9D which is >> Swedish for =E2=80=9DExperiments=E2=80=9D in this case. >> >> I did some tests in that module a few days ago, before I declared >> DiceFreq as an array of DieStatistics, so DiceFreq was declared >> globally twice: >> >> Module Experiment: >> Global DiceFreq As DieStatistics >> >> >> Module P: >> Private DiceFreq(1) As DieStatistics >> >> After removing the Experiment ones, everything worked as expected. >> >> Phew, what a relief=E2=80=A6 I thought I was crazy there for a few minut= es=E2=80=A6! >> >> >> And I usually don't top post, but in this case I thought it could be >> appropriate, since the text below suddenly became very unimportant. >> >> >> Best regards >> >> Johnny Rosenberg >> =E3=82=B8=E3=83=A7=E3=83=8B=E3=83=BC=E3=83=BB=E3=83=AD=E3=83=BC=E3=82=BC= =E3=83=B3=E3=83=90=E3=83=BC=E3=82=B0 >> >> >> 2011/8/15 Johnny Rosenberg<[email protected]>: >>> >>> I was editing some code I have, actually a game with dice and stuff, >>> but that doesn't matter, I suppose. >>> >>> So I ran into a problem, and I copied the troubling part of the code >>> to a separate document for test driving. >>> However, the test code runs perfectly, but not within the game of mine! >>> >>> I ran the game on another computer but another version of >>> OpenOffice.org (actually the first computer runs LibreOffice 3.3.3), >>> but the results were exactly the same. >>> >>> Here's the test code. I have a message box after almost every >>> statement so I can see what happens. I added some extra comments in >>> the code. >>> >>> REM =C2=A0***** =C2=A0BASIC =C2=A0***** >>> >>> Option Explicit >>> Option Compatible >>> >>> Type DieStatistics >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0Value As Integer >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0Count As Integer >>> End Type >>> >>> ' The variable DiceFreq, declared below this comment, tells us which >>> two die values that are most frequent. For example, if the six dice >>> are 133455, >>> ' DiceFreq will contain: >>> ' DiceFreq(0).Value: 5 (the most common value is 5) >>> ' DiceFreq(0).Count: 2 (2 dice have the value 5) >>> ' DiceFreq(1).Value: 3 (the second most common value is 3 =E2=80=93 in = this >>> case there are two of both 3 and five, but higher value has priority) >>> ' DiceFreq(1).Count: 2 (2 dice have the value 3) >>> ' This makes it very easy for us to calculate things later, >>> calculations that are not present in this short example though. >>> Private DiceFreq(1) As DieStatistics ' >>> >>> >>> Sub Test0 >>> ' =C2=A0 =C2=A0 =C2=A0 NDice tells us how many there are of each die va= lue. In the above >>> example, NDice(4)=3D1, since there are 1 die with the value 4. >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0Dim NDice(1 To 6) As Integer, i As Integer >>> >>> ' =C2=A0 =C2=A0 =C2=A0 Here we set the values of NDice for an example w= here this is >>> known >>> to fail, that is what NDice would contain if the dice were 112345 >>> ' =C2=A0 =C2=A0 =C2=A0 NDice(1)=3D2, NDice(2)=3D1 and so on. >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0For i=3D2 To 5 >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0NDice(i)=3D1 >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0Next i >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0NDice(1)=3D2 >>> >>> ' =C2=A0 =C2=A0 =C2=A0 Here's where I calculate the values for DiceFreq= by going through >>> NDice from 6 to 1. >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0For i=3D6 To 1 Step -1 >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0If NDice(i)>Dice= Freq(0).Count Then >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0DiceFreq(1).Count=3DDiceFreq(0).Count >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0DiceFreq(1).Value=3DDiceFreq(0).Value >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0MsgBox DiceFreq(0).Value& =C2=A0":= "& >>> =C2=A0DiceFreq(0).Count& =C2=A0" st."& =C2=A0Chr(13)& =C2=A0_ >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0DiceFreq(1).Value& =C2=A0": "& >>> =C2=A0DiceFreq(1).Count& =C2=A0" st." >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0DiceFreq(0).Count=3DNDice(i) >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0DiceFreq(0).Value=3Di >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0MsgBox DiceFreq(0).Value& =C2=A0":= "& >>> =C2=A0DiceFreq(0).Count& =C2=A0" st."& =C2=A0Chr(13)& =C2=A0_ >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0DiceFreq(1).Value& =C2=A0": "& >>> =C2=A0DiceFreq(1).Count& =C2=A0" st." >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ElseIf NDice(i)>= DiceFreq(1).Count Then >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0DiceFreq(1).Count=3DNDice(i) >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0DiceFreq(1).Value=3Di >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0MsgBox DiceFreq(0).Value& =C2=A0":= "& >>> =C2=A0DiceFreq(0).Count& =C2=A0" st."& =C2=A0Chr(13)& =C2=A0_ >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0DiceFreq(1).Value& =C2=A0": "& >>> =C2=A0DiceFreq(1).Count& =C2=A0" st." >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0EndIf >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0Next i >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0MsgBox "Final reults:"& =C2=A0String(2,Chr(1= 3))& =C2=A0DiceFreq(0).Value& >>> =C2=A0":" >>> & =C2=A0DiceFreq(0).Count& =C2=A0_ >>> =C2=A0 =C2=A0 =C2=A0 =C2=A0 " st."& =C2=A0Chr(13)& =C2=A0DiceFreq(1).Va= lue& =C2=A0": "& =C2=A0DiceFreq(1).Count& >>> =C2=A0" st." >>> End Sub >>> >>> >>> Now, while this works perfectly as a stand-alone subroutine, it >>> doesn't work in the game. What happens in the game is that everytime I >>> change the value of DiceFreq(i).Value or DiceFreq(i).Count, BOTH >>> instances are changed, for example if I set DiceFreq(0).Value to 5, >>> DiceFreq(1).Value is also set to 5 and I just can't figure out why! >>> >>> In the game the corresponding subroutine is called from another >>> module, but I simulated that too in my test, but still it ONLY fails >>> in the game. >>> >>> I can upload my game document (the debug version) somewhere if needed. >>> >>> What on earth could possibly cause this? I'm just out of ideas! >>> >>> Help=E2=80=A6? >>> >>> >>> Kind regards >>> >>> Johnny Rosenberg >>> =E3=82=B8=E3=83=A7=E3=83=8B=E3=83=BC=E3=83=BB=E3=83=AD=E3=83=BC=E3=82= =BC=E3=83=B3=E3=83=90=E3=83=BC=E3=82=B0 >>> > > -- > Andrew Pitonyak > My Macro Document: http://www.pitonyak.org/AndrewMacro.odt > Info: =C2=A0http://www.pitonyak.org/oo.php > > -- > ----------------------------------------------------------------- > To unsubscribe send email to [email protected] > For additional commands send email to [email protected] > with Subject: help > --=20 ----------------------------------------------------------------- To unsubscribe send email to [email protected] For additional commands send email to [email protected] with Subject: help