Gå til innhold

Trenger hjelp med oppgave - terningspill.


Anbefalte innlegg

LuckySeven er det mest populære spillet i BlueJ Kasino. Spillet går ut på at en spiller kaster to

terninger. 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
Videoannonse
Annonse

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

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

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
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

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

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

/** 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 av Cyberfrog
Lenke til kommentar

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 av MadOx
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...