MadOx Skrevet 15. februar 2009 Del Skrevet 15. februar 2009 LuckySeven er det mest populære spillet i BlueJ Kasino. Spillet går ut på at en spiller kaster toterninger. Dersom en er heldig og får en sum av 7 på kastet, vinner en 50 poeng (credits), hvis ikke taper en 10 poeng (credits). 1. Oppgaven skal bygge videre på løsningsforslaget fra oblig1, som er lagt ved i zip filen. Denne må du importere til ditt nye prosjekt ved å velge ”project” og ”import” fra menyen i BlueJ. (https://www.diskusjon.no/index.php?showtopic=1068663&st=0) 2. Det må opprettes en ny klasse i programmet som skal simulere en terning (Dice). a. Terningklassen vil ta i bruk en av JAVAs forhåndsdefinerte klasser fra klassebiblioteket, kalt Random. Denne må derfor først importeres fra java.util.Random før den kan benyttes. b. Terningklassen skal inneha en metode int throwDice() som returnerer et tilfeldig heltall mellom 1 og 6. Random har fra før en metode kalt nextInt() som kan benyttes til dette. 3. Det skal opprettes en klasse for spillet LuckySeven. a. Klassen skal inneholde felt for Player, to felt av terningsklassen Dice, samt andre felt som måtte behøves for innsats og gevinst. b. Konstruktøren til spillklassen skal ta inn Player som parameter. c. Spillklassen skal innehold en metode play(), som lar spilleren spille en runde av spillet LuckySeven. En beskrivelse av spillet finner du øverst i oppgaveteksten. d. Metoden play()skal informere om alle de sentrale hendelsene i spillet via terminalvinduet. Jeg har gjort del to, men jeg skjønner ikke helt hvordan jeg skal gjøre del tre. Hvordan kan jeg hente Player og resultatet fra terningkastet fra Dice (del a og b fra del tre)? Lenke til kommentar
pgdx Skrevet 15. februar 2009 Del Skrevet 15. februar 2009 class LuckySeven { private Dice dice1; // Disse kan byttes ut med private Dice dice2; // Dice[] dice = new Dice[2] private Player player; public LuckySeven(Player p) { this.player = p; this.dice1 = new Dice(); this.dice2 = new Dice(); } public boolean play() { System.out.println("informasjon til spilleren"); int d1 = dice1.roll(); int d2 = dice2.roll(); int value = d1 + d2; player.youGot(value); if (value == 7) { System.out.println("Victory"); return true; } else { return false; } } Vanskelig å si noe uten å vite noe om spillet, Dice og Player. Men der har du ihvertfall et skall å jobbe på. Lenke til kommentar
MadOx Skrevet 16. februar 2009 Forfatter Del Skrevet 16. februar 2009 Oi, takk så mye! Dice: import java.util.Random; public class Dice { private Random throwResult; public Dice() { throwResult = new Random(); } public int throwDice() { int result = throwResult.nextInt(7) + 1; return result; } } Player: public class Player { private String firstname; private String lastname; private int credits; public Player(String firstname, String lastname) { this.firstname = firstname; this.lastname = lastname; credits = 100; } public void setFirstname(String firstname) { this.firstname = firstname; } public void setLastname(String lastname) { this.lastname = lastname; } public void setCredits(int sum) { credits = credits + sum; } public String getFirstname() { return firstname; } public String getLastname() { return lastname; } public int getCredits() { return credits; } public boolean validPlayer(){ if(credits > 0) { return true; } else { return false; } } public void print(){ System.out.println("************************"); System.out.println("Player: "+firstname+" "+lastname); System.out.println("Credits: "+credits+" kr."); System.out.println("************************"); } } Jeg tenkte det skulle være slik at jeg importerte firstname/lastname osv, og da printe ut noe slikt som: "+firstname+" "+lastname+" "Rolled the dices!" "+firstname+" "+lastname+" "Got" "+DiceResult+" Lenke til kommentar
MadOx Skrevet 17. februar 2009 Forfatter Del Skrevet 17. februar 2009 Jeg har forresten fikset slik at Dice kaster to terninger. import java.util.Random; public class Dice { private Random throwResult; public Dice() { throwResult = new Random(); } public int throwDice() { Dice dice1 = new Dice(); Dice dice2 = new Dice(); dice1.throwDice(); dice2.throwDice(); int dice1Score = dice1.nextInt(6) + 1; int dice2Score = dice2.nextInt(6) + 1; int DiceResult = dice1Score + dice2Score; return DiceResult; } } Men hvorfor vil den ikke kompilere dette (cannot find symbol method nextInt(int)), når den forrige Dice-koden fungerte å kompilere - hvor det står "int result = throwResult.nextInt(7) + 1;"? I tillegg lurer jeg på hvordan jeg skal kunne hente inn getCredits (fra class.Player) og DiceResult (fra class.Dice) inn till class.LuckySeven. Lenke til kommentar
Cyberfrog Skrevet 17. februar 2009 Del Skrevet 17. februar 2009 nextInt må kalles på Random-objektet. Lenke til kommentar
funkyorange Skrevet 17. februar 2009 Del Skrevet 17. februar 2009 Jeg har forresten fikset slik at Dice kaster to terninger.import java.util.Random; public class Dice { private Random throwResult; public Dice() { throwResult = new Random(); } public int throwDice() { Dice dice1 = new Dice(); Dice dice2 = new Dice(); dice1.throwDice(); dice2.throwDice(); int dice1Score = dice1.nextInt(6) + 1; int dice2Score = dice2.nextInt(6) + 1; int DiceResult = dice1Score + dice2Score; return DiceResult; } } throwDice() metoden din skaper en evig løkke Lenke til kommentar
brback Skrevet 18. februar 2009 Del Skrevet 18. februar 2009 er vel strengt talt ikke en løkke som skapes, men en rekursiv metode som gjentar seg selv i det uendelige, går vel for det samme. Når du kaller dice1.throwDice(); vil du starte metoden på nytt igjen, to terninger vil bli initialisert og når dice1.throwDice(); blir kalt enda en gang vil dette skje i det uenedlige Lenke til kommentar
MadOx Skrevet 18. februar 2009 Forfatter Del Skrevet 18. februar 2009 Slik da? public class Dice { private int throwDice; private Random Dice1; private Random Dice2; public Dice() { Dice1 = new Random(); Dice2 = new Random(); } public int throwDice() { int Dice1Score = Dice1.nextInt(6) + 1; int Dice2Score = Dice2.nextInt(6) + 1; int DiceResult = Dice1Score + Dice2Score; return DiceResult; } } Men hvordan skal jeg kunne hente ut DiceResult (fra Dice) og getCredits (fra Player) til LuckySeven-klassen? Lenke til kommentar
steingrim Skrevet 18. februar 2009 Del Skrevet 18. februar 2009 1. throwDice() returnerer jo verdien, kan du ikke bruke den der du kaller metoden? 2. Følg Java-konvensjonene og bruk liten forbokstav på variable og stor forbokstav kun i klasse-navn og interface-navn. Lenke til kommentar
MadOx Skrevet 18. februar 2009 Forfatter Del Skrevet 18. februar 2009 Men om jeg skriver trowDice() i en annen klasse, går det ikke å kompilere Lenke til kommentar
steingrim Skrevet 18. februar 2009 Del Skrevet 18. februar 2009 Du kaller throwDice() på et Dice-objekt? Få se.. Lenke til kommentar
MadOx Skrevet 18. februar 2009 Forfatter Del Skrevet 18. februar 2009 Når jeg ser på "calling methods" i boken, viser de ingen kode. Kunne du ha vist meg et eksempel? Må jeg importere klassen Dice til klassen LuckySeven? Lenke til kommentar
Cyberfrog Skrevet 18. februar 2009 Del Skrevet 18. februar 2009 (endret) /** Enkelt eksempel */ public class Game { private Dice dice; public Game { dice = new Dice(); } public void startGame() { int res = dice.throwDice(); // ... } } Det virker som du ikke helt har skjønt hva objekter er og hvordan de brukes. Med mindre boken er tidenes mest håpløse, så burde den være hjelpsom i så måte. Du importerer ikke klasser som befinner seg i samme pakke. Endret 18. februar 2009 av Cyberfrog Lenke til kommentar
pgdx Skrevet 18. februar 2009 Del Skrevet 18. februar 2009 Slik import java.util.Random; public class Dice { private Random random; public Dice() { random = new Random(); } public int throwDice() { return random.nextInt(6) + 1; } } Lenke til kommentar
MadOx Skrevet 19. februar 2009 Forfatter Del Skrevet 19. februar 2009 (endret) Takk for hjelpen! class.Player: package LuckySeven_pkg; public class Player { private String firstname; private String lastname; private int credits; public Player(String firstname, String lastname) { this.firstname = firstname; this.lastname = lastname; credits = 100; } public void setFirstname(String firstname) { this.firstname = firstname; } public void setLastname(String lastname) { this.lastname = lastname; } public void addCredits(int sum) { credits = credits + sum; } public void removeCredits(int sum) { credits = credits + sum; } public String getFirstname() { return firstname; } public String getLastname() { return lastname; } public int getCredits() { return credits; } public boolean validPlayer(){ if(credits > 0) { return true; } else { return false; } } public void print(){ System.out.println("************************"); System.out.println("Player: "+firstname+" "+lastname); System.out.println("Credits: "+credits+" kr."); System.out.println("************************"); } } class.Dice: package LuckySeven_pkg; import java.util.Random; public class Dice { private Random dice1; private Random dice2; public Dice() { dice1 = new Random(); dice2 = new Random(); } public int throwDice() { int dice1score = dice1.nextInt(6) + 1; int dice2score = dice2.nextInt(6) + 1; return dice1score + dice2score; } } class.LuckySeven: package LuckySeven_pkg; class LuckySeven { private int dice; private Player player; public LuckySeven(Player p) { this.player = p; this.dice = new throwDice(); } public boolean play() { System.out.println("Throwing the dices.."); throwDice(); if(value > 7) { int value_res = "+"+value - 7; } else { int value_res = "-"+7 - value; } if(value == 7) { System.out.println("Result: "+d1+"+"+d2+"="+value+"("+value_res+")."); System.out.println("You won! 50 credits is added to your account."); addCredits(50); System.out.println("...done! Credits: "+50 + getCredits+"."); } else { System.out.println("Result: "+d1+"+"+d2+"="+value+"("+value_res+")."); System.out.println("You lost! 10 credits is removed from your account."); removeCredits(10); System.out.println("...done! Credits: "+10 - getCredits+"."); } } } Når jeg prøver å kompilere klassen LuckySeven, får jeg opp "cannot find symbol - method throwDice()". Endret 19. februar 2009 av MadOx Lenke til kommentar
Cyberfrog Skrevet 19. februar 2009 Del Skrevet 19. februar 2009 Det er ganske mye galt i LuckySeven-klassen. "new" brukes for å opprette objekter, du kan ikke bruke "new metode()". throwDice()-metoden hører til Dice-klassen og må kalles på et Dice-objekt. Jeg vet ikke hvor du har variablene d1 og d2 fra. "int value_res = ..." går ikke bra her, (1) jeg ser ikke helt hva du prøver å gjøre med strengene "+" og "-" men det funker ihvertfall ikke; du kan erstatte int-verdien value med f.eks. value-7 med value = value - 7; // eller value -= 7; (2) du kan ikke bruke int_res-variabelen senere i koden ettersom den ikke lenger er tilgjengelig når henholdsvis if- og else-blokken avsluttes. play()-metoden sier den skal returnere en boolean. Dette kompilerer, men jeg har fjernet... mye: class LuckySeven { private Dice dice; private Player player; public LuckySeven(Player p) { this.player = p; this.dice = new Dice(); } public boolean play() { System.out.println("Throwing the dices.."); int value = dice.throwDice(); // ... player.addCredits(50); // ... player.removeCredits(10); //... return true; } } 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å