Dobbelsteen gooien met java eclipse

Status
Niet open voor verdere reacties.

sjaaky55

Gebruiker
Lid geworden
5 jun 2010
Berichten
52
Ik moet op dit moment proberen met eclipse een java programma te schrijven.
Dit programma moet 3 dobbelstenen kunnen gooien.
Ik probeer nu dus met eclipse bijvoorbeeld dit te runnen:

/*
Een eenvoudig programma in Java,
dat "Hallo Wereld" schrijft
*/
import java.applet.*;
import java.awt.*;
public class Hallo extends Applet {
public void paint (Graphics g) {
g.drawString ("Hallo Wereld",60,30);
}
}

Als ik het dan run dan staat er: Unable to find an ant file to run.
Kan iemand mij uitleggen waarom dit niet werkt?
En kan iemand mij misschien helpen met mijn script voor de dobbelstenen.

Alvast bedankt
 
Ik heb nu dit gedaan:


public class HelloWorld {

/**
* Haloooooooooooo
*/
public static void main(String[] args) {
System.out.println("Hello World");

}

}

Deze oefening is me nu wel gelukt.
Maar kan iemand me helpen met de dobbelstenen.
Ik denk dat ik eerst het interface inclusief de dobbelstenen moet maken, hoe teken ik dat?
 
Ik heb nu dit gedaan:


public class HelloWorld {

/**
* Haloooooooooooo
*/
public static void main(String[] args) {
System.out.println("Hello World");

}

}

Ik snap niet helemaal wat je "Hello world" programma te maken heeft met dobbelstenen :) waarom je eerste programma niet werkte is omdat je JApplet extende (dit zorgt ervoor dat je programma een applet wordt en dus in een webpagina kan draaien). Bij JApplet moet je de methode public void init() gebruiken.

Voor de dobbelsteen: Als ik zo naar je stukjes code kijk zie ik dat je een beginner bent en je waarschijnlijk niet grafisch wil / moet werken. Je zou dus dit kunnen doen:

Code:
public class Dobbelsteen {

    public static void main(String args[]) {
	Dobbelsteen dobbelstenen = new Dobbelsteen(); //maakt een nieuw object aan van de klasse dobbelsteen (deze klasse).
	System.out.println("Uw eerste dobbelsteen: " + dobbelstenen.gooiDobbelsteen());  //Print een String uit + de uitvoer van de methode gooiDobbelsteen().
	System.out.println("Uw tweede dobbelsteen: " + dobbelstenen.gooiDobbelsteen());
	System.out.println("Uw derde dobbelsteen: " + dobbelstenen.gooiDobbelsteen());
    }
    
    public String gooiDobbelsteen() {
	int dobbel = 0;    //Initialiseer een Integer genaamd dobbel.
	dobbel = (int)(Math.random() * 6 + 1); //geef de Integer een andere waarde (Math.random geeft een getal tussen de 0.0 en 1.0 (een kommagetal ook wel double genoemd). Dat word vermenigvuldigd met 6 en daar word 1 bij opgeteld. Dat word daarna gecast (omgezet) in een Integer (heel getal).
	return "U heeft " + dobbel + " gegooid";   //Als de methode word uitgevoerd word dit teruggegeven de "return waarde".
    }
    
    
}

Het kan natuurlijk ook op hele andere manieren zoals: 3 verschillende methodes met andere uitvoer (gooi dobbelsteen1, dobbelsteen2, dobbelsteen3 een andere manier is een getal meegeven aan een methode en daar de uitvoer op baseren.
 
Ik snap niet helemaal wat je "Hello world" programma te maken heeft met dobbelstenen :) waarom je eerste programma niet werkte is omdat je JApplet extende (dit zorgt ervoor dat je programma een applet wordt en dus in een webpagina kan draaien). Bij JApplet moet je de methode public void init() gebruiken.

Voor de dobbelsteen: Als ik zo naar je stukjes code kijk zie ik dat je een beginner bent en je waarschijnlijk niet grafisch wil / moet werken. Je zou dus dit kunnen doen:

Code:
public class Dobbelsteen {

    public static void main(String args[]) {
	Dobbelsteen dobbelstenen = new Dobbelsteen(); //maakt een nieuw object aan van de klasse dobbelsteen (deze klasse).
	System.out.println("Uw eerste dobbelsteen: " + dobbelstenen.gooiDobbelsteen());  //Print een String uit + de uitvoer van de methode gooiDobbelsteen().
	System.out.println("Uw tweede dobbelsteen: " + dobbelstenen.gooiDobbelsteen());
	System.out.println("Uw derde dobbelsteen: " + dobbelstenen.gooiDobbelsteen());
    }
    
    public String gooiDobbelsteen() {
	int dobbel = 0;    //Initialiseer een Integer genaamd dobbel.
	dobbel = (int)(Math.random() * 6 + 1); //geef de Integer een andere waarde (Math.random geeft een getal tussen de 0.0 en 1.0 (een kommagetal ook wel double genoemd). Dat word vermenigvuldigd met 6 en daar word 1 bij opgeteld. Dat word daarna gecast (omgezet) in een Integer (heel getal).
	return "U heeft " + dobbel + " gegooid";   //Als de methode word uitgevoerd word dit teruggegeven de "return waarde".
    }
    
    
}

Het kan natuurlijk ook op hele andere manieren zoals: 3 verschillende methodes met andere uitvoer (gooi dobbelsteen1, dobbelsteen2, dobbelsteen3 een andere manier is een getal meegeven aan een methode en daar de uitvoer op baseren.

Oke, dankjewel. Dat eerste stukje deed ik om te oefenen.
Maar hoe kan ik jouw script runnen dan ? Want in eclipse zegt hij : Error exist in required project(s).
Ik heb ook al een script van een dobbelsteen:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyFrame extends JFrame implements ActionListener
{
private JButton b1, b2, b3;
private JTextField tf1, tf2, tf3;
private int worp1, worp2;
private int worp;
private String uitkomst;


//b1 eerste worp
//b2 tweede worp
//b3 winstberekening

//tf1 eerste worp uitkomst
//tf2 tweede worp uitkomst
//tf3 winst uitkomst

public MyFrame()
{
setLayout(new FlowLayout());

b1 = new JButton("werp steen 1");
add(b1);
b1.addActionListener(this);

tf1 = new JTextField(5);
add(tf1);
tf1.setEditable(false);

b2 = new JButton("werp steen 2");
add(b2);
b2.addActionListener(this);

tf2 = new JTextField(5);
add(tf2);
tf2.setEditable(false);

b3 = new JButton("Bereken de winst");
add(b3);
b3.addActionListener(this);

tf3 = new JTextField(5);
add(tf3);

setSize(100, 150);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

private int worp()
{
return 1 + (int)(6 * Math.random());
}

public void actionPerformed(ActionEvent e)
{
if(e.getsource()== b1)
{
worp1= worp();
tf1.setText(Integer.toString(worp1));
}
// de rest etc.
}
public static void main(String[]args)
{
new MyFrame();
}

}

Maar ook hierbij snap ik niet , hoe ik hem moet runnen.
Kan iemand mij dit uitleggen, want dan kan ik zien wat hier het resultaat van is.
 
UNDER CONSTRUCTION TIJDELIJK OPSLAG
Imports hier leg je linken naar libs en classes die gebruikt worden
PHP:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
Hier wordt een class myframe gemaakt die een vader jframe heeft waarbij het kind dan alle eigenschapen van de vader heeft
implements actionlistener zou ik niet doen maar het is een interface die mogelijk maakt dat je er events op uitvoerdt als je die meegeeft maar wanneer gebeurt het ??
PHP:
public class MyFrame extends JFrame implements ActionListener{
aanmaken van een variable te vergelijken met een doos waar je iets instopt variabelen nemen een deel van het geheugen
PHP:
private JButton b1, b2, b3;
private JTextField tf1, tf2, tf3;
private int worp1, worp2;
private int worp;
private String uitkomst;
hieronder wat commentaar
PHP:
//b1 eerste worp
//b2 tweede worp
//b3 winstberekening

//tf1 eerste worp uitkomst
//tf2 tweede worp uitkomst
//tf3 winst uitkomst
constructor word aangeroepen wanneer er een instantie van de class wordt gemaakt vb new MyFrame
PHP:
public MyFrame(){
    setLayout(new FlowLayout());
    b1 = new JButton("werp steen 1");
    add(b1);
    b1.addActionListener(this);
hier wordt een nieuw textfield aangemaakt
PHP:
    tf1 = new JTextField(5);
hier wordt deze toegevoegd aan het jframe aangezien de functie niet zelf hebt voorzien maar deze wel bij de vader of superclass aanwezig is waar hij is van extends (en word dus toegevoegd)
PHP:
    add(tf1);
wordt niet editeerbaar gemaakt
PHP:
    tf1.setEditable(false);

    b2 = new JButton("werp steen 2");
    add(b2);
hier wordt er een action lissener aan toegevoed de constructie is mij niet bekend maar lijkt mij geen voordeel te bieden maar het kan omdat hij de interface actionlistener implementeert
PHP:
    b2.addActionListener(this);

    tf2 = new JTextField(5);
    add(tf2);
    tf2.setEditable(false);

    b3 = new JButton("Bereken de winst");
    add(b3);
    b3.addActionListener(this);

    tf3 = new JTextField(5);
    add(tf3);

    setSize(100, 150);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
}
een methode worp en geeft de waarde 1 plus een random getal weer
PHP:
private int worp(){
    return 1 + (int)(6 * Math.random());
}

public void actionPerformed(ActionEvent e){
    if(e.getsource()== b1){
    worp1= worp();
    tf1.setText(Integer.toString(worp1));
}
// de rest etc.
}
hier is de main wordt aangeroepen wat hier nog niet aanwezig is het zichtbaar maken en pack() om het te packen maar dat plaats je dan beter in de constructor
PHP:
public static void main(String[]args){
     new MyFrame();
}

}
 
Oke, harstikke bedankt voor de uitleg hiervan!
Ik was ondertussen al begonnen met mijn eigen script.

Code:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Vb08_03 extends Applet {
	Button knop, knop2, knop3;

	public void paint( Graphics g )
	{
		g.setColor( Color.red );
		g.fillRoundRect( 450, 120, 100, 100, 30, 20 );
		g.fillRoundRect( 650, 120, 100, 100, 30, 20 );
		g.fillRoundRect( 850, 120, 100, 100, 30, 20 );
	}
	public void init() {
		knop = new Button ( "Werp dobbelsteen 1" );		
		add( knop );
		
		knop2 = new Button ( "Werp dobbelsteen 2" );
		add( knop2 );
		
		knop3 = new Button ( "Werp dobbelsteen 3" );
		add( knop3 );
			
		setBackground( Color.yellow );
	}
}

Nu moet ik dus als ik op knop 1 druk, dobbelsteen 1 gaan gooien. Hoe kan ik die actie in het script verwerken?
En als ik op 2 druk, dobbelsteen 2. En 3 ook zo.
Ik moet dus gewoon 3 rondjes in de vierkantjes tekenen (6 verschillende situaties).
Maar dan moet ik dus de actie hebben om willekeurig 1 van de 6 situaties in de dobbelsteen te krijgen. Hoe doe ik dat?
Hopelijk kan iemand helpen.

Alvast bedankt
 
Laatst bewerkt:
Na het aanmaken van de knop kan je er een ActionListener aan toevoegen.

dus dan word het iets van: knop.addActionListener( new KnopHandler() ); //Voegt de actionlistener toe aan de knop
Code:
//Een private klasse (een klasse binnen een klasse).

private class KnopHandler implements ActionListener {
              public void actionPerformed(ActionEvent e) {
                    if(e.getSource() == knop) {
                         //Hier moet de code komen wat er gebeurt na het indrukken van de button (in dit geval met de naam knop)         misschien kan je even kijken naar de methodes van mijn eerste post.
                   }
              }
}
Het niet heel veel tijd dus kan ik kan je zo niks uitwerken. Als je nog vragen hebt vraag maar wat je wilt dan kijk ik ernaar als ik meer tijd heb.

M.v.g.
NewbProgr.
 
Beginnen Bij het begin

je gaat een object maken dobbelsteen zoals al door iemand anders is vernoemd

class Dobbelsteen(){



}

geef een methode tostring()
waarmee je de actuele stand kan tonen

je maakt een methode paint()
waarmee je wacht tot je het getal kan printen van de waarde

je maakt een methode random van 1 tot 6 ertussen mag niet bestaan

als je
 
Beiden heel erg bedankt!
Ik heb de knoppen even onder de dobbelstenen geplaatst.
Nu heb ik dus geprobeerd om een action erin te zetten.
Ik heb geprobeerd om wanneer je op "werp dobbelsteen 3" klikt, dat hij er dan 3 ogen kwamen.
Maar hierin zit een fout blijkbaar. Weet iemand wat ik fout doe?

(De 1e dobbelsteen staan alle ogen in daar moet je je niks van aantrekken, dit deed ik even om alle coördinaten van de punten te weten.)

De code:

Code:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Vb08_03 extends Applet
implements ActionListener {
	Button knop, knop2, knop3;

	public void paint( Graphics g )
	{
		g.setColor( Color.red );
		g.fillRoundRect( 450, 120, 100, 100, 30, 20 );
		g.fillRoundRect( 650, 120, 100, 100, 30, 20 );
		g.fillRoundRect( 850, 120, 100, 100, 30, 20 );
		
		g.setColor( Color.blue );
		g.fillOval( 475, 140, 10, 10); //linksboven
		g.fillOval( 518, 140, 10, 10); //rechtsboven
		g.fillOval( 475, 187, 10, 10); //linksonder
		g.fillOval( 518, 187, 10, 10); //rechtsonder
		g.fillOval( 475, 163, 10, 10); //linksmiddenin
		g.fillOval( 518, 163, 10, 10); //rechtsmiddenin
		g.fillOval( 496, 163, 10, 10); //middenin
	}
	public void init() {
		setLayout( null ); // geen standaard layout
		knop = new Button ( "Werp dobbelsteen 1" );	
		knop.setBounds( 440, 250, 120, 30 );
		add( knop );
		
		knop2 = new Button ( "Werp dobbelsteen 2" );
		knop2.setBounds( 640, 250, 120, 30 );
		add( knop2 );
		
		knop3 = new Button ( "Werp dobbelsteen 3" );
		knop3.setBounds( 840, 250, 120, 30 );
		knop3.addActionListener( this );
		add( knop3 );
			
		setBackground( Color.yellow );
	}
	
	public void actionPerformed( ActionEvent e ) {
		if( e.getSource() == knop3 ) {
			g.fillOval( 518, 140, 10, 10); //rechtsboven
			g.fillOval( 496, 163, 10, 10); //middenin
			g.fillOval( 475, 187, 10, 10); //linksonder		
		}
	}
}
 
Oke ik heb het probleem nog niet opgelost.
Maar ik heb even tekstvelden toegevoegd om het aantal ogen daar in getal weer te geven.
Maar hier stuit ik wederom tegen een probleem aan, namelijk alleen het eerste tekstveld werkt.
Hopelijk weet iemand ook dit.
Als dit werkt, dan zou ik misschien de ogen kunnen tekenen.
Op de manier: ALS tekstvak1 = 1 , dan teken 1 oog. (maar ik weet niet hoe ik dit erin moet verwerken)
Hopelijk kan iemand dit uitleggen.
Bij voorbaat dank.

Script:

Code:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Vb08_03 extends Applet
implements ActionListener {
	Button knop, knop2, knop3;
	TextField tekstvak1, tekstvak2, tekstvak3;

	public void paint( Graphics g )
	{
		g.setColor( Color.red );
		g.fillRoundRect( 450, 120, 100, 100, 30, 20 );
		g.fillRoundRect( 650, 120, 100, 100, 30, 20 );
		g.fillRoundRect( 850, 120, 100, 100, 30, 20 );
		
		g.setColor( Color.blue );
		g.fillOval( 475, 140, 10, 10); //linksboven
		g.fillOval( 518, 140, 10, 10); //rechtsboven
		g.fillOval( 475, 187, 10, 10); //linksonder
		g.fillOval( 518, 187, 10, 10); //rechtsonder
		g.fillOval( 475, 163, 10, 10); //linksmiddenin
		g.fillOval( 518, 163, 10, 10); //rechtsmiddenin
		g.fillOval( 496, 163, 10, 10); //middenin
	}
	public void init() {
		setLayout( null ); // geen standaard layout
		knop = new Button ( "Werp dobbelsteen 1" );	
		knop.setBounds( 440, 250, 120, 30 );
		knop.addActionListener( this );
		add( knop );
		
		knop2 = new Button ( "Werp dobbelsteen 2" );
		knop2.setBounds( 640, 250, 120, 30 );
		knop.addActionListener( this );
		add( knop2 );
		
		knop3 = new Button ( "Werp dobbelsteen 3" );
		knop3.setBounds( 840, 250, 120, 30 );
		add( knop3 );
		
		tekstvak1 = new TextField( 12 );
		tekstvak1.setBounds (440, 300, 120, 30 );
		add( tekstvak1 );
		
		tekstvak2 = new TextField ( 12 );
		tekstvak2.setBounds ( 640, 300, 120, 30 );
		add ( tekstvak2 );
		
		tekstvak3 = new TextField (12 );
		tekstvak3.setBounds ( 840, 300, 120, 30);
		add ( tekstvak3 );
			
		setBackground( Color.yellow );
	}
	
	int worp1() {
		double t;
		int aantalOgen1;
		t = Math.random();
		t *= 6;
		t += 1;
		aantalOgen1 = (int) t;
		return aantalOgen1;
	}
	int worp2() {
			double t;
			int aantalOgen2;
			t = Math.random();
			t *= 6;
			t += 1;
			aantalOgen2 = (int) t;
			return aantalOgen2;
	}
	int worp3() {
		double t;
		int aantalOgen3;
		t = Math.random();
		t *= 6;
		t += 1;
		aantalOgen3 = (int) t;
		return aantalOgen3;
	}
	
	
	public void actionPerformed( ActionEvent e ) {
		if( e.getSource() == knop ) {
			int aantalOgen1;
			aantalOgen1 = worp1();
			tekstvak1.setText( "Aantal ogen = " + aantalOgen1 );
		}
		if( e.getSource() == knop2 ) {
			int aantalOgen2;
			aantalOgen2 = worp2();
			tekstvak2.setText( "Aantal ogen = " + aantalOgen2 );
		}
		if( e.getSource() == knop3 ) {
			int aantalOgen3;
			aantalOgen3 = worp3();
			tekstvak3.setText( "Aantal ogen = " + aantalOgen3 );
		}
	}
}
 
Laatst bewerkt:
je code lijkt me wat omslachtig, het lijkt me dat het simpeler moet kunnen. Hier is een applet dat 3 dobbelstenen gooit, de uitslagen van die worpen in een tekstveld zet en vervolgens de dobbelsteentjes tekent, bedoelde je zoiets?

Code:
import java.applet.*;
import java.util.Random;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class DrieDobbelstenen extends Applet implements ActionListener {
	
	private int worp;
	private JTextArea uitkomstVeld;
	private JButton werpKnop;
	private Random dobbelsteen = new Random();
	
	public void init()
	{
		werpKnop = new JButton("werp 3 dobbelstenen");
		werpKnop.addActionListener(this);
		add(werpKnop);
		uitkomstVeld = new JTextArea(1,20);
		add(uitkomstVeld);
	}
	
	public void paint(Graphics g)
	{
		super.paint(g);
		uitkomstVeld.setText("");
		g.drawRoundRect(100,100,50,50,20,20);
		g.drawRoundRect(175,100,50,50,20,20);
		g.drawRoundRect(250,100,50,50,20,20);
		int index = 0;
		int xPos1 = 120;
		int xPos2 = 135;
		int xPos3 = 105;
		while(index < 3)
		{
			worp = bepaalWorp();
			System.out.println(worp);
			uitkomstVeld.append("worp nr" + (index + 1 ) + " was " + worp +", ");
			if(worp == 1 || worp == 3 || worp == 5)
			{
				g.fillOval(xPos1, 120, 10, 10); //4
			}
			if(worp > 1)
			{
				g.fillOval(xPos2, 105, 10, 10); // 3
				g.fillOval(xPos3, 135, 10, 10); // 5
			}
			if(worp > 3)
			{
				g.fillOval(xPos2, 135, 10, 10); // 7
				g.fillOval(xPos3, 105, 10, 10); // 1
			}
			if(worp == 6) {
			g.fillOval(xPos1, 105, 10, 10); // 2
			g.fillOval(xPos1, 135, 10, 10); // 6
			}
			index++;
			xPos1 +=75;
			xPos2 +=75;
			xPos3 +=75;
		}
	}
	public int bepaalWorp()
	{
		return dobbelsteen.nextInt(6) + 1;
	}
	
	public void actionPerformed(ActionEvent e)
	{
		repaint();
	}
}

het ziet er dan zo uit:
DobbelstenenApplet.png
 
Laatst bewerkt:
Stel je maakt dit

PHP:
class Dobelsteen extends Jpanel {
 public Dobelsteen(){
         gui()
 }
 public int werpen(){
    //TODO hierin de random waarde
 }
 public void gui (){
      //TODO   add(new button());
 }
}
en volgende wordt dan
PHP:
class Playground extends JFramel {
 public Playground(){
         gui()
 }
 public int play(){
    //TODO hierin de random waarde
 }
 public void gui (){
      //TODO  generate stuff
 }
}
en dan hoe kan het leven zo simpel zijn .
 
je code lijkt me wat omslachtig, het lijkt me dat het simpeler moet kunnen. Hier is een applet dat 3 dobbelstenen gooit, de uitslagen van die worpen in een tekstveld zet en vervolgens de dobbelsteentjes tekent, bedoelde je zoiets?

Code:
import java.applet.*;
import java.util.Random;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class DrieDobbelstenen extends Applet implements ActionListener {
	
	private int worp;
	private JTextArea uitkomstVeld;
	private JButton werpKnop;
	private Random dobbelsteen = new Random();
	
	public void init()
	{
		werpKnop = new JButton("werp 3 dobbelstenen");
		werpKnop.addActionListener(this);
		add(werpKnop);
		uitkomstVeld = new JTextArea(1,20);
		add(uitkomstVeld);
	}
	
	public void paint(Graphics g)
	{
		super.paint(g);
		uitkomstVeld.setText("");
		g.drawRoundRect(100,100,50,50,20,20);
		g.drawRoundRect(175,100,50,50,20,20);
		g.drawRoundRect(250,100,50,50,20,20);
		int index = 0;
		int xPos1 = 120;
		int xPos2 = 135;
		int xPos3 = 105;
		while(index < 3)
		{
			worp = bepaalWorp();
			System.out.println(worp);
			uitkomstVeld.append("worp nr" + (index + 1 ) + " was " + worp +", ");
			if(worp == 1 || worp == 3 || worp == 5)
			{
				g.fillOval(xPos1, 120, 10, 10); //4
			}
			if(worp > 1)
			{
				g.fillOval(xPos2, 105, 10, 10); // 3
				g.fillOval(xPos3, 135, 10, 10); // 5
			}
			if(worp > 3)
			{
				g.fillOval(xPos2, 135, 10, 10); // 7
				g.fillOval(xPos3, 105, 10, 10); // 1
			}
			if(worp == 6) {
			g.fillOval(xPos1, 105, 10, 10); // 2
			g.fillOval(xPos1, 135, 10, 10); // 6
			}
			index++;
			xPos1 +=75;
			xPos2 +=75;
			xPos3 +=75;
		}
	}
	public int bepaalWorp()
	{
		return dobbelsteen.nextInt(6) + 1;
	}
	
	public void actionPerformed(ActionEvent e)
	{
		repaint();
	}
}

het ziet er dan zo uit:
DobbelstenenApplet.png

Hartstikke bedankt! Toch wil ik graag mijn eigen script aanpassen zodat hij net zo mooi werkt als jouwe.
Hij geeft bij mij nu al het juist getal aan in het tekstveld.
Maar als ik nu dit doe:
if( aantalOgen1 = 1 ) {
g.fillOval( 496, 163, 10, 10); //middenin
}
}

dan werkt het niet.
Hier het hele script:

Code:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Vb08_03 extends Applet
implements ActionListener {
	Button knop, knop2, knop3;
	TextField tekstvak1, tekstvak2, tekstvak3;

	public void paint( Graphics g )
	{
		g.setColor( Color.red );
		g.fillRoundRect( 450, 120, 100, 100, 30, 20 );
		g.fillRoundRect( 650, 120, 100, 100, 30, 20 );
		g.fillRoundRect( 850, 120, 100, 100, 30, 20 );
		
		g.setColor( Color.blue );
		g.fillOval( 475, 140, 10, 10); //linksboven
		g.fillOval( 518, 140, 10, 10); //rechtsboven
		g.fillOval( 475, 187, 10, 10); //linksonder
		g.fillOval( 518, 187, 10, 10); //rechtsonder
		g.fillOval( 475, 163, 10, 10); //linksmiddenin
		g.fillOval( 518, 163, 10, 10); //rechtsmiddenin
		g.fillOval( 496, 163, 10, 10); //middenin
		{
			if( aantalOgen1 = "1" ) {
			g.fillOval( 496, 163, 10, 10); //middenin
			}
			}
	}
	
	public void init() {
		setLayout( null ); // geen standaard layout
		knop = new Button ( "Werp dobbelsteen 1" );	
		knop.setBounds( 440, 250, 120, 30 );
		knop.addActionListener( this );
		add( knop );
		
		knop2 = new Button ( "Werp dobbelsteen 2" );
		knop2.setBounds( 640, 250, 120, 30 );
		knop2.addActionListener( this );
		add( knop2 );
		
		knop3 = new Button ( "Werp dobbelsteen 3" );
		knop3.setBounds( 840, 250, 120, 30 );
		knop3.addActionListener( this );
		add( knop3 );
		
		tekstvak1 = new TextField( 12 );
		tekstvak1.setBounds (440, 300, 120, 30 );
		add( tekstvak1 );
		
		tekstvak2 = new TextField ( 12 );
		tekstvak2.setBounds ( 640, 300, 120, 30 );
		add ( tekstvak2 );
		
		tekstvak3 = new TextField (12 );
		tekstvak3.setBounds ( 840, 300, 120, 30);
		add ( tekstvak3 );
			
		setBackground( Color.yellow );
	}
	
	int worp1() {
		double t;
		int aantalOgen1;
		t = Math.random();
		t *= 6;
		t += 1;
		aantalOgen1 = (int) t;
		return aantalOgen1;
	}
	int worp2() {
			double t;
			int aantalOgen2;
			t = Math.random();
			t *= 6;
			t += 1;
			aantalOgen2 = (int) t;
			return aantalOgen2;
	}
	int worp3() {
		double t;
		int aantalOgen3;
		t = Math.random();
		t *= 6;
		t += 1;
		aantalOgen3 = (int) t;
		return aantalOgen3;
	}
	
	
	public void actionPerformed( ActionEvent e ) {
		if( e.getSource() == knop ) {
			int aantalOgen1;
			aantalOgen1 = worp1();
			tekstvak1.setText( "Aantal ogen = " + aantalOgen1 );
		}
		if( e.getSource() == knop2 ) {
			int aantalOgen2;
			aantalOgen2 = worp2();
			tekstvak2.setText( "Aantal ogen = " + aantalOgen2 );
		}
		if( e.getSource() == knop3 ) {
			int aantalOgen3;
			aantalOgen3 = worp3();
			tekstvak3.setText( "Aantal ogen = " + aantalOgen3 );
		}
	}
}

Weet iemand hoe ik ervoor kan zorgen dat ik het juiste aantal ogen dan wel kan laten tekenen?
Misschien een beetje in dezelfde makkelijk taal als ik het doe, want de rest is denk ik toch te moeilijk voor mij.
Bij voorbaat dank
 
Laatst bewerkt:
Stel je maakt dit

PHP:
class Dobelsteen extends Jpanel {
 public Dobelsteen(){
         gui()
 }
 public int werpen(){
    //TODO hierin de random waarde
 }
 public void gui (){
      //TODO   add(new button());
 }
}
en volgende wordt dan
PHP:
class Playground extends JFramel {
 public Playground(){
         gui()
 }
 public int play(){
    //TODO hierin de random waarde
 }
 public void gui (){
      //TODO  generate stuff
 }
}
en dan hoe kan het leven zo simpel zijn .

Sorry dit kan ik niet helemaal volgen.
Misschien kan je me helpen met me reactie hierboven, volgens mij heb ik een maar een klein foutje.
 
voor het tekenen van de dobbelstenen moet je ervan uitgaan dat er op een dobbelsteen 7 verschillende ogen kunnen staan en dan kun je als er bijvoorbeeld 1, 3 of 5 wordt gegooid stip nummer 4 tekenen, of als er 4, 5 of 6 wordt gegooid stip nummer 7 tekenen.

ogendobbelsteen.png


maar dat is vrij ingewikkeld. je kan natuurlijk ook gewoon een keuzestructuur maken:

Code:
switch(worp)
{
case 1: ; break;// tekenopdracht of methode om de stippen te tekenen die bij het getal 1  horen
case 2: ; break;// zelfde als bij 1
case 3: ; break;//idem
case 4: ; break;//enz
case 5: ; break;//...
case 6: ; break;//...
/*
De verwijzingen naar de methode moet je natuurlijk wel tussen het case: en de puntkomma plaatsen
*/
}

Je code is zo wat omslachtiger, maar wel een stuk duidelijker.

enne, er zit een fout in je code, namelijk:
Code:
(if worp = "1")
{
//teken stip
}

dat is fout, want ten eerste vergelijk je getallen niet met "=" maar met "==". Nu geef je de variabele worp de waarde "1". bovendien staat de 1 tussen aanhalingstekens wat het tot een string maakt, wat niet de bedoeling is(denk ik).
het moet zijn:
Code:
if(worp == 1)
{
//teken stip
}

zo controleer je of de variabele worp de waarde 1 bevat.

bovendien zou ik je aanraden om voor je random getallen niet math te nemen, maar java.util.Random, dat bespaart je wat code.

een methode om een random getal van 1 tot en met 6 te leveren ziet er dan zo uit:
Code:
public int worp1()
{
worp1 = randomgetallenGenerator.nextInt(6) + 1;
return worp1;
}

bovendien zie ik dat je nergens de functie repaint() hebt staan. Als je die niet aanroept wordt er nooit opnieuw getekend. Het enige wat je moet doen is aan het eind van de ActionListener "repaint()" typen.
 
Laatst bewerkt:
Oke dankje. Ik heb je instructies opgevolgd, nu krijg ik dit:

Code:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Vb08_03 extends Applet
implements ActionListener {
	Button knop, knop2, knop3, resetknop;
	TextField tekstvak1, tekstvak2, tekstvak3;

	int worp1() {
		double r;
		int aantalOgen1;
		r = Math.random();// willekeurig getal tussen 0 en 1
		r *= 6; // vermigvuldigen met 6
		r += 1; // 1 bij op tellen
		aantalOgen1 = (int) r; //afkappen geheel getal
		return aantalOgen1;
	}
	int worp2() {
			double w;
			int aantalOgen2;
			w = Math.random();
			w *= 6;
			w += 1;
			aantalOgen2 = (int) w;
			return aantalOgen2;
	}
	int worp3() {
		double t;
		int aantalOgen3;
		t = Math.random();
		t *= 6;
		t += 1;
		aantalOgen3 = (int) t;
		return aantalOgen3;
	}
	
	public void paint( Graphics g )
	{
		g.setColor( Color.red ); //dobbelstenen zijn rood
		g.fillRoundRect( 450, 120, 100, 100, 30, 20 ); //dobbelsteen 1
		g.fillRoundRect( 650, 120, 100, 100, 30, 20 ); //dobbelsteen 2
		g.fillRoundRect( 850, 120, 100, 100, 30, 20 ); //dobbelsteen 3
		
		{
			if(worp1 == 1) {
			g.fillOval( 496, 163, 10, 10); //middenin
			}
			}

	}
	
	public void init() {
		setLayout( null ); // geen standaard layout
		
		resetknop = new Button( "Reset");
		resetknop.setBounds( 640, 50, 120, 30 );
		resetknop.addActionListener( this );
		add( resetknop );
		
		
		knop = new Button ( "Werp dobbelsteen 1" );	
		knop.setBounds( 440, 250, 120, 30 );
		knop.addActionListener( this );
		add( knop );
		
		knop2 = new Button ( "Werp dobbelsteen 2" );
		knop2.setBounds( 640, 250, 120, 30 );
		knop2.addActionListener( this );
		add( knop2 );
		
		knop3 = new Button ( "Werp dobbelsteen 3" );
		knop3.setBounds( 840, 250, 120, 30 );
		knop3.addActionListener( this );
		add( knop3 );
		
		tekstvak1 = new TextField( 12 );
		tekstvak1.setBounds (440, 300, 120, 30 );
		add( tekstvak1 );
		
		tekstvak2 = new TextField ( 12 );
		tekstvak2.setBounds ( 640, 300, 120, 30 );
		add ( tekstvak2 );
		
		tekstvak3 = new TextField (12 );
		tekstvak3.setBounds ( 840, 300, 120, 30);
		add ( tekstvak3 );
			
		setBackground( Color.yellow );
	}
		
	public void actionPerformed( ActionEvent e ) {
		if( e.getSource() == knop ) {
			int aantalOgen1;
			aantalOgen1 = worp1();
			tekstvak1.setText( "Aantal ogen = " + aantalOgen1 );
		}
		if( e.getSource() == knop2 ) {
			int aantalOgen2;
			aantalOgen2 = worp2();
			tekstvak2.setText( "Aantal ogen = " + aantalOgen2 );
		}
		if( e.getSource() == knop3 ) {
			int aantalOgen3;
			aantalOgen3 = worp3();
			tekstvak3.setText( "Aantal ogen = " + aantalOgen3 );
		}
		if( e.getSource() == resetknop ) {
			tekstvak1.setText( "Aantal ogen = " );
			tekstvak2.setText( "Aantal ogen = " );
			tekstvak3.setText( "Aantal ogen = " );
		}
		repaint();
	}

	}
}

