begin process at 2012 02 09 06:19:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths et Algorithmes

 > GRILLE HEXAGONALE

GRILLE HEXAGONALE




 Description

Ce code affiche une grille hexagonale à l'écran.(300*300)
Lorsque l'on clique sur un hexagone, il donne son numéro.(numéro calculé en fonction de la ligne et de la colonne)
Lorsqu'un hexagone est survolé, il est mit en rouge et en gras.

Cette petite application utilise java2d.

Il est possible de modifier la taille du côté du polygone en changeant la variable de la valeur "cote".
pol contient le dernier polygone survolé.

Source

  • import java.awt.BasicStroke;
  • import java.awt.Color;
  • import java.awt.Graphics;
  • import java.awt.Graphics2D;
  • import java.awt.Point;
  • import java.awt.Polygon;
  • import java.awt.Rectangle;
  • import java.awt.event.MouseAdapter;
  • import java.awt.event.MouseEvent;
  • import java.awt.event.MouseMotionListener;
  • import javax.swing.JFrame;
  • import javax.swing.JOptionPane;
  • import javax.swing.JPanel;
  • /*
  • * Cette classe permet d'utiliser une grille d'hexagone
  • * C'est très très lent puisque chaque segment est redessiné 2 fois !
  • */
  • public class Main {
  • /**
  • * @param args
  • */
  • public static void main(String[] args) {
  • JFrame win=new JFrame(); // Crée la fenetre principale
  • JPanel jp=(JPanel) win.getContentPane(); // Récupère le conteneur de la fenêtre
  • final AffGrille jp2=new AffGrille(); // Crée une instance de la classe privée AffGrille
  • jp2.addMouseMotionListener(new MouseMotionListener(){
  • Polygon p;
  • @Override
  • public void mouseDragged(MouseEvent arg0) {
  • // TODO Auto-generated method stub
  • }
  • @Override
  • public void mouseMoved(MouseEvent arg0) {
  • p=jp2.pol;
  • if(!p.contains(arg0.getPoint())){
  • jp2.repaint();
  • }
  • }
  • });// Repeind jp2 lorsque la souris se déplace
  • jp2.addMouseListener(new MouseAdapter(){
  • @Override
  • public void mouseClicked(MouseEvent arg0) {
  • super.mouseClicked(arg0);
  • JOptionPane.showMessageDialog(null,"Hexagone n°:"+jp2.numero);
  • }
  • });// Evenement qui survient au clicque
  • jp.add(jp2);// Ajoute le composant à la fenêtre
  • win.setSize(640, 480);// Redimensionne la fenetre
  • win.setVisible(true);// Affiche la fenetre
  • win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// Permet de quiter l'application à la fermeture de la fenêtre
  • }
  • }
  • @SuppressWarnings("serial")
  • class AffGrille extends JPanel{ // Classe personnelle qui crée une grile hexagonale.
  • final static int cote=26; // Ceci définit la taille du côté d'un polygone
  • int numero=0; // Retien le n° du polygone sur lequel est la souris
  • Polygon pol;
  • @Override
  • public void paint(Graphics arg0) {
  • Polygon p2=getPolygon(0, 0, cote); // Crée un hexagone
  • Rectangle r=p2.getBounds(); // Récupère le plus petit rectangle // aux bord de la fenêtre dans lequel l'hexagone peut s'inscrire
  • Point hovered=null;
  • arg0.setColor(Color.black);
  • super.paint(arg0);
  • Graphics2D g2d;
  • g2d=(Graphics2D) arg0;
  • BasicStroke bs1=new BasicStroke(1);// Permet de fixer l'épaisseur du trait dans la suite
  • BasicStroke bs3=new BasicStroke(3);// Idem
  • g2d.setStroke(bs1);
  • for(int l=0;l<30;l=l+2){// Remarquer le "+2" car la grille est constituée de 2 sous grilles (les lignes impaires sont décallées)
  • for(int c=0;c<30;c++){
  • Point p;
  • p=getMousePosition();
  • Polygon poly=getPolygon(c*r.width, (int)(l*cote*1.5),cote);
  • if(p!=null && poly.contains(p)){
  • hovered=new Point(c*r.width, (int)(l*cote*1.5));
  • numero=l*10+c;
  • pol=poly;
  • }
  • g2d.draw(poly);
  • }
  • }
  • for(int l=1;l<30;l=l+2){
  • for(int c=0;c<30;c++)
  • {
  • Point p;
  • p=getMousePosition();
  • Polygon poly=getPolygon(c*r.width+r.width/2, (int)(l*cote*1.5+0.5),cote);
  • //arg0.setColor(Color.black);
  • if(p!=null && poly.contains(p)){
  • hovered=new Point(c*r.width+r.width/2, (int)(l*cote*1.5+0.5));
  • numero=l*10+c;
  • pol=poly;
  • }
  • g2d.draw(poly);
  • }
  • }
  • if(hovered!=null){
  • arg0.setColor(Color.red);
  • g2d.setStroke(bs3);
  • Polygon p=getPolygon(hovered.x, hovered.y,cote);
  • g2d.draw(p);
  • }
  • }
  • public Polygon getPolHover(){
  • return pol;
  • }
  • public static Polygon getPolygon(int x,int y,int cote){// Forme le polygone
  • int haut=cote/2;
  • int larg=(int)(cote*(Math.sqrt(3)/2));
  • Polygon p=new Polygon();
  • p.addPoint(x,y+haut);// /
  • p.addPoint(x+larg,y); // \
  • p.addPoint(x+2*larg,y+haut);// |
  • p.addPoint(x+2*larg,y+(int)(1.5*cote)); // /
  • p.addPoint(x+larg,y+2*cote);// \
  • p.addPoint(x,y+(int)(1.5*cote));// |
  • return p;
  • }
  • }
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/*
 * Cette classe permet d'utiliser une grille d'hexagone
 * C'est très très lent puisque chaque segment est redessiné 2 fois !
 */

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		JFrame win=new JFrame(); // Crée la fenetre principale
		JPanel jp=(JPanel) win.getContentPane(); // Récupère le conteneur de la fenêtre
		final AffGrille jp2=new AffGrille(); // Crée une instance de la classe privée AffGrille
		jp2.addMouseMotionListener(new MouseMotionListener(){
			Polygon p;
			@Override
			public void mouseDragged(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void mouseMoved(MouseEvent arg0) {
				p=jp2.pol;
				if(!p.contains(arg0.getPoint())){
					jp2.repaint();
				}
			}
			
			
		});// Repeind jp2 lorsque la souris se déplace
		jp2.addMouseListener(new MouseAdapter(){

			@Override
			public void mouseClicked(MouseEvent arg0) {
				super.mouseClicked(arg0);
				JOptionPane.showMessageDialog(null,"Hexagone n°:"+jp2.numero);
			}
			
		});// Evenement qui survient au clicque
		jp.add(jp2);// Ajoute le composant à la fenêtre
		win.setSize(640, 480);// Redimensionne la fenetre
		win.setVisible(true);// Affiche la fenetre

		win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// Permet de quiter l'application à la fermeture de la fenêtre
	}

}

