Csvk! Skrevet 27. juli 2009 Del Skrevet 27. juli 2009 (endret) Heisann! Jeg holder på med et "Roll the dice" program, og trenger hjelp med denne funksjonen (Ignorer "RANDOM FUNKSJON", jeg så ikke vitsen i å inkludere funksjonen som genererer random): int roll(int r) { int roll_player[r]; int roll_comp[r]; int result_player; int result_comp; bool check_won; for (int i = 0; i < r; i++) { roll_player[i] = RANDOM FUNKSJON; roll_comp[i] = RANDOM FUNKSJON; } result_player = ??; result_comp = ??; check_won = (result_player > result_comp); return check_won; } Variablen result_player skal fungere på denne måten: roll_player[1] + roll_player[2] + roll_player[3]......... + roll_player[r]. Det jeg ikke finner ut av, er hvordan jeg holder orden på hvor mange "r" er, slik at result_player plusser like mange roll_player med hverandre. Vanskelig å forklare dette, men håper det er forståelig til en viss grad Endret 27. juli 2009 av Csvk! Lenke til kommentar
JeffK Skrevet 27. juli 2009 Del Skrevet 27. juli 2009 (endret) Du kan ikke skrive int roll_player[r]; siden r er en variabel. Kompilatorn må vite hvor mye minne som skal allokeres. Hvis du skal ha dynamise minnestørelser må du bruke new(C++) eller malloc©. Ellers må du nok bruke en for-løkke for å summere. Siden du ikke sparer på de individuelle kastene etter funksjonen er ferdig, kan du like greit gjøre slik: int roll(int r) { int result_player = 0; int result_comp = 0; for (int i = 0; i < r; i++) { result_player += RANDOM FUNKSJON; result_comp += RANDOM FUNKSJON; } return (result_player > result_comp); } Endret 27. juli 2009 av JeffK Lenke til kommentar
Csvk! Skrevet 27. juli 2009 Forfatter Del Skrevet 27. juli 2009 (endret) Du kan ikke skrive int roll_player[r]; siden r er en variabel. Kompilatorn må vite hvor mye minne som skal allokeres. Hvis du skal ha dynamise minnestørelser må du bruke new(C++) eller malloc©. Ellers må du nok bruke en for-løkke for å summere. Siden du ikke sparer på de individuelle kastene etter funksjonen er ferdig, kan du like greit gjøre slik: int roll(int r) { int result_player = 0; int result_comp = 0; for (int i = 0; i < r; i++) { result_player += RANDOM FUNKSJON; result_comp += RANDOM FUNKSJON; } return (result_player > result_comp); } Oi, det gjorde alt så mye lettere! Takk skal du ha EDIT: Hvordan hadde koden sett ut om jeg skulle spart på hvert enkelt kast? Endret 27. juli 2009 av Csvk! Lenke til kommentar
JeffK Skrevet 27. juli 2009 Del Skrevet 27. juli 2009 Om du har en øvre grense R for hva r kan være, kan du f.eks. returnere en array av størrelse 2R, hvor de første R elementene tilhører spilleren og de andre tilhører computer. Ellers kan du pakke det inn i en klasse eller struktur, eller sende to pekere(evt referanse i c++) til funksjonen som peker på områder med plass til å lagre kastene. Lenke til kommentar
[kami] Skrevet 4. august 2009 Del Skrevet 4. august 2009 Bruk stl. på denne måten slipper du minnehåndteringa med new/delte. nt roll(int r) { std::vector<int> roll_player; roll_player.resize(r); std::vector<int> roll_comp; roll_comp.resize(r); int result_player; int result_comp; bool check_won; for (int i = 0; i < r; i++) { roll_player[i] = RANDOM FUNKSJON; roll_comp[i] = RANDOM FUNKSJON; } result_player = ??; result_comp = ??; check_won = (result_player > result_comp); return check_won; } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå