30. juli 2007 - 08:44Der er
25 kommentarer og 1 løsning
Forøge chancen for et bestemt tal fra en array bliver taget
Jeg bruger koden nede for til at tage en tilfældig "samtale" fra min samtale database til mit spil.
Den tager automatisk en samtale der passer til ens level (eller flere levels, hvoraf ens level indgår)
Hvad jeg gerne vil lave er; så der er større chance for at den tager en samtale der passer til ens level end til flere levels.
Når der i array'en står 50, betyder det at samtalen passer til alle levels mellem 5 og 0, når der står -15 er det alle levels mellem -1 og 5.
-10 er level -1 og 0.
Hvis der bare står et enkelt tal i array'en så er det den level. Og det er chancen for at det tal bliver taget jeg vil have forøget. Har selv prøvet at skrive 0,0,0,0,0 men det forøger jo ikke chancen som jeg ellers havde håbet lidt på :D
To obtain a random integer R in the range i <= R < j, use the expression FLOOR(i + RAND() * (j – i)). For example, to obtain a random integer in the range the range 7 <= R < 12, you could use the following statement:
Hvis en af dem ikke findes? Jeg tror du må lave noget kode, som først trækker alle data ud. Så kan du lave noget PHP kode, som laver din prioritering.
F.eks. alle tal fra 90 - 100 skal indgå en gang. 80 - 90 skal indgå 2 gange. 0 - 10 skal indgå 10 gange. Så vil det vil tal fra 0 - 10 med større sandsynlighed komme frem.
Inden jeg evt. laver noget slamkode som kan hjælpe dig, tror jeg du skal sætte dig og lave noget "kode" som i dit hoved giver mening. F.eks. tallene 1 - 10 skal komme 50% 11 - 20 skal komme 20 % osv...
Men det er jo også det jeg synes jeg har gjort med koden her under, der vil jeg have dem til at blive vidst lidt alla som med det kode du gav (rand og shuffle) bare at den kun skal tage dem af dem med der rent faktisk findes :S
Men helt simpelt har jeg en lille tabel med samtaler (der er min. 1 samtale til hvert lvl (-1,0,1,2,3,4,5) og så derud over er der enkelte med 2 eller 3 og nogle enkelte der gælder for flere levels altså dem med 2 tal. f.eks. -15 (der gælder for alle levels fra -1 til 5)
Men problemmet med det du foreslår er at hvis man har en pige i level 5, skal der jo ikke være en chance for at få en samtale der høre til level 2 eller sådan noget, så skal det være en der både høre til level 2 og 5.
Derfor den noget besværlige array jeg har lavet oppe over, for at sørge for at den altid finder en der passer til ens level. Mit problem er så at dem der høre til flere levels kommer virkelig mange gange i løbet af en spillers "liv" fordi han får den på alle levels.
En eller anden dag vil jeg nok have samtaler til alle level de muligheder der er, men indtil da ville jeg gerne have et system der kun tog dem der var. Men hvis ikke man kan lave et system der gør det er jeg vel bare nødt til at lave det lidt om, så jeg kun har de mulighedder i array'en der findes, bare irriterende at skulle tilføje nye hele tiden :S
Træk XP ud fra tabel WHERE XP between -1 AND 5 AND GIRL = $girl
Så skal du lave noget kode som fordobler de rækker som du skal have nogle flere af. (Brug evt. array_pad())
shuffle($xpArray); echo current(xpArray); //Her får du så en tekst ud og eftersom du har lavet dit array med flere værdier af dem der med stor sandsynlighed skal komme frem, er det vel det?
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.