@SuppressWarnings("serial")
class AffGrille extends JPanel{ // Classe personnelle qui crée une grile hexagonale.
	final static int cote=26; // Ceci définit la taille du côté d'un polygone
	int numero=0; // Retien le n° du polygone sur lequel est la souris
	Polygon pol;
	@Override
	public void paint(Graphics arg0) {
		Polygon p2=getPolygon(0, 0, cote); // Crée un hexagone
		Rectangle r=p2.getBounds(); // Récupère le plus petit rectangle // aux bord de la fenêtre dans lequel l'hexagone peut s'inscrire
		Point hovered=null;
		arg0.setColor(Color.black);
		super.paint(arg0);
		Graphics2D g2d;
		
		
		
		g2d=(Graphics2D) arg0;
		BasicStroke bs1=new BasicStroke(1);// Permet de fixer l'épaisseur du trait dans la suite
		BasicStroke bs3=new BasicStroke(3);// Idem
		
		g2d.setStroke(bs1);

		
		for(int l=0;l<30;l=l+2){// Remarquer le "+2" car la grille est constituée de 2 sous grilles (les lignes impaires sont décallées)
			for(int c=0;c<30;c++){
				Point p;
				p=getMousePosition();
				Polygon poly=getPolygon(c*r.width, (int)(l*cote*1.5),cote);
				if(p!=null && poly.contains(p)){
					hovered=new Point(c*r.width, (int)(l*cote*1.5));
					numero=l*10+c;
					pol=poly;
				}
				g2d.draw(poly);
			}
		}
		for(int l=1;l<30;l=l+2){
			for(int c=0;c<30;c++)
			{
				Point p;
				p=getMousePosition();
				Polygon poly=getPolygon(c*r.width+r.width/2,  (int)(l*cote*1.5+0.5),cote);
				//arg0.setColor(Color.black);
				if(p!=null && poly.contains(p)){
					hovered=new Point(c*r.width+r.width/2,  (int)(l*cote*1.5+0.5));
					numero=l*10+c;
					pol=poly;
				}
				g2d.draw(poly);
			}
		}
		if(hovered!=null){
			arg0.setColor(Color.red);
			g2d.setStroke(bs3);
			Polygon p=getPolygon(hovered.x, hovered.y,cote);
			g2d.draw(p);
		}
	}
	
	public Polygon getPolHover(){
		return pol;
	}

	public static Polygon getPolygon(int x,int y,int cote){// Forme le polygone
		int haut=cote/2;
		int larg=(int)(cote*(Math.sqrt(3)/2));
		Polygon p=new Polygon();
		p.addPoint(x,y+haut);// /
		p.addPoint(x+larg,y); // \
		p.addPoint(x+2*larg,y+haut);// |
		p.addPoint(x+2*larg,y+(int)(1.5*cote)); // /
		p.addPoint(x+larg,y+2*cote);// \
		p.addPoint(x,y+(int)(1.5*cote));// |
		return p;
	}
	

	


}


 Conclusion

Ce code est lent car pour mettre en évidence 1 hexagone, tout est redessiné.
De plus, il donne un faux numéro d'hexagone si l'on clique en dehors de la grille.(pas de contrôle de fait)


 Sources du même auteur

EVALUATION D'UNE EXPRESSION NPI (NOTATION POLONAISE INVERSE)
Source avec Zip DE LOGIQUE DE PROGRAMMATION À JAVA

 Sources de la même categorie

IMPLÉMENTATION DE L'ENSEMBLE C AVEC JAVA par Scupper
CALCUL D'EXPONENTIEL ( PRÉCISION MODIFIABLE) par Scupper
Source avec Zip TRANSFORMATION D'UNE EXPRESSION ARITHMETIQUE (INFIXÉ) EN POS... par billatosco
PROBLÈME DES N-REINES par jojolemariole
Source avec Zip ARRAYMATRIX -MATRICE MULTIDIMENSIONELLE ET GÉNÉRIQUE- , IMP... par labandus

 Sources en rapport avec celle ci

Source avec Zip BLACKBOX SWING ET JAVA2D par GodConan
Source avec Zip CIRCULAIRE par patdimby
LE LABYRINTHE OBSCUR par saikikouli
LE JEU DU SERPENT AFAMÉ par saikikouli
Source avec Zip Source avec une capture POINTS LES PLUS PROCHES par xsimo

Commentaires et avis

Commentaire de Amina21 le 18/03/2008 22:02:41

salut, C'est bien krissssss !!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

probleme Dessin Java2D [ par fdcj ] Bonjour, je souhaite r&#233;aliser un sudoku. Pour l'instant, j'ai cr&#233;&#233; ma grille de jeu avec une JTable mais j'aimerai rajouter par dessus java2D + texture mapping [ par lao_tseu ] bonjour a tous ! Je rencontre quelques difficult&#233;es en java pour&nbsp; mapper une image&nbsp; sur un polygone(quelconque)&nbsp; .... Je voulais Probleme avec mon Timer [ par issoux ] bonsoir,J'ai un probleme avec mon&nbsp;&nbsp;Timer. J'utilise un timer dans un jeu de sudoku .Le prob c'est que j'ai une option qui vide ma grille pou fusion Graphics2D et AffineTransform [ par omcougar ] Bonjour,je joue un peu avec les fonctions 2D et pour ce faire j'ai crée un petit jeu avec des personnagues qui JButton [ par Ombitious_Developper ] Salut:Je développe actuellement une petite application qui utilise une sorte de grille pour afficher des lettres et des chiffres.Pour assurer la persi Aide réalisation d'un projet sudoku [ par iznogoudatall ] Bonjour à tous,J'ai pour mission dans le cadre de ma deuxième année d'IUT informatique de créér un sudoku en java.Malheureusement je bloque sur la cré Besoin d'aide au code Java2D [ par huongthuy ] Bonjour, j'ai besoin d'un code de JAVA pour représenter graphiquement toutes les fonctions par exemple : la fonction linéaire y = ab, la fon Jlabels Dynamiques [ par delphisaltior ] voila en fait l'objectif c'est de placer des labels sur une grille . l'idée étant d'afficher le triangle de pascal a l'ordre nj'ai implémenté une prem problème de rafraichissement d'un canevas [ par dev2008 ] Bonjour, J'ai un problème, en fait je travaille sur un canevas et lorsque l'utilisateur clique sur un bouton, certaines cases de ma grille doivent ch Graphics2D [ par didoux95 ] Bonjour à tous.J'ai créer un Graphics2D (Graphics2D g2d;) comment est ce que je dois l'initialiser ?J'ai essayé en faisant (Graphics2D g2d = null;) ma


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,788 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales