Kuinka saan tehtyä niin, että jos kansaa on vaikkapa 5,300,000 niin peli arpoo kuinka moni äänesti sinua ja jos sait eniten ääniä niin voitit muut ehdokkaat?
Pelin pitäisi näyttää myös muidenkin ehdokkaiden äänimäärät ja pelissä pitäisi mahdollisesti olla myös äänestämättömiäkin osa, mutta kunhan saan tuon arvontahomman?
Tässä on yksinkertainen päästä heitetty koodi (jonka toimivuudestakaan en ole täysin varma ja jonka realisisuus on mitä on), mutta idea on suunnilleen tällainen.
RANDOMIZE TIMER ehdokkaita = 5 kansa = 5300000 DIM aanet(1 to ehdokkaita) AS LONG FOR i = 1 TO 5 aanet(i) = INT(RND * kansa / ehdokkaita) NEXT i tyhjia = kansa - aanet(1) - aanet(2) - aanet(3) - aanet(4) - aanet(5) FOR i = 1 to 5 PRINT aanet(i) NEXT i PRINT tyhjia
Noh noh, eipä nyt sentään ehkä ihan noin. Eihän tuossa ole päätä eikä häntää :) Heitetäänpä päästä jälleen kerran:
RANDOMIZE TIMER CONST ehdokkaat = 5 CONST kansa = 5300000 DIM aanet(ehdokkaat) AS LONG ' varataan solu 0 äänestämättömille FOR n = 1 TO kansa ' jokainen kansalainen antaa äänen aanet(INT(RND * (ehdokkaat + 1))) = aanet(INT(RND * (ehdokkaat + 1))) + 1 NEXT n PRINT "Tyhjiä:"; aanet(0) FOR n = 1 TO ehdokkaat PRINT "Ehdokas"; n; " ->"; aanet(n); " ääntä." NEXT n
EDIT: ja toki kannattaa viritellä jonkinlaiset voimasysteemit, nyt äänet jakautunevat melkolailla tasaisesti jokaiselle ehdokkaalle (ja tyhjälle).
En tarkoittanutkaan että siinä olisi päätä, mutta häntä nyt ainakin löytyy (katso vaikka ---*, oikein komea (ja suora) tupsuhäntä ;)
Tein tuon täysin päästä parissa minuutissa koulussa ollessani, joten mitään ihmeellistä siitä ei voikaan odottaa, mutta jos siitäkin olisi edes jotain apua...
Itseasiassa Samin esimerkki toimii minulla, mutta tuota Fawkz:n koodia en saanut toimimaan vaan jää pelkää tyhjää ruutuun.
Käytössä on quubeisikki 4.5
edit: Nyt pää kyllä kumisee tyhjää enkä keksi ideaa, mutta kuinka tuohon vielä saisi lisättyä niin, että se katsoo kuka sai eniten ja kertoisi voittajan?
Kyllä tuo fawkzinkin esimerkki toimii, mutta äänten laskeminen kestää vain pirun kauan (laitoin ajastimen laskemaan sen ja siihen meni melkein 40 sekuntia!)
Tähän on lisätty semmoinen pieni juttu, että tämä etsii voittajan ja antaa hieman vähemmän tyhjiä ääniä:
CLS PRINT "QBasicin vaalikoneen arpomat tulokset:" PRINT RANDOMIZE TIMER ehdokkaita = 5 ' Ehdokkaiden määrä kansa = 5300000 ' Kuinka monta äänestäjää on DIM aanet(1 TO ehdokkaita) AS LONG ' Taulukko ehdokkaiden äänille FOR i = 1 TO ehdokkaita ' Arvotaan ehdokkaiden äänimäärät aanet(i) = INT(RND * kansa / ehdokkaita / 2) + kansa / ehdokkaita / 2 NEXT i tyhjia = kansa - aanet(1) - aanet(2) - aanet(3) - aanet(4) - aanet(5) ' Lasketaan tyhjät äänet FOR i = 1 TO ehdokkaita ' Näytetään ehdokkaiden saamat äänimäärät PRINT "Ehdokas"; LTRIM$(STR$(i)); " sai"; aanet(i); "ääntä" NEXT i PRINT "Tyhjää äänesti"; tyhjia; "kansalaista" ' Näytetään tyhjien äänien määrä PRINT voittaja = 1 ' Virhetilanteen esto FOR i = 1 TO ehdokkaita IF aanet(i) > aanet(voittaja) THEN voittaja = i ' Etsitään voittaja NEXT PRINT "Voittajaksi selviytyi ehdokas numero"; voittaja ' Julkistetaan voittaja
Juu huomasinkin että tuo oma viritelmäni olikin ihan paska ;-) En vain heti hokaissut teikäläisen koodin ideaa, eikä ollut tilaisuutta testata.
Aihe on jo aika vanha, joten et voi enää vastata siihen.