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