2017-10-19 9 views
1

Je suis un débutant complet et j'ai entrepris un petit projet pour utiliser Java en pratique et je suis un peu coincé. J'ai parcouru l'échange de pile mais je ne pouvais pas trouver une bonne explication pour les débutants sur la façon de dessiner des polygones simples dans un certain modèle.Dessiner une carte hexagonale en java

Un point important est que chaque hexagone doit être rempli avec une couleur RVB aléatoire. Cela changera plus tard et les valeurs RVB seront lues à partir de fichiers CSV, mais je ne voulais pas trop compliquer le code avant de comprendre les tuiles.

C'est ce que j'ai jusqu'ici. J'ai besoin d'un hexmap assez grand (200x80) enregistré dans un png plus tard, mais c'est un problème pour un autre jour.

Je réalise que transposer est probablement une façon terrible de le faire, ce que je pense être un certain système qui me permettra de dessiner un polygone à certaines coordonnées x, y que je générerai au besoin.

Ma question est la suivante: est-il viable de dessiner un grand hexagone de 200x80 en utilisant une boucle de transposition ou existe-t-il un meilleur moyen? J'apprécierais de me prendre dans la bonne direction.

int count = 0; 
    super.paintComponent(g);    
    Polygon p = new Polygon(); 
    int hexSize = 100; 
    int sizeA = (hexSize/3)*2; 
    int sizeB = hexSize/3; 


    //hexagon definition 
    for (int i = 0; i < 6; i++) 
     p.addPoint((int) (sizeA + sizeB * Math.cos(i * 2 * Math.PI/6)), 
      (int) (sizeA + sizeB * Math.sin(i * 2 * Math.PI/6)));  

    //painting hexmap 
    while (count<5) { 
     int red = ThreadLocalRandom.current().nextInt(0, 255); 
     int green = ThreadLocalRandom.current().nextInt(0, 255); 
     int blue = ThreadLocalRandom.current().nextInt(0, 255); 
     Color myColor = new Color(red, green, blue); 
     g.setColor(myColor); 
     count++; 
     g.translate(49, 30); 
     g.drawPolygon(p); 
     g.fillPolygon(p); 
    } 
    } 
+0

Et quelle est votre question? – StephaneM

+0

Oh, désolé. Je cherche de l'aide pour dessiner une carte hexadécimale complète de 200x80 de cette manière. J'essaye d'enrouler ma tête autour d'une boucle qui dessinerait des lignes et des colonnes d'hexagones dans un modèle approprié mais sans beaucoup de succès (encore!). –

+0

Qu'est-ce que sizeA? tailleB? –

Répondre

0

J'approche en écrivant une méthode qui dessine un hexagone avec un sommet à un moment donné (x, y) et dans certains c couleur. Ensuite, utilisez une paire de boucles for() imbriquées, avec la boucle externe contrôlant les lignes et les colonnes internes (ou vice versa - fait peu de différence). Vous auriez besoin d'un moyen de calculer les décalages nécessaires pour chaque hexagone étant donné sa rangée et sa colonne; c'est-à-dire, vous auriez besoin d'un moyen de traduire (ligne, colonne) en (x, y). Mais c'est juste de la trigonométrie, et si vous pouvez dessiner un hexagone, vous savez déjà comment faire. Je suis sûr que vous pourriez étendre votre approche existante - en transposant simplement une forme prédéfinie en utilisant des méthodes AWT - mais je pense que ce serait compliqué si on l'étendait à un problème plus complexe. Je suis sûr qu'il existe d'autres façons de résoudre votre problème, mais je trouve que décomposer les choses en morceaux raisonnablement autonomes, idéalement des morceaux qui peuvent être testés et vérifiés pour fonctionner indépendamment, produit de bons résultats pour moi.