JAVA dobbelsteen

Status
Niet open voor verdere reacties.

Gerben123

Gebruiker
Lid geworden
14 nov 2011
Berichten
12
Hoi allemaal,

Ik moet voor school een programma schrijven over wakken en ijsberen.
Dit is een spelletje waarbij de punten op een dobbelsteen ijsberen of wakken voorstellen.
Maar de dobbelstenen moet ik eerst schrijven. Dit heb ik inmiddels gedaan en deze komen ook op het scherm en als je werp klikt veranderen ze ook. (Ik heb verder nog geen vak gemaakt waarin je kunt kiezen hoeveel dobbelstenen erzijn). Maar mijn probleem is nou dat de dobbelsteen af en toe niks weer geeft en ik snap niet waarom kan iemand de fout in de code aanwijzen?

De Klasse dobbelsteen
Code:
import java.awt.*;

public class Dobbelsteen{
	private int x, y;


    public Dobbelsteen(int x){
    	this.x = x;
    	y = 50*x;



    }

//methoden

    public void tekenStenen(Graphics g){
    		    // Teken de dobbelsteen
    		    g.setColor( Color.WHITE );
    		    g.fillRoundRect((y), 55, 60, 60, 25, 25 );
    		    g.setColor( Color.BLACK );
    		    g.drawRoundRect((y), 55, 60, 60, 25, 25 );
    }

    public void tekenOgen(Graphics g){

    		    if (gooi() == 1){
    		    	g.fillOval((y+25), 80, 8, 8);
     }
    		    else if (gooi() == 2){
    		    	g.fillOval((y+5), 60, 8, 8);
    		    	g.fillOval((y+45), 100, 8, 8);
     }
    		    else if (gooi() == 3){
    		    	g.fillOval((y+25), 80, 8, 8);
    		    	g.fillOval((y+5), 60, 8, 8);
    		    	g.fillOval((y+45), 100, 8, 8);
     }
    		    else if (gooi() == 4){
    		    	g.fillOval((y+5), 60, 8, 8);
    		    	g.fillOval((y+45), 100, 8, 8);
    		    	g.fillOval((y+5), 100, 8, 8);
    		    	g.fillOval((y+45), 60, 8, 8);
     }
    		    else if (gooi() == 5){
    		    	g.fillOval((y+25), 80, 8, 8);
    		    	g.fillOval((y+5), 60, 8, 8);
    		    	g.fillOval((y+45), 100, 8, 8);
    		    	g.fillOval((y+5), 100, 8, 8);
    		    	g.fillOval((y+45), 60, 8, 8);
     }
    		    else if (gooi() == 6){
    		    	g.fillOval((y+5), 60, 8, 8);
    		        g.fillOval((y+45), 100, 8, 8);
    		    	g.fillOval((y+5), 100, 8, 8);
    		    	g.fillOval((y+45), 60, 8, 8);
    		    	g.fillOval((y+5), 80, 8, 8);
    		    	g.fillOval((y+45), 80, 8, 8);
     }

    }

    public int gooi(){
    	return (int) (6 * Math.random() + 1);
    }
}

Het Paneel
Code:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

public class Paneel extends JFrame{
	public static void main(String args[]){
		JFrame frame = new Paneel();
		frame.setSize(600,400);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setTitle("Een Dobbelsteen");
		frame.setContentPane(new TekenPaneel());
		frame.setVisible(true);
	}
}

	class TekenPaneel extends JPanel{
		private Dobbelsteen steen1, steen2;
		private JButton werpKnop;

		//constructor
		public TekenPaneel(){
	        setLayout(null);

			steen1=new Dobbelsteen(1);
			steen2=new Dobbelsteen(3);

			werpKnop = new JButton();
			werpKnop.setText("Werp!");
			werpKnop.setBounds(50,150,70,25);
			werpKnop.addActionListener(new WerpKnopHandler());
			add (werpKnop);


		}




		public void paintComponent(Graphics g){
			super.paintComponent(g);
			steen1.tekenStenen(g);
		    steen1.tekenOgen(g);
		    steen2.tekenStenen(g);
		    steen2.tekenOgen(g);
	}


class WerpKnopHandler implements ActionListener{
	public void actionPerformed(ActionEvent e){
		steen1.gooi();
		repaint();
	}
  }

}

Het algoritme voor het spel en dat er minimaal 3 en maximaal 8 stenen mee kunnen doen moet ik nog schrijven maar ik wil eerst deze fout eruit voor ik verder ga.
We moeten alles wel een beetje volgens het boek "en dan is er java doen".

Bij voorbaat dank,

Gerben
 
ah zie het al =)

oplossing is vrij simpel. Het gaat namelijk fout in je teken ogen. wat je daar feitelijk doet is elke keer opnieuw gooien (gooi() == 1) en kijken het verwachte getal is (in dit geval 1).

wat je moet doen is simpelweg een int aanmaken en die vullen met gooi. vervolgens is eht het mooiste als je het dan met een switch oplost maar kan ook met if, else if, else if:

[cpp]
public void tekenOgen(Graphics g){

int getal = gooi();

switch(getal){
case 1:
//teken 1;
case 2:
// teken 2 enz...
}
}

[/cpp]

of:

[cpp]
public void tekenOgen(Graphics g){
int getal = gooi();
if (getal == 1)
//teken 1
else if (getal == 2)
//teken 2
}

[/cpp]
 
Hee bedankt nu kan ik verder=)
Ja ik wist niet goed hoe een switch werkt dus heb het maar zo gedaan.

Een volgend vraagje waarmee ik nu zit.
Hoe kan ik zorgen dat als er een veld is waar je kunt kiezen minimaal 3 en maximaal 8 dat het programma ook alleen zoveel dobbelstenen tekend. En dus ook mee neemt in een eventuele verdere berekening?

Bij voorbaat dank.
 
Laatst bewerkt:
je kan een ArrayList<DobbelSteen> dobbelStenen; declareren. een input field maken en aan de hand van de ok knop naast je input field, de arrayList vullen.

zoiets:

[cpp]

//bij gebrek aan betere naam:
public void DobbelStenenAanMaken(){

//weet niet of het getText() is, moet je maar ff kijken.
// ook checken of je uberhaupt wel naar int kan casten.
int dobbelStenen = (int) inputField.getText();
for (int i=0; i < dobbelStenen; i++){

DobbelSteen steen = new DobbelSteen();
steen.DoIets();
//dynamisch locatie neerzetten en overige dingen "setten"
steen.setLocation(50 + ( 10 * i ), 50);
dobbelStenenList.add(steen);
}
}

[/cpp]

daarna bij je draw foreach dobbelsteen in lijst: tekenen =)
}
 
Nou nog niet helemaal. Waar ik een beetje mee zit die i die je maakt is er om te zorgen dat de dobbelsteen opzij gaat ofzo?
Want ik had daar voor in de klasse dobbelsteen een x gemaakt. En die geef je een waarde in het paneel daar door staat dit er:
[CPP]
steen1=new Dobbelsteen(1);
steen2=new Dobbelsteen(3);
[/CPP]
Waarbij 1 dan *1 is en 3 *3 dus twee plekken verder en zo heb ik steen 3 de waarde 5 mee gegeven.

Kan ik dat behouden en dan als nog zo'n array maken.

Sorry als dit een beetje rare gedachte gang is heb nog maar 8 lessen java gehad ofzo:o
 
ja hoor natuurlijk kan dat =)

je zou dan steen s = new DobbelSteen (i * 5 ) ofzo kunnen doen
 
Nog een klein vraagje het lukt me bijna, maar moet ik dat vullen van die array niet in de handler van de knop naast me veld zetten?

Het moest trouwens dit zijn bij getText:
[CPP] int dobbelstenen = Integer.parseInt(inputField.getText()); [/CPP]
 
Laatst bewerkt:
Hmm ik heb nu volgens Jcreator en Eclipse geen fouten. Geven ze niet aan maar als ik het document start komen er allemaal fouten en doet hij het niet.

Mijn code tot nu:
Klasse Dobbelsteen
[CPP]import java.awt.*;

public class Dobbelsteen{
private int steennr, x, getal;


public Dobbelsteen(int steennr){
this.steennr = steennr;
x = 50*steennr;



}

//methoden

public void tekenStenen(Graphics g){
// Teken de dobbelsteen
g.setColor( Color.WHITE );
g.fillRoundRect((x), 55, 60, 60, 25, 25 );
g.setColor( Color.BLACK );
g.drawRoundRect((x), 55, 60, 60, 25, 25 );
}

public void tekenOgen(Graphics g){



if (getal == 1){
g.fillOval((x+25), 80, 8, 8);
}
else if (getal == 2){
g.fillOval((x+5), 60, 8, 8);
g.fillOval((x+45), 100, 8, 8);
}
else if (getal == 3){
g.fillOval((x+25), 80, 8, 8);
g.fillOval((x+5), 60, 8, 8);
g.fillOval((x+45), 100, 8, 8);
}
else if (getal == 4){
g.fillOval((x+5), 60, 8, 8);
g.fillOval((x+45), 100, 8, 8);
g.fillOval((x+5), 100, 8, 8);
g.fillOval((x+45), 60, 8, 8);
}
else if (getal == 5){
g.fillOval((x+25), 80, 8, 8);
g.fillOval((x+5), 60, 8, 8);
g.fillOval((x+45), 100, 8, 8);
g.fillOval((x+5), 100, 8, 8);
g.fillOval((x+45), 60, 8, 8);
}
else if (getal == 6){
g.fillOval((x+5), 60, 8, 8);
g.fillOval((x+45), 100, 8, 8);
g.fillOval((x+5), 100, 8, 8);
g.fillOval((x+45), 60, 8, 8);
g.fillOval((x+5), 80, 8, 8);
g.fillOval((x+45), 80, 8, 8);
}

}

public int gooi(){
getal = (int) (6 * Math.random() + 1);
return getal;

}

}[/CPP]
Klasse Paneel
[CPP]import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Paneel extends JFrame{
public static void main(String args[]){
JFrame frame = new Paneel();
frame.setSize(1000,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Een Dobbelsteen");
frame.setContentPane(new TekenPaneel());
frame.setVisible(true);
}
}

class TekenPaneel extends JPanel{
private JButton werpKnop, aantalKnop;
private JTextField aantalVeld;
private JLabel aantalLabel;
private Dobbelsteen[] steen;


//constructor
public TekenPaneel(){
setLayout(null);

steen = new Dobbelsteen[8];

werpKnop = new JButton();
werpKnop.setText("Werp!");
werpKnop.setBounds(50,150,70,25);
werpKnop.addActionListener(new WerpKnopHandler());
add (werpKnop);

aantalKnop = new JButton();
aantalKnop.setText("Dobbelstenen");
aantalKnop.setBounds(335,150,120,25);
werpKnop.addActionListener(new AantalKnopHandler());
add (aantalKnop);

aantalVeld = new JTextField();
aantalVeld.setBounds(295,150,30,25);
add (aantalVeld);

aantalLabel = new JLabel();
aantalLabel.setText("3-8:");
aantalLabel.setBounds(265,150,30,25);
add (aantalLabel);


}



public void paintComponent(Graphics g){
super.paintComponent(g);
for (int i = 1; i <= steen.length; i++){
steen.tekenStenen(g);
steen.tekenOgen(g);
}

}
class AantalKnopHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
int dobbelStenen = Integer.parseInt(aantalVeld.getText());
for (int i = 1; i <= dobbelStenen; i++){
steen = new Dobbelsteen(i);
}


}
}

class WerpKnopHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
for (int i = 1; i <= steen.length; i++){
steen.gooi();
repaint();
}

}
}

}[/CPP]
 
even snel een paar dingen (zit in de bus dus niet zo veel tijd om te typen :P)

public int gooi();

je zet daar de public int getal met een nieuwe random waarde. vervolgens return je die.

2 opties:
1: maak de methode void en return niks;
2: haal de public int getal weg en return alleen een nieuwe random waarde. deze kan je dan gebruiken in je tekenogen methode

waar het mis kan gaan:


het casten naar een int. Als je Integer.parse() gebruikt en je doet dit op "hoi" krijg je een error. nu ga ik er vanuit dat je dit zelf natuurljk niet als input waarde meegeeft maar het is wel ff een putnje om rekening mee te houden.

je initialiseerd je steen array op een waarde van 8 ( steen = new DobbelSteen[8] ). Vervolgens laat je het aanj e gebruiker over om te bepalen hoeveel dubbelstenen er getekend moeten worden.
als de gebruiker een getal > 7 invoerd, krijg je een index out of bounds exception aangezien positie [7] op dit moment de max is van je array.

Ah zie nog iets. je initialiseerd je arrays op int i = 1. je moet niet vergeten dat arrays 0 (zero) based zijn. dit houdt dus in als je een arrray declareerd: steen = new dobbelsteen[8] dat geldige indices zijn: 0,1,2,3,4,5,6,7. hierbij is dus index 7 je positie 8 in de array.

Een andere manier voor het uitlezen (alleen uitlezen want het declareren op deze manier gaat moeilijk aangezien er gebruik moet gemaakt worden van de i (voor spacing tussen de dobbelstenen) ) is:

for ( DobbelSteen huidigeSteen : steen ) {
huidigeSteen.Teken()
}

aangezien mijn busreis ten einde is en het er verder goed uit ziet, zal ik het hierbij laten.

Scuces verder !
 
Erg bedankt voor je hulp hiermee steeds.
Maar wegens tijdgebrijk heb ik het array verhaal even laten varen en heb ik het anders geschreven.
Wat ik nu heb werkt allemaal:

De dobbelsteen. (Ja ik heb dat return verhaal niet veranderd :o)
[CPP]import java.awt.*;

public class Dobbelsteen{
private int x, steennr, getal, wakken, beren, pinguins;


public Dobbelsteen(int steennr){
this.steennr = steennr;
x = 50*steennr;



}

//methoden

public void tekenStenen(Graphics g){
// Teken de dobbelsteen
g.setColor( Color.WHITE );
g.fillRoundRect((x), 55, 60, 60, 25, 25 );
g.setColor( Color.BLACK );
g.drawRoundRect((x), 55, 60, 60, 25, 25 );
}

public void tekenOgen(Graphics g){

if (getal == 1){
g.fillOval((x+25), 80, 8, 8);
}
else if (getal == 2){
g.fillOval((x+5), 60, 8, 8);
g.fillOval((x+45), 100, 8, 8);
}
else if (getal == 3){
g.fillOval((x+25), 80, 8, 8);
g.fillOval((x+5), 60, 8, 8);
g.fillOval((x+45), 100, 8, 8);
}
else if (getal == 4){
g.fillOval((x+5), 60, 8, 8);
g.fillOval((x+45), 100, 8, 8);
g.fillOval((x+5), 100, 8, 8);
g.fillOval((x+45), 60, 8, 8);
}
else if (getal == 5){
g.fillOval((x+25), 80, 8, 8);
g.fillOval((x+5), 60, 8, 8);
g.fillOval((x+45), 100, 8, 8);
g.fillOval((x+5), 100, 8, 8);
g.fillOval((x+45), 60, 8, 8);
}
else if (getal == 6){
g.fillOval((x+5), 60, 8, 8);
g.fillOval((x+45), 100, 8, 8);
g.fillOval((x+5), 100, 8, 8);
g.fillOval((x+45), 60, 8, 8);
g.fillOval((x+5), 80, 8, 8);
g.fillOval((x+45), 80, 8, 8);
}

}

public int gooi(){
getal = (int) (6 * Math.random() + 1);
return getal;
}

public int aantalWakken(){

if (getal == 1 || getal == 3 || getal == 5){
wakken = 1;
}

else {
wakken = 0;
}

return wakken;


}

public int aantalBeren(){

if (getal == 3){
beren = 2;
}

else if (getal == 5) {
beren = 4;
}
else {
beren = 0;
}

return beren;


}

public int aantalPinguins(){

if (getal == 1){
pinguins = 6;
}

else if (getal == 3){
pinguins = 4;
}

else if (getal == 5) {
pinguins = 2;
}
else {
pinguins = 0;
}

return pinguins;


}
}[/CPP]

Het Paneel. (erg veel if-jes :p)
[CPP]import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

public class Paneel extends JFrame{
public static void main(String args[]){
JFrame frame = new Paneel();
frame.setSize(1000,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Wakken, IJsberen en Pinguins spel");
frame.setContentPane(new TekenPaneel());
frame.setVisible(true);
}
}

class TekenPaneel extends JPanel{
private Dobbelsteen steen1, steen2, steen3, steen4, steen5, steen6, steen7, steen8;
private JButton werpKnop, controleKnop, aantalKnop, antwoordKnop;
private JLabel uitlegLabel1, uitlegLabel2, aantalLabel, berenLabel, wakkenLabel, pinguinsLabel, berenALabel, wakkenALabel, pinguinsALabel;
private JTextField aantalVak, berenVak, wakkenVak, pinguinsVak;
private int aantal, controle1, controle2, controle3;

//constructor
public TekenPaneel(){
setLayout(null);

steen1=new Dobbelsteen(1);
steen2=new Dobbelsteen(3);
steen3=new Dobbelsteen(5);
steen4=new Dobbelsteen(7);
steen5=new Dobbelsteen(9);
steen6=new Dobbelsteen(11);
steen7=new Dobbelsteen(13);
steen8=new Dobbelsteen(15);


werpKnop = new JButton();
werpKnop.setText("Werp!");
werpKnop.setBounds(275,150,70,25);
werpKnop.addActionListener(new WerpKnopHandler());
add (werpKnop);

controleKnop = new JButton();
controleKnop.setText ("Controleer!");
controleKnop.setBounds (50,400,100,25);
controleKnop.addActionListener(new ControleKnopHandler());
add(controleKnop);

antwoordKnop = new JButton();
antwoordKnop.setText ("Antwoord!");
antwoordKnop.setBounds (250,400,100,25);
antwoordKnop.addActionListener (new AntwoordKnopHandler());
add (antwoordKnop);

aantalKnop = new JButton();
aantalKnop.setText ("Aantal");
aantalKnop.setBounds(200,150,70,25);
aantalKnop.addActionListener (new AantalKnopHandler());
add(aantalKnop);

uitlegLabel1 = new JLabel();
uitlegLabel1.setText ("Het is de bedoeling dat je eerst een aantal dobbelsteen kiest en dan op 'werp!' klikt. Daarna probeer je de antwoorden te raden. Met de knop 'Controleer!' ");
uitlegLabel1.setBounds(50,10,950,25);
add (uitlegLabel1);

uitlegLabel2 = new JLabel();
uitlegLabel2.setText ("controleer je of je antwoorden goed zijn. Als je er niet uit komt kun je de 'Antwoord!' knop gebruiken. (Werkt alleen als je controleer hebt aangeklikt!)");
uitlegLabel2.setBounds(50,30,950,25);
add (uitlegLabel2);

aantalLabel = new JLabel();
aantalLabel.setText ("3-8 dobbelstenen :");
aantalLabel.setBounds(50,150,110,25);
add(aantalLabel);

wakkenLabel = new JLabel();
wakkenLabel.setText ("Aantal wakken? :");
wakkenLabel.setBounds(50,250,100,25);
add(wakkenLabel);

berenLabel = new JLabel();
berenLabel.setText ("Aantal ijsberen? :");
berenLabel.setBounds(50,300,100,25);
add(berenLabel);

pinguinsLabel = new JLabel();
pinguinsLabel.setText ("Aantal pinguins? :");
pinguinsLabel.setBounds(50,350,100,25);
add(pinguinsLabel);

wakkenALabel = new JLabel();
wakkenALabel.setText ("");
wakkenALabel.setBounds(250,250,100,25);
add(wakkenALabel);

berenALabel = new JLabel();
berenALabel.setText ("");
berenALabel.setBounds(250,300,100,25);
add(berenALabel);

pinguinsALabel = new JLabel();
pinguinsALabel.setText ("");
pinguinsALabel.setBounds(250,350,100,25);
add(pinguinsALabel);

aantalVak = new JTextField();
aantalVak.setBounds(165,150,30,25);
aantalVak.setText ("3");
add(aantalVak);

wakkenVak = new JTextField();
wakkenVak.setBounds(155,250,30,25);
wakkenVak.setText ("0");
add(wakkenVak);

berenVak = new JTextField();
berenVak.setBounds(155,300,30,25);
berenVak.setText ("0");
add(berenVak);

pinguinsVak = new JTextField();
pinguinsVak.setBounds(155,350,30,25);
pinguinsVak.setText ("0");
add(pinguinsVak);




}




public void paintComponent(Graphics g){
super.paintComponent(g);
if (aantal == 3){
steen1.tekenStenen(g);
steen1.tekenOgen(g);
steen2.tekenStenen(g);
steen2.tekenOgen(g);
steen3.tekenStenen(g);
steen3.tekenOgen(g);
}

else if (aantal == 4){
steen1.tekenStenen(g);
steen1.tekenOgen(g);
steen2.tekenStenen(g);
steen2.tekenOgen(g);
steen3.tekenStenen(g);
steen3.tekenOgen(g);
steen4.tekenStenen(g);
steen4.tekenOgen(g);
}
else if (aantal == 5){
steen1.tekenStenen(g);
steen1.tekenOgen(g);
steen2.tekenStenen(g);
steen2.tekenOgen(g);
steen3.tekenStenen(g);
steen3.tekenOgen(g);
steen4.tekenStenen(g);
steen4.tekenOgen(g);
steen5.tekenStenen(g);
steen5.tekenOgen(g);
}

else if (aantal == 6){
steen1.tekenStenen(g);
steen1.tekenOgen(g);
steen2.tekenStenen(g);
steen2.tekenOgen(g);
steen3.tekenStenen(g);
steen3.tekenOgen(g);
steen4.tekenStenen(g);
steen4.tekenOgen(g);
steen5.tekenStenen(g);
steen5.tekenOgen(g);
steen6.tekenStenen(g);
steen6.tekenOgen(g);
}

else if (aantal == 7){
steen1.tekenStenen(g);
steen1.tekenOgen(g);
steen2.tekenStenen(g);
steen2.tekenOgen(g);
steen3.tekenStenen(g);
steen3.tekenOgen(g);
steen4.tekenStenen(g);
steen4.tekenOgen(g);
steen5.tekenStenen(g);
steen5.tekenOgen(g);
steen6.tekenStenen(g);
steen6.tekenOgen(g);
steen7.tekenStenen(g);
steen7.tekenOgen(g);
}

else if (aantal == 8){
steen1.tekenStenen(g);
steen1.tekenOgen(g);
steen2.tekenStenen(g);
steen2.tekenOgen(g);
steen3.tekenStenen(g);
steen3.tekenOgen(g);
steen4.tekenStenen(g);
steen4.tekenOgen(g);
steen5.tekenStenen(g);
steen5.tekenOgen(g);
steen6.tekenStenen(g);
steen6.tekenOgen(g);
steen7.tekenStenen(g);
steen7.tekenOgen(g);
steen8.tekenStenen(g);
steen8.tekenOgen(g);
}
}


class AantalKnopHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
int getal = Integer.parseInt (aantalVak.getText());
if (getal == 3 || getal == 4 ||getal == 5|| getal == 6|| getal == 7|| getal == 8){
aantal = getal;
aantalVak.setBackground (Color.WHITE);
repaint();
}
else
aantalVak.setBackground (Color.RED);
}
}

class WerpKnopHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
if (aantal == 3){
steen1.gooi();
steen2.gooi();
steen3.gooi();
}

else if (aantal == 4){
steen1.gooi();
steen2.gooi();
steen3.gooi();
steen4.gooi();
}

else if (aantal == 5){
steen1.gooi();
steen2.gooi();
steen3.gooi();
steen4.gooi();
steen5.gooi();
}

else if (aantal == 6){
steen1.gooi();
steen2.gooi();
steen3.gooi();
steen4.gooi();
steen5.gooi();
steen6.gooi();
}

else if (aantal == 7){
steen1.gooi();
steen2.gooi();
steen3.gooi();
steen4.gooi();
steen5.gooi();
steen6.gooi();
steen7.gooi();
}

else if (aantal == 8){
steen1.gooi();
steen2.gooi();
steen3.gooi();
steen4.gooi();
steen5.gooi();
steen6.gooi();
steen7.gooi();
steen8.gooi();
}

aantalVak.setText ("3");
wakkenVak.setText ("0");
berenVak.setText ("0");
pinguinsVak.setText ("0");
wakkenALabel.setText ("");
berenALabel.setText ("");
pinguinsALabel.setText ("");
wakkenVak.setBackground (Color.WHITE);
berenVak.setBackground (Color.WHITE);
pinguinsVak.setBackground (Color.WHITE);
repaint();
}
}

class ControleKnopHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
{
int wakken = Integer.parseInt(wakkenVak.getText());
controle1 = steen1.aantalWakken()+steen2.aantalWakken()+steen3.aantalWakken()+steen4.aantalWakken()
+steen5.aantalWakken()+steen6.aantalWakken()+steen7.aantalWakken()+steen8.aantalWakken();
if(controle1 == wakken){
wakkenVak.setBackground(Color.GREEN);
}
else{
wakkenVak.setBackground(Color.RED);
}
}

{
int beren = Integer.parseInt(berenVak.getText());
controle2 = steen1.aantalBeren()+steen2.aantalBeren()+steen3.aantalBeren()+steen4.aantalBeren()
+steen5.aantalBeren()+steen6.aantalBeren()+steen7.aantalBeren()+steen8.aantalBeren();
if(controle2 == beren){
berenVak.setBackground(Color.GREEN);
}
else{
berenVak.setBackground(Color.RED);
}
}

{
int pinguins = Integer.parseInt(pinguinsVak.getText());
controle3 = steen1.aantalPinguins()+steen2.aantalPinguins()+steen3.aantalPinguins()+steen4.aantalPinguins()
+steen5.aantalPinguins()+steen6.aantalPinguins()+steen7.aantalPinguins()+steen8.aantalPinguins();
if(controle3 == pinguins){
pinguinsVak.setBackground(Color.GREEN);
}
else{
pinguinsVak.setBackground(Color.RED);
}
}
}
}

class AntwoordKnopHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
String antwoord1 = Integer.toString(controle1);
String antwoord2 = Integer.toString(controle2);
String antwoord3 = Integer.toString(controle3);
wakkenALabel.setText (antwoord1);
berenALabel.setText (antwoord2);
pinguinsALabel.setText (antwoord3);
}
}
}[/CPP]

Er is nog 1 eis waaraan ik moet voldoen en dat is dat er een score zichtbaar moet zijn met het aantal worpen en hoe vaak geraden is.

Eventueel kon ik ook nog hint inbouwen.
 
Laatst bewerkt:
het return verhaal was niks meer als dit:P

[cpp]

public int getal;

public void getal(){
getal = (int) (6 * Math.random() + 1);
}
[/cpp]

of:

[cpp]

public int gooi(){
return (int) (6 * Math.random() + 1);
}

[/cpp]


jammer dat het array verhaal niet gelukt was, maak je code toch een stuk netter =)
 
Laatst bewerkt:
O oke en dan werkt het ook nog steeds bij het tekenen van de ogen waarvoor ik getal gebruik?

Ja ik weet het, maar zo handig ben ik daar nog niet mee helaas.

Denk je dat je ook kunt helpen met die laatste eis? Want kom er niet echt uit.:o
Ik wil eigenlijk een stukje code die elke keer als er op de knop werp, controleer en antwoord wordt geklikt een variabele verhoogt.
En deze variabele wil ik dan weergeven in bv een label. De speler kan dan zien wat hij heeft gedaan.
En dan zou je aan dat verhaal ook heel makkelijke eeen array met hints kunnen hangen denk ik of niet?

Oja heb ook toegevoegd aan dat laatste stuk code dat als je controleer drukt je de vakken niet meer kunt veranderen en nog een keer op controleer kunt drukken. En met werp maak je ze dan weer editable.
 
Laatst bewerkt:
voor je eerste vraag ja alleen is het net hoe je het opbouwd;

als je de void manier gebruikt (je class variable opnieuw setten) dan kan je de code gewoon zo laten. als je een int returned dan moet je nog wel even een locale variable in je tekenOgen methode zetten:
[cpp]
public void tekenOgen(Graphics g){
int gegooideGetal = gooi();
}
[/cpp]

verder:

vast wel alleen ik snap niet helemaal wat je wilt gaat doen met het gooien. controlleren van wat ? heb je een input field ofzo dat je een getal neerzet die je moet proberen te raden voor het gooien ?
of moet je de som van het aantal gooien optellen ? en wat bedoel je precies met hints ?
 
Oke bedankt.

Nou het is een raad spel. Een punt in het midden is een wak. De punten daaromheen zijn ijsberen. En de punten die op de kant staan tegenover de wakken zijn pinguins. De speler kent dit algoritme niet en probeert dat te raden.
Dat werkt allemaal al je kun dus iets invullen en dan kun je controleren of dit klopt. En je kunt ook het antwoord zien.
Alleen in de opdracht eis van school staat dat je ook moet gaan weergeven hoe vaak een speler het geprobeerd heeft voor hij het goed heeft. En daarvoor moet er een teller op de knoppen denk ik?
 
aangezien ik wel ff tijd heb zal ik het ff in een project zetten en kijken. ik zal meteen het array verhaal voor je implementeren. moment
 
A oke dan kunt u ook meteen zien hoe het spel eruit ziet zonder dat er nog wat in veranderd is :)
Maar ik moet nu naar het werk dus ik kan het vanavond pas zien :(

Heel erg bedankt in ieder geval dat u dit voor mij doet. =)
 
Ok heb het even omgezet. en het werk nu. Alleen klopt je algoritme niet helemaal denk ik. Het lijkt mij dat de som van beer + wak + pinguin de som van alle gegooide getallen moet zijn. dit is niet het geval.
Het gaat volgensmij mis met de pinguins. daar moet je zelf maar even naar kijken.

Verder zou ik nog 1 van de 2 knoppen weghalen. Je hebt controleer en antwoord. Dit kan makkelijk met 1 knop gedaan worden. Dit helpt je ook om het laatste deel van je opdracht te maken: het weergeven van de aantal pogingen. Je moet idd simpelweg een teller maken en op de knop van Controleer antwoord, de teller verhogen en dit weergeven.

http://dl.dropbox.com/u/3380837/Dobbelsteen.java
http://dl.dropbox.com/u/3380837/Paneel.java

*EDIT*

nog een tip: zorg er voor dat je maar 1 classe in een .java file hebt. Geeft je veel meer overzicht
 
Laatst bewerkt:
Het algoritme klopt wel. Dit is een zeer specifiek spel waar bij het algoritme moet raden. Die gaat zo wakken zijn op de noordpool en zijn altijd in het midden. Rond deze wakken zijn beren. Dus waar geen wak is is ook geen beer. Pinguins leven op de zuidpool. Deze zit dus eigenlijk aan de kant van de dobbelsteen er tegenover die zie je niet. Maar de som van twee overstaande kanten van een dobbelsteen is altijd 7. Daarop heeft een 1 steen dus 6 pinguins.
Dit komt erop neer dat alleen de 1 de 3 en de 5 een wak bevatten en dus ook beren en pinguins. De stenen 2, 4 en 6 doen dus niet mee in het algoritme.

Ja ik weet dat dit makkelijk met 1 knop gaat maar het is een eis dat dit een aparte knop is omdat als je die knop gebruikt je het spelletje dus niet helemaal zelf hebt gehaald ;)

Ik ga nu proberen een teller te maken weet alleen nog niet hoe ik dit moet doen maar hoop dat het lukt.

Bedankt voor u hulp.
 
ah ok, misschien is het dan handig dat je het aantal gokken aan de rolactie knop verbind
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan