Probleem met spelletje

Status
Niet open voor verdere reacties.
Heb je al geprobeert om eens een breakpoint te zetten en vandaar de code te doorlopen?

Wat is de precieze melding welke hij geeft?
 
Omdat je de functie dobbel() nergens aanroept.

Verander dit eens naar:
Code:
public DobbelsteenTrio()
    {
    	Dobbelsteen d1 = new Dobbelsteen();
    	Dobbelsteen d2 = new Dobbelsteen();
    	Dobbelsteen d3 = new Dobbelsteen();
        dobbel();
    }

[edit]
hmmmz.. die roep je hier aan in de functie speel....
ik ga even verder kijken...
 
Laatst bewerkt:
Ja, de speel() methode is de belangrijkste. Hij moet eerst vragen om geluksgetal, dan om inzet, en vervolgens moet hij gaan dobbelen. Maar het dobbelen gebeurd gewoon niet.
 
Wat mij zo 1-2-3 opvalt (zonder te testen):
Code:
    private DobbelsteenTrio dobbelStenen = new DobbelsteenTrio();
    
    private void speel()
    {
    	DobbelsteenTrio dobbelStenen = new DobbelsteenTrio();
    }
Volgens mij knalt ie hier op, omdat die naam al voorkomt. Ik zou gewoon in de constructor een nieuw DobbelsteenTrio aanmaken (overigens vind ik die klasse zwáár overbodig, maar dat is mijn mening).

Daarnaast roep je de functie "bepaalNieuwSaldo(...)" nergens aan, dus je programma zal nooit de while-lus verlaten (nou is dat niet de reden dat ie 't niet doet, maar kan toekomstige problemen wellicht verhelpen ;)).


Edit: nog een fout gevonden (denk ik, niet getest):
Code:
    public void vraagGeluksGetal() {
	{
		System.out.print("Geef een geluksgetal op tussen de 1 en 6: ");						
		geluksGetal = myScanner.nextInt();	
	}
	
    }
Je kan niet in een functie nog een keer een accolade-stuk doen (volgens mij?, niet getest).
 
Laatst bewerkt:
Code:
//Bovenaan:
private DobbelsteenTrio dobbelStenen;

//Constructor:
public Chuckaluckspel() {
this.dobbelStenen = new DobbelsteenTrio();
}

Je moet de variabele dobbelStenen wel in je hele klasse behouden (omdat je 'm in andere functies aanroept), waardoor je deze dus in de scope van je klasse moet zetten. En het liefst dus private.
Daarnaast is het strikter om in de constructor de aanroep te doen, het daadwerkelijke instantieren van het object dobbelStenen :).
 
Laatst bewerkt:
Chuckaluckspel
Code:
public String geefResultaat() {
        String resultaat = "";
        for (int i = 0; i <= 3; i++){
            resultaat = resultaat + dobbelStenen.geefResultaat();
        }
        return resultaat;
    }

icm:

DobbelsteenTrio
Code:
public String geefResultaat() {
        String resultaat = "";
        for (int i = 0; i <= 3; i++){
            resultaat = resultaat + d1.resultaatWorp() + d2.resultaatWorp() + d3.resultaatWorp() + " ";
        }
        return resultaat;
    }

Gaat niet goed werken.
Op deze manier output je 9x het resultaat van de 3 worpen

Wat je er dus beter van kan maken:

Chuckaluckspel
Code:
public String geefResultaat() {
            return dobbelStenen.geefResultaat() + " ";
    }

DobbelsteenTrio
Code:
public String geefResultaat() {
        return "Steen1: " + d1.resultaatWorp()+ "\nSteen2: " + d2.resultaatWorp() + "\nSteen3: " + d3.resultaatWorp();
    }

Dan krijg je als output(getallen zijn een voorbeeld):
Steen1: 6
Steen2: 3
Steen3: 5

Of als je alles achter elkaar wilt hebben en geen SteenX ervoor wil hebben:
Code:
public String geefResultaat() {
        return "" + d1.resultaatWorp() + d2.resultaatWorp() + d3.resultaatWorp();
    }
 
Laatst bewerkt:
Ok, zeer bedankt voor de reacties tot nu toe, erg handige tips/opmerkingen.

Alleen hiermee krijg ik het programma nog niet werkend, hij blijft constant vragen om geluksgetal en inzet, hij gaat maar niet dobbelen. De while-loop blijft maar doorgaan t/m inzet.
 
Je voert wel een inzet in?
Want als je dat niet doet, dan gaat hij ook niet door.

Probeer anders eens de vraagInzet() er tussenuit te halen en dan kijken of hij wel gaat dobbelen.
 
Als ik hem run krijg ik bijvoorbeeld het volgende:

Code:
Je beginsaldo is: 100
Geef een geluksgetal op tussen de 1 en 6: 2
Geef je inzet op (let op je saldo): 20
Geef een geluksgetal op tussen de 1 en 6:

En dat dan oneindig door.

vraagInzet() weglaten werkt ook niet, dan loopt hij gewoon vraagGeluksGetal().
 
ok, probeer het volgende eens:

Haal beide methodes: vraagInzet en vraagGeluksGetal eens eruit en geef een statische waarde aan deze.
Code:
private int geluksGetal = 3;
private int inzet = 10;
Vervolgens kijken wat hij doet.

_____

Als hij dan niets meer doet proberen:
in DobbelsteenTrio
Code:
private Dobbelsteen d1;
private Dobbelsteen d2;
private Dobbelsteen d3;
Allemaal public maken
En dan in de klasse: DobbelsteenTrio de volgende variabele toevoegen:
Hierin sla je de worpen op welke gegooit zijn.
Code:
private int[] waardeWorpen = new int[3];
Dan aan de functie dobbel() aanpassen naar:

Code:
public void dobbel()
    {
        d1.dobbel();
        d2.dobbel();
        d3.dobbel();
	waardeWorpen[0] = d1.resultaatWorp();
	waardeWorpen[1] = d2.resultaatWorp();
	waardeWorpen[2] = d3.resultaatWorp();
    }
Dan de volgende functie er nog bij:
Daarmee geef je de waarde welke in de waardeWorpen array zijn gezet terug.
Code:
 public int getWorp(int worpnummer)
    {
        switch(worpnummer){
		
			case 1: return waardeWorpen[0];
					break;
			case 2: return waardeWorpen[1];
					break;
			case 3: return waardeWorpen[2];
					break;
                        default: return 0;
                                        break;
    }


Dan in de klasse: Chuckaluckspel
de functie speel aanpassen naar:
Code:
private void speel()
    {
    	DobbelsteenTrio dobbelStenen = new DobbelsteenTrio();
    	System.out.print("Je beginsaldo is: 100 ");
   	   	while (saldo > 0)
        {
   	   	ronde++;
        dobbelStenen.dobbel();
	System.out.println("" + dobbelStenen.getWorp(1)+ " " + dobbelStenen.getWorp(2)+ " " + dobbelstenen.getWorp(3));
        geefResultaat();
           
       }
    }

Nu moet hij elke keer de waarde van de worpen printen.
 
Laatst bewerkt:
Even voordat ik je hele uitwerking ga proberen, ik heb in dobbelsteenTrio de constructor verbeterd, en ik heb hem nu zover dat ik dit krijg(een error, dus geen oneindige loop):

Code:
Geef een geluksgetal op tussen de 1 en 6: 2
Geef je inzet op (let op je saldo): 2
Exception in thread "main" java.lang.NullPointerException
	at DobbelsteenTrio.dobbel(DobbelsteenTrio.java:16)
	at Chuckaluckspel.speel(Chuckaluckspel.java:34)
	at Chuckaluckspel.main(Chuckaluckspel.java:22)

Kun je daar meer mee of moet ik echt met een array gaan werken? :)
 
Uhm.. mag ik opmerken dat wij de functie "geefResultaat()" (in de functie speel()) wel aanroepen, maar niet printen? (doh)

Ik heb je code even ingevoerd en wat geoptimaliseerd en toegevoegd als zip-bijlage.
Hij doet het nu, alleen wil die scanner bij mij nog niet vlekkeloos werken (in Netbeans)... Ligt aan Netbeans blijkbaar:
Code:
Je saldo is: 100.0
Geef een geluksgetal op tussen de 1 en 6: 4

Geef je inzet op (let op je saldo): 5

Steen 1: 1
Steen 2: 6
Steen 3: 2

Je saldo is: 95.0
Geef een geluksgetal op tussen de 1 en 6:


Edit: ik heb een paar foutafhandelingen erin gezet (als je inzet groter is dan je saldo). Je moet nog wel steeds zelf controleren op correcte integer invoer (probeer eens een string in te voeren ;))



Edit2: ik blijf het echter wel jammer vinden van die 'overbodige' klasse, is mijns inziens echt overbodig aangezien die geen extra functionaliteit / toegevoegde waarde bevat. Maarja, wat moet dat moet hè :p
 
Laatst bewerkt:
Zeer bedankt voor jullie behulpzaamheid, serieus. Één probleempje, hij werkt bij mij nog altijd niet, hoor. Nog steeds dezelfde errors als voorheen. Ik gebruik Eclipse trouwens.
 
Zeer bedankt voor jullie behulpzaamheid, serieus. Één probleempje, hij werkt bij mij nog altijd niet, hoor. Nog steeds dezelfde errors als voorheen. Ik gebruik Eclipse trouwens.

Welke error krijg je? Exacte erroromschrijving aub :)
 
Pardon,

Code:
Je beginsaldo is: 100
Geef een geluksgetal op tussen de 1 en 6: 1
Geef je inzet op (let op je saldo): 20
Exception in thread "main" java.lang.NullPointerException
	at DobbelsteenTrio.dobbel(DobbelsteenTrio.java:16)
	at Chuckaluckspel.speel(Chuckaluckspel.java:34)
	at Chuckaluckspel.main(Chuckaluckspel.java:22)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan