Random kleur uit een enum halen en kunnen verwerken

Status
Niet open voor verdere reacties.

sjiht1

Nieuwe gebruiker
Lid geworden
13 jul 2011
Berichten
1
Beste,

Ik ben bezig met een spelletje dat we moeten maken voor school (herexamen :/) in java...
De bedoeling van het spel is even niet belangrijk maar waar ik op het moment vast zit is bij het gebruik en van een enum..

Mijn enum ziet er zo uit:

Code:
public enum Kleur
{
    rood,
    groen,
    blauw;
}

Hieruit moet ik een willekeurige kleur halen en naargelang welke kleur ik eruit haal moet ik een bolletje (dat een druppel voorstelt) kleuren in die kleur met een waarde tussen 5 en 50.
Bijvoorbeeld:
Ik haal rood uit de enum; ik moet dan een waarde tussen 5 en 50 aan de integer r geven: ik neem 30. (ook willekeurig) Dus nu ga ik het bolletje kleuren in (30,0,0) (r,g,b).

Hetgene wat ik had gevonden op sites (maar het werkt blijkbaar niet? of ik ben er niet slim genoeg voor :p):

http://stackoverflow.com/questions/1972392/java-pick-a-random-value-from-an-enum
http://download.oracle.com/javase/1,5.0/docs/guide/language/enums.html

Heb al vanalles geprobeert en heb er al 2 dagen aan verloren door hierover info te zoeken e.d. .. ! Kan iemand me aub helpen?

Mvg
 
Misschien dat ik de opdracht niet begrijp, maar is dit niet de omgekeerde wereld? Een enum is een manier om via text een waarde te benaderen. Moet de random onderdeel zijn van de enum?

In de door je aangegeven link wordt gebruik gemaakt van shuffle om een enum een random volgorde te geven. Dit kun je zelf benutten door een shuffle en vervolgens element 1 te pakken
 
Beste sjiht,

Ik vind dit een vreemde opdracht om dezelfde reden als wampier zegt, maar ik heb voortgeborduurd op jouw uitleg.

Als tip kan ik je meegeven: kijk even naar de .values() methode.
voorbeeld: http://www.java2s.com/Code/JavaAPI/java.lang/Enumvalues.htm

Op de uitkomst kan je dan de .name() methode uitvoeren deze geeft je de naam van de enum-waarde.

Daarna kan je een if-lusje maken zodat indien het bijv. rood is je daar de Color.red.getRGB() methode uitvoert. Deze geeft de RGB waarde terug. Met deze waarde valt dan een kleur te maken. (new Color(RGBWaarde))

Ik had wat tijd over dus ik heb een stukje voor je uitgecodeerd. Het kan wel netter, maar het is nog vroeg;)

Code:
import javax.swing.JFrame;

public class Spelletje {
	
	public Spelletje() {
		
	}
	
	public static void main(String args[]) {
		JFrame frame = new JFrame();
		frame.setSize(300, 400);
		frame.setContentPane(new BolletjePaneel());
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
	
	
	
	
	
}

Code:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

public class BolletjePaneel extends JPanel {

	public BolletjePaneel() {
	}
	
	private String bepaalRandomKleur() {
		int randomGetal = (int)(Math.random() * Kleur.values().length); //Math.random genereert een getal tussen 0.0 en de lengte van Kleur.values (double) dit keer 2 + 1 is een getal tussen 0 en 2).
		return Kleur.values()[randomGetal].name();
	}
	
	private int bepaalRGBWaarde(String kleur) {
		if(kleur == "rood") {
			return Color.red.getRGB();
		}else if(kleur == "groen") {
			return Color.green.getRGB();
		}else { 
			return Color.blue.getRGB();
		}
	}
	
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		String kleur = bepaalRandomKleur();
		int rgbWaarde = bepaalRGBWaarde(kleur);
		g.setColor(new Color(rgbWaarde));
		g.fillOval(100, 150, 40, 40);
		
	}
	
}

Code:
public enum Kleur {
	rood,
	blauw,
	groen;
	
	Kleur() {}
}

De code is uitvoerbaar en doet volgens mij ongeveer wat je wilt hebben.

Met vriendelijke groet,
NewbiProgrammer
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan