Dobbelsteen gooien met java eclipse

Status
Niet open voor verdere reacties.
Oke, maar ik bedoel wel dat hij bijvoorbeeld wanneer er 4 gegooid wordt dat hij dan 1 stip tekent.
En wanneer ik 1 gooi niks tekent.
 
Tja, ik moet er wel bijzeggen dat de opzet van je code heel onhandig is, je kan beter eerst nadenken over de juiste programmeerstrategie en dan pas gaan programmeren. Dan heb je veel minder snel last van logische fouten.
 
Hmm okee. Maar weet je misschien hoe ik het dan wel in mijn script toe moet voegen?
Want het lijkt me toch dat ik gewoon kan programmeren wanneer worp = 1 dan teken 1 oog.
Maar als dit niet werkt. Wil ik ook best wel IF worp1 > 1 dan teken linksonder en linksboven.
Maar denk dat dit dan dezelfde vreemd fout geeft.
Weet jij dan misschien wel, hoe ik wel kan zorgen dat hij de juiste ogen aangeeft? Zonder dat ik mijn hele script moet ombouwen, want tot nu snap ik mijn hele script en heb het zelf gemaakt. Vandaag moet het script klaar zijn trouwens ;) Moet het morgen inleveren :O
Alvast bedankt.
 
Ik heb het nu op een andere manier geprobeerd. Maar hij tekent echt helemaal verkeerd.
Ik snap niet hoe dat kan. Hopelijk weet iemand waarom.
Ik kwam erachter dat wanneer ik op "Gooi dobbelsteen 2" klikte dat dan ook de ogen van dobbelsteen 1 verspringen.
Dus dat klopt ook niet.

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 || worp1() == 3 || worp1() == 5)
			{
			g.setColor( Color.green );
			g.fillOval( 496, 163, 10, 10); //middenin
			}
			if(worp1() > 1)
			{
				g.setColor( Color.green );
				g.fillOval( 518, 140, 10, 10); //rechtsboven
				g.fillOval( 475, 187, 10, 10); //linksonder
			}
			if(worp1() > 3)
			{
				g.setColor( Color.green );
				g.fillOval( 518, 187, 10, 10); //rechtsonder
				g.fillOval( 475, 140, 10, 10); //linksboven
			}
			if(worp1() == 6)
			{
				g.setColor( Color.green );
				g.fillOval( 475, 163, 10, 10); //linksmiddenin
				g.fillOval( 518, 163, 10, 10); //rechtsmiddenin
			}

		}
	}
	
	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:
als je op dobbelsteen 2 klikt de dobbelsteen bij 1 verspringt komt omdat je dan gewoon de methode repaint() aanroept en dan gaat ie gewoon een dobbelsteentje tekenen. Op positie 1 welteverstaan :P. dit zou je kunnen voorkomen door de X positie variabel te maken, zodat de x positie, als er op knop 1 gedrukt wordt, de x waarde krijgt die er bij de eerste dobbelsteen horen.
voor 2 en 3 geldt dan het zelfde.

bijvoorbeeld zo:
Code:
public void paint(Graphics g)
{
if(worp == 1 || worp == 3 || worp == 5)
{
    g.fillOval([B]xPos[/B], yPos, breedte, hoogte); // tekenopdracht die een stip tekent, behorende bij de knop waar zojuist is op 
    // gedrukt
}
}

public void actionPerformed(ActionEvent e)
{
    if(e.getSource() == knop1)
{
         xPos = 120; // de x positie wordt zo aangepast dat de dobbelsteen op de juiste plek bij knop1 wordt getekend
}
 
Dan zegt hij xpos cannot be resolved.
Kun je het misschien voor me in het script proberen? Want ik krijg het gewoon niet aan de praat.
 
Ik probeer nu aan het script wat wel werkte een reset knop toe te voegen. Aangezien ik bij deze vast blijf zitten.
Maar in plaats van dat de knop reset, gaat hij gewoon gooien :P Geen idee waarom

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 {
	
	int worp;
	JTextArea uitkomstVeld;
	JButton werpKnop;
	Random dobbelsteen = new Random();
	JButton resetKnop;
	
	public void init()
	{
		werpKnop = new JButton("Werp 3 dobbelstenen");
		werpKnop.addActionListener(this);
		add(werpKnop);
		uitkomstVeld = new JTextArea(1,20);
		add(uitkomstVeld);
		resetKnop = new JButton("Reset");
		resetKnop.addActionListener(this);
		add(resetKnop);
	}
	
	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)
	{
		if( e.getSource() == resetKnop ) {
			uitkomstVeld.setText( "Waarden gereset" );
		}
	{
		repaint();
	}
	
	}
}
 
dat ie alsnog tekent komt omdat de repaint() methode sowieso wordt uitgevoerd, of je nou op de resetknop drukt of op een andere.

zo is dat opgelost:
Code:
if(e.getSource() != resetKnop)
{
       repaint();
}

dat hij verkeerd tekent komt omdat er voor de stippen 3 verschillende x posities kunnen zijn. je moet dus ook 3 variabelen daarvoor aanmaken. als je eenmaal alle x posities in variabelen hebt opgeslagen, dan kan je er een vaste waarde bij gaan optellen, afhankelijk op welke knop er gedrukt wordt.

trouwens, is het de bedoeling dat er maar 1 dobbelsteen tegelijk gegooid wordt, of moet een eerder gegooide dobbelsteen blijven staan?
 
dat ie alsnog tekent komt omdat de repaint() methode sowieso wordt uitgevoerd, of je nou op de resetknop drukt of op een andere.

zo is dat opgelost:
Code:
if(e.getSource() != resetKnop)
{
       repaint();
}

dat hij verkeerd tekent komt omdat er voor de stippen 3 verschillende x posities kunnen zijn. je moet dus ook 3 variabelen daarvoor aanmaken. als je eenmaal alle x posities in variabelen hebt opgeslagen, dan kan je er een vaste waarde bij gaan optellen, afhankelijk op welke knop er gedrukt wordt.

trouwens, is het de bedoeling dat er maar 1 dobbelsteen tegelijk gegooid wordt, of moet een eerder gegooide dobbelsteen blijven staan?

Nou het zou misschien wel mooi zijn als er onder elke dobbelsteen ook een knop zat met Gooi deze dobbelsteen.
Maar hier heb ik geen tijd meer voor denk ik :( Morgen moet het klaar zijn.
Bedankt nu werkt de reset knop voor de tekst ! :D Alleen de ogen zijn nog niet gereset :(
Ik dacht dat dat automatisch mee zou gaan. Weet je misschien hoe ik dat moet doen?
 
heel simpel, zo:

Code:
if(e.getSource() == resetKnop)
{
        uitkomstveld.setText(" ");
        index = 4; // mag ook iets anders zijn, als ie de herhaling maar niet gaat uitvoeren en dus niet tekent
}

dan moet je ook aan het eind van je paint methode dit zetten
Code:
index = 0;// dan doet ie het wel als je weer op de werpknop drukt


en dan nog iets, ik zag dat je bepaalde delen letterlijk uit mijn code had overgenomen, dat is natuurlijk niet de bedoeling, het gaat er uiteindelijk om dat jij Java leert:thumb:
 
Ben ik helemaal met je eens. Daarom wou ik dat andere script ook gebruiken. Maar daar kwam ik vast te zitten.
Toen ging ik dit script nog eens bekijken en volgens mij snap ik hem wel.
Maar bij index = 4 zegt hij index cannot be resolved.

Ik heb het zo gedaan:

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

public class DrieDobbelstenen extends Applet implements ActionListener {

int worp;
JTextArea uitkomstVeld;
JButton werpKnop;
Random dobbelsteen = new Random();
JButton resetKnop;

public void init()
{
werpKnop = new JButton("Werp 3 dobbelstenen");
werpKnop.addActionListener(this);
add(werpKnop);
uitkomstVeld = new JTextArea(1,20);
add(uitkomstVeld);
resetKnop = new JButton("Reset");
resetKnop.addActionListener(this);
add(resetKnop);

setBackground( Color.yellow );
}

public void paint(Graphics g)
{
index = 0;// dan doet ie het wel als je weer op de werpknop drukt
super.paint(g);
uitkomstVeld.setText("");
g.setColor(Color. white );
g.fillRoundRect(600,100,50,50,20,20);
g.fillRoundRect(675,100,50,50,20,20);
g.fillRoundRect(750,100,50,50,20,20);
int index = 0;
int xPos1 = 620;
int xPos2 = 635;
int xPos3 = 605;
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.setColor(Color.black);
g.fillOval(xPos1, 120, 10, 10); //4
}
if(worp > 1)
{
g.setColor(Color.black);
g.fillOval(xPos2, 105, 10, 10); // 3
g.fillOval(xPos3, 135, 10, 10); // 5
}
if(worp > 3)
{
g.setColor(Color.black);
g.fillOval(xPos2, 135, 10, 10); // 7
g.fillOval(xPos3, 105, 10, 10); // 1
}
if(worp == 6)
{
g.setColor(Color.black);
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)
{
if( e.getSource() == resetKnop ) {
uitkomstVeld.setText( "Waarden gereset" );
index = 4; // mag ook iets anders zijn, als ie de herhaling maar niet gaat uitvoeren en dus niet tekent

}
if(e.getSource() != resetKnop)
{
repaint();
}
}

}
 
Laatst bewerkt:
je moet de declaratie van de variabele index helemaal naar het begin van de code verplaatsen, bij je TextField enz...
en het index = 0 moet pas NA de 'while' loop
 
Wat bedoel je met variabele index?
Dat moet dus bij het stukje public void init?
Oke, index = 0; heb ik helemaal aan eind van paint gezet. Index = 4 ook op juiste plaats.
Maar nu nog die variabele dus.
 
gewoon, dat je de de int index = 0; verplaatst naar het begin van de klasse.

en vergeten te zeggen, je moet de if-structuur die om je repaint() staat even weghalen ;)
 
Laatst bewerkt:
Bedoel je zo? Hij geeft geen fouten aan. Maar als ik hem run gaat het helemaal fout.
Ik zie geen dobbelstenen meer en kan nergens meer op klikken :(

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 {
	
	int index = 0;
	int worp;
	JTextArea uitkomstVeld;
	JButton werpKnop;
	Random dobbelsteen = new Random();
	JButton resetKnop;
	
	public void init()
	{
		werpKnop = new JButton("Werp 3 dobbelstenen");
		werpKnop.addActionListener(this);
		add(werpKnop);
		uitkomstVeld = new JTextArea(1,20);
		add(uitkomstVeld);
		resetKnop = new JButton("Reset");
		resetKnop.addActionListener(this);
		add(resetKnop);
		setBackground( Color.yellow );
	}
	
	public void paint(Graphics g)
	{

		super.paint(g);
		uitkomstVeld.setText("");
		g.setColor(Color. white );
		g.fillRoundRect(600,100,50,50,20,20);
		g.fillRoundRect(675,100,50,50,20,20);
		g.fillRoundRect(750,100,50,50,20,20);
		int xPos1 = 620;
		int xPos2 = 635;
		int xPos3 = 605;
		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.setColor(Color.black);
				g.fillOval(xPos1, 120, 10, 10); //4
			}
			if(worp > 1)
			{
				g.setColor(Color.black);
				g.fillOval(xPos2, 105, 10, 10); // 3
				g.fillOval(xPos3, 135, 10, 10); // 5
			}
			if(worp > 3)
			{
				g.setColor(Color.black);
				g.fillOval(xPos2, 135, 10, 10); // 7
				g.fillOval(xPos3, 105, 10, 10); // 1
			}
			if(worp == 6)
			{
			g.setColor(Color.black);
			g.fillOval(xPos1, 105, 10, 10); // 2
			g.fillOval(xPos1, 135, 10, 10); // 6
			}
			index++;
			xPos1 +=75;
			xPos2 +=75;
			xPos3 +=75;
			
			index = 0;
			
		}
	}
	public int bepaalWorp()
	{
		return dobbelsteen.nextInt(6) + 1;
	}
	
	public void actionPerformed(ActionEvent e)
	{
		if( e.getSource() == resetKnop ) {
			uitkomstVeld.setText( "Waarden gereset" );
			index = 4;

		}
		if(e.getSource() != resetKnop)
		{
		       repaint();
		}
	}
	
	}
 
pff, dit wordt toch lastiger dan ik dacht

vreemd genoeg heb ik op mijn computer een perfect werkende code staan :(
 
Huh dezelfde als mij? En die van jou werkt wel? :|
Edit: Beetje aangepast nu werkt alles wel weer. Alleen reset van de ogen werkt nog steeds niet.

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 {
	
	int index = 0;
	int worp;
	JTextArea uitkomstVeld;
	JButton werpKnop;
	Random dobbelsteen = new Random();
	JButton resetKnop;
	
	public void init()
	{
		werpKnop = new JButton("Werp 3 dobbelstenen");
		werpKnop.addActionListener(this);
		add(werpKnop);
		uitkomstVeld = new JTextArea(1,20);
		add(uitkomstVeld);
		resetKnop = new JButton("Reset");
		resetKnop.addActionListener(this);
		add(resetKnop);
		setBackground( Color.yellow );
	}
	
	public void paint(Graphics g)
	{

		super.paint(g);
		uitkomstVeld.setText("");
		g.setColor(Color. white );
		g.fillRoundRect(600,100,50,50,20,20);
		g.fillRoundRect(675,100,50,50,20,20);
		g.fillRoundRect(750,100,50,50,20,20);
		index = 0;
		int xPos1 = 620;
		int xPos2 = 635;
		int xPos3 = 605;
		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.setColor(Color.black);
				g.fillOval(xPos1, 120, 10, 10); //4
			}
			if(worp > 1)
			{
				g.setColor(Color.black);
				g.fillOval(xPos2, 105, 10, 10); // 3
				g.fillOval(xPos3, 135, 10, 10); // 5
			}
			if(worp > 3)
			{
				g.setColor(Color.black);
				g.fillOval(xPos2, 135, 10, 10); // 7
				g.fillOval(xPos3, 105, 10, 10); // 1
			}
			if(worp == 6)
			{
			g.setColor(Color.black);
			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)
	{
		if( e.getSource() == resetKnop ) {
			uitkomstVeld.setText( "Waarden gereset" );
			index = 4;

		}
		if(e.getSource() != resetKnop)
		{
		       repaint();
		}
	}
	
	}
 
Laatst bewerkt:
Huh dezelfde als mij? En die van jou werkt wel? :|
nee, een nieuwe die ik had geschreven, met 3 dobbelstenen, 3 knoppen en 3 tekstvelden

zo ziet het eruit

Afbeelding%251.png


EDIT: resetknop toegevoegd
 
Laatst bewerkt:
Oke ziet er mooi uit!
Ik laat het hier bij.
Harstikke bedankt voor je hulp!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan