Gå til innhold

Tegne random figurer med random farger


Anbefalte innlegg

Jeg skal lage en klasse med klient prog som skal kunne tegne vilkårlige figurer (sirkel, trekant, firkant etc) med vilkårlige farger. Hvordan skal jeg for eks. sette maks ulikeheter = 15 ? Hvordan blir kodingen? Random funksjon?

 

Trenger all den ekspertise dere kan tilby!

På forhånd takk:D

Lenke til kommentar
Videoannonse
Annonse

Hadde en liknende øving på skolen en gang. Du kan se om det er noe nyttig her. Det er lenge siden så jeg husker ikke akkurat så mye.

 

 

import java.awt.*;

import javax.swing.*;

import java.util.Random;

 

class Vindu extends JFrame{

public Vindu(String tittel){

setTitle(tittel);

setSize(600,600);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Tegning tegningen = new Tegning();

add(tegningen);

}

}

 

class Tegning extends JPanel{

public void paintComponent(Graphics tegneflate){

super.paintComponent(tegneflate);

setBackground(Color.black);

Random tallGen = new Random();

for(int i = 0;i<15;i++){

int figurtype = tallGen.nextInt(3);

int farge = tallGen.nextInt(3);

System.out.println(""+figurtype);

if (farge == 0) {

tegneflate.setColor(Color.yellow);

}

if (farge == 1) {

tegneflate.setColor(Color.red);

}

if (farge == 2) {

tegneflate.setColor(Color.blue);

}

if (figurtype == 0) {

tegneflate.fillArc(tallGen.nextInt(300),tallGen.nextInt(300),tallGen.nextInt(300), tallGen.nextInt(300), tallGen.nextInt(90),tallGen.nextInt(90));

}

if (figurtype == 1) {

 

tegneflate.fillOval(tallGen.nextInt(300), tallGen.nextInt(300), tallGen.nextInt(300), tallGen.nextInt(300));

}

if (figurtype == 2) {

tegneflate.fillRect(tallGen.nextInt(300), tallGen.nextInt(300), tallGen.nextInt(300), tallGen.nextInt(300));

}

 

}

 

}

}

 

class RandomFigur{

public static void main(String[]args){

Vindu vinduet = new Vindu("Tilfeldige figurer med tilfeldig farge");

vinduet.setVisible(true);

}

}

Endret av Mbala
Lenke til kommentar

Hei!

 

Nå er jeg ikke sikker på hva du mener med max ulikheter, kan du uttdype?

Hva koding ellers angår, vil jeg foreslå følgende:

Jeg vil også foreslå at du bruker en figur klasse som inneholder en metode for å tegne den på skjermen. Da vil du enkelt bruke arv til å lage de forskjellige figurene dine. Til slitt vil du måtte lagre en liste over alle figurer og tilhørende farger.

Det er viktig å lagre objektene du skal tegne slik at det blir likt neste gang skjermen skal oppdateres..

Jeg har skrevet litt kjapp kode her som likner på slik jeg ville gjort det..

/** Figur klassen, kan være interface eller abstrakt klasse. */
interface Figur {
 void tegn( Graphics g )
}
/** Eksempel på implementasjon for sirkel: */
class Sirkel implements Figur {
 private int posX, posY;
 private int radius;

 public Sirkel( int x, int y, int r ) {
   posX = x;
   posY = y;
   radius = r;
 }

 public void tegn( Graphics g ) {
   g.fillOval( posX - r, posY - r, posX + r, posY + r );
 }
}

/** Vindus-klassen din.. */
public class Vindu exteds Jxxx {
 private int antall;
 private Figur[] figurer;
 private Color[] farger;

 public Vindu( int antall, ... ) {
   figurer = new Figur[antall];
   farger = new Color[antall];
   this.antall = antall;
   for( int i = 0; i < antall; i++ ) {
     figurer[i] = nyFigur();
     farger[i] = nyFarge();
   }
 }

 /** Genererer en vilkårlig figur. */
 private Figur nyFigur() {
   int type = (int)(Math.random()*15); // Sett at du har 15 figur typer.
   switch( type ) {
   case 0: return new Sirker( ... );
   case 1: return new Firkant( ... );
   ...
   case 15: return new Trekant( ... );
   }
   // Vi ender aldri opp her, men vi trenger å returnere noe..
   return null;
 }

 /** Genererer en vilkårlig farge. Kan eventuelt gjøres som nyFigur(), at man
       returnerer rød for 0 og blå for 2 etc... */
 private Color nyFarge() {
   return new Color( Math.random()*256, Math.random()*256, Math.random()*256 );
 }

 // Når alt dette skal tegnes gjøres det slik:
 void paint( Graphics g ) {
   for( int i = 0; i < antall; i++ ) {
     g.setColor( farger[i] );
     figur[i].tegn( g );
   }
 }
}

 

Du kan eventuelt lagre fargen i figur klassen som følger:

/** Figur klassen. */
class Figur {
 private Color c;
 private Figur( Color c ) {
   this.c = c;
 }
 void tegn( Graphics g ) {
   g.setColor( g );
 }
}
/** Eksempel på implementasjon for sirkel: */
class Sirkel extends Figur {
 private int posX, posY;
 private int radius;

 public Sirkel( int x, int y, int r ) {
   posX = x;
   posY = y;
   radius = r;
 }

 public void tegn( Graphics g ) {
   super( g );
   g.fillOval( posX - r, posY - r, posX + r, posY + r );
 }
}

 

Håper dette hjelper. :thumbup:

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...