Toch werkt hij nog niet. Dit fout melding bij dit stukje is worp1 cannot be resolved.

Code:
			if(worp1 == 1) {
			g.fillOval( 496, 163, 10, 10); //middenin
			}
			}
 
waarschijnlijk heb je dan ergens een logische fout, ik zal es kijken of ik hem kan vinden
 
zou het er misschien aan kunnen liggen dat worp1 een methode is en geen variabele

in dat geval zou je eens het volgende moeten proberen
Code:
if(worp1[B]()[/B] == 1)
{
//statements
}
 
Harstikke bedankt! Dit was de fout. Maar hij tekent nu vaak op verkeerde momenten. Geen idee waarom.
Hij begint ook standaard al met 1 stip. Misschien kun jij het even testen.
Script:

Code:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Vb08_03 extends Applet
implements ActionListener {
	Button knop, knop2, knop3, resetknop;
	TextField tekstvak1, tekstvak2, tekstvak3;

	int worp1() {
		double r;
		int aantalOgen1;
		r = Math.random();// willekeurig getal tussen 0 en 1
		r *= 6; // vermigvuldigen met 6
		r += 1; // 1 bij op tellen
		aantalOgen1 = (int) r; //afkappen geheel getal
		return aantalOgen1;
	}
	int worp2() {
			double w;
			int aantalOgen2;
			w = Math.random();
			w *= 6;
			w += 1;
			aantalOgen2 = (int) w;
			return aantalOgen2;
	}
	int worp3() {
		double t;
		int aantalOgen3;
		t = Math.random();
		t *= 6;
		t += 1;
		aantalOgen3 = (int) t;
		return aantalOgen3;
	}
	
	public void paint( Graphics g )
	{
		g.setColor( Color.red ); //dobbelstenen zijn rood
		g.fillRoundRect( 450, 120, 100, 100, 30, 20 ); //dobbelsteen 1
		g.fillRoundRect( 650, 120, 100, 100, 30, 20 ); //dobbelsteen 2
		g.fillRoundRect( 850, 120, 100, 100, 30, 20 ); //dobbelsteen 3
		
		{
			if(worp1() == 1) {
			g.setColor( Color.green );
			g.fillOval( 496, 163, 10, 10); //middenin
			}
		}
	}
	
	public void init() {
		setLayout( null ); // geen standaard layout
		
		resetknop = new Button( "Reset");
		resetknop.setBounds( 640, 50, 120, 30 );
		resetknop.addActionListener( this );
		add( resetknop );
		
		
		knop = new Button ( "Werp dobbelsteen 1" );	
		knop.setBounds( 440, 250, 120, 30 );
		knop.addActionListener( this );
		add( knop );
		
		knop2 = new Button ( "Werp dobbelsteen 2" );
		knop2.setBounds( 640, 250, 120, 30 );
		knop2.addActionListener( this );
		add( knop2 );
		
		knop3 = new Button ( "Werp dobbelsteen 3" );
		knop3.setBounds( 840, 250, 120, 30 );
		knop3.addActionListener( this );
		add( knop3 );
		
		tekstvak1 = new TextField( 12 );
		tekstvak1.setBounds (440, 300, 120, 30 );
		add( tekstvak1 );
		
		tekstvak2 = new TextField ( 12 );
		tekstvak2.setBounds ( 640, 300, 120, 30 );
		add ( tekstvak2 );
		
		tekstvak3 = new TextField (12 );
		tekstvak3.setBounds ( 840, 300, 120, 30);
		add ( tekstvak3 );
			
		setBackground( Color.yellow );
	}
		
	public void actionPerformed( ActionEvent e ) {
		if( e.getSource() == knop ) {
			int aantalOgen1;
			aantalOgen1 = worp1();
			tekstvak1.setText( "Aantal ogen = " + aantalOgen1 );
		}
		if( e.getSource() == knop2 ) {
			int aantalOgen2;
			aantalOgen2 = worp2();
			tekstvak2.setText( "Aantal ogen = " + aantalOgen2 );
		}
		if( e.getSource() == knop3 ) {
			int aantalOgen3;
			aantalOgen3 = worp3();
			tekstvak3.setText( "Aantal ogen = " + aantalOgen3 );
		}
		if( e.getSource() == resetknop ) {
			tekstvak1.setText( "Aantal ogen = " );
			tekstvak2.setText( "Aantal ogen = " );
			tekstvak3.setText( "Aantal ogen = " );
		}
		repaint();
	}

	}
 
Laatst bewerkt:
dat ie op de 'verkeerde' momenten tekent heeft een hele eenvoudige oorzaak.

als je de grootte van het venster waar het applet in draait aanpast, roept het programma automatisch de methode repaint() aan.

ik zal eens kijken naar je code, er valt vaak wel wat te doen aan dit soort bugs
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan