Avatar billede tjacob Juniormester
30. marts 2002 - 18:08 Der er 4 kommentarer og
1 løsning

Kender du også Visual Basic?

Baggrund:
Jeg er ved at lave en klon af Windows-spillet Napoleon (Freecell) i VB.
-Ingen problemer jeg har gameplay osv (anvender Cards.dll og tilhørende API-kald).

Problem:
Jeg vil gerne lave de samme spil (dvs give kort på samme måde) som i Windows-udgaven.
Spillet er oprindeligt programmeret i C++, og "blande-algoritmen" (er offentlig) ser sådan ud: 

    for (i = 0; i < 52; i++)      // put unique card in each deck loc.
        deck[i] = i;

    srand(gamenumber);            // gamenumber is seed for rand()
    for (i = 0; i < 52; i++)
    {
        j = rand() % wLeft;
        card[(i%8)+1][i/8] = deck[j];
        deck[j] = deck[--wLeft];
    }

card() er et array (9,21) der indeholder kort-værdien (0-51) (fra Cards.dll)

Mit problem er: De tilsvarende funktioner i VB (srand=Randomize og rand()=rnd())
giver IKKE de samme værdier!
Altså: Der skal gives 52 kort, og hvert nyt kort randomiseres efter det sidste. Første kort randomiseres efter spilnummeret (i win-98 udgaven: 1-32000).

Spørgsmål:
Kan jeg på nogen måde kalde C++-funktionerne srand og rand i VB?, eller -alternativt: Hvordan fungerer disse to funktioner helt præcist? -kan jeg hardkode mig ud af problemet? (det sidste er jo nok det mest relevante i denne kategori, men jeg HAR prøvet i VB-kategorien  -uden held :-)

/tjacob
Avatar billede jpk Nybegynder
31. marts 2002 - 10:53 #1
Hvad mener du med at de (VB-funktionerne) ikke giver de samme værdier?

Du skulle jo ikke gerne få de samme værdier hvis du først prøver med C++-funktionerne og dernæst med de tilsvarende fra VB (eller omvendt).

Funktionerne giver dig jo ikke et "helt" tilfældigt tal, men kun et pseudo-tilfældigt tal, altså et tal der er genereret udfra en skiftende faktor, i dette tilfælde systemets tid.
Avatar billede tjacob Juniormester
31. marts 2002 - 12:27 #2
>>jpk
Netop, og tallene SKAL også kun være pseudo-tilfældige til dette formål.
Hvis funktionen køres med seedværdi X, så distribueres tallene fra 0 til 51 i en bestemt rækkefølge, som skal være den samme hver gang. (med X).
Jeg kan IKKE få den samme rækkefølge, når jeg anvender den samme seedværdi og de tilsvarende VB-funktioner, og det er mit problem.
Jeg ønsker at kunne generere de samme distributioner med VB-funktionerne, -hvordan?
Avatar billede tjacob Juniormester
31. marts 2002 - 17:52 #3
Jeg kommer netop i tanke om:
funktionerne srand() og rand() ligger måske i en dll-fil?
Hvis dette er tilfældet kan jeg kalde dem direkte i VB!
-Så points går til den der kan fortælle mig hvilken dll der indeholder disse to funktioner (hvis det er tilfældet).
Avatar billede tjacob Juniormester
31. marts 2002 - 18:06 #4
-Har selv fundet dem i MSVCRT.DLL.
-Prøver at kalde dem i VB.
Avatar billede tjacob Juniormester
01. april 2002 - 11:54 #5
Ingen held. -Lukker spm. og åbner nyt i VB-kategorien.
/tjacob
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester