Désolé, un débutant complet à Java. J'ai déjà fait une grille carrée, pour un jeu de dames, mais j'ai des problèmes avec une grille hexagonale. J'ai suivi la même idée avec la grille carrée, j'ai de petits points sur mon JPanel, bien que je ne sois pas sûr de la raison de cela, j'ai regardé autour de moi et j'ai essayé de voir ce qui pouvait être faux.JPanel n'affiche pas les composants? (Hexagon Grid)
GameBoard.java; responsable de l'élaboration hexagones
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Collections;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
//import CheckerBoard.GameSquareMouseListener;
public class GameBoard extends JPanel {
protected final static int size = 8;
protected final static int radius = 50;
protected final static int padding = 5;
private Position oldPosition = null;
public GameBoard(){
super();
int numPieceSpots = 0;
int x = 0; int y = 0;
int xOff = (int) Math.cos(Math.toRadians(30)) * (radius + padding);
int yOff = (int) Math.sin(Math.toRadians(30)) * (radius + padding);
int half = size/2;
GameHexagon hex = null;
for (int r = 0; r < size; r++){
for (int c = 0; c < size; c++)
{
if (((r + c) % 2 == 0) && (r % 2 == 1)){
hex = new GameHexagon(r, c, x, y);
}
else if (((r + c) % 2 == 0) && (r % 2 == 0))
{
hex = new GameHexagon(r, c, x, y);
}
else {
hex = new GameHexagon(r, c, x, y);
}
if (c == (size - 1)){
x = 0;
y += yOff;
}
add (hex);
x += xOff*c;
}
}
repaint();
}
}
GameHexagon.java; les éléments hexagonaux à tirer sur la carte
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JComponent;
public class GameHexagon extends JComponent
{
private int x;
private int y;
private Position pos = null;
//private GamePiece piece = null;
public GameHexagon (int row, int col, int xp, int yp)
{
super();
pos = new Position (row, col);
x = xp;
y = yp;
}
public void paintComponent (Graphics g)
{
super.paintComponents (g);
Graphics2D g2 = (Graphics2D) g;
int height = getHeight();
int width = getWidth();
//Rectangle2D.Double bkgnd = new Rectangle2D.Double (x, y, width, height);
Hexagon bkgnd = new Hexagon(x, y, pos.r, pos.c, 50);
bkgnd.draw(g2, x, y, 2, true);
g.setColor(new Color(0xFFFFFF));
g.drawString("TEST", x - 25, y + 25);
}
}
Hexagon.java; responsable de dessiner les hexagones Ce code que j'ai reçu d'un programmeur sur stackoverflow avec des modifications mineures, et je l'ai essayé moi-même et cela a fonctionné, cependant, je l'ai parcouru et je ne sais pas ce qui ne va pas. Faire.
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Hexagon extends Polygon {
private static final long serialVersionUID = 1L;
public static final int SIDES = 6;
private Point[] points = new Point[SIDES];
private Point center = new Point(0, 0);
private int radius;
private int rotation = 90;
public Hexagon(Point center, int xlabel, int ylabel, int radius) {
npoints = SIDES;
xpoints = new int[SIDES];
ypoints = new int[SIDES];
this.center = center;
this.radius = radius;
updatePoints();
}
public Hexagon(int x, int y, int xlabel, int ylabel, int radius) {
this(new Point(x, y), xlabel, ylabel, radius);
}
public int getRadius() {
return radius;
}
public void setRadius(int radius) {
this.radius = radius;
updatePoints();
}
public int getRotation() {
return rotation;
}
public void setRotation(int rotation) {
this.rotation = rotation;
updatePoints();
}
public void setCenter(Point center) {
this.center = center;
updatePoints();
}
public void setCenter(int x, int y) {
setCenter(new Point(x, y));
}
private double findAngle(double fraction) {
return fraction * Math.PI * 2 + Math.toRadians((rotation + 180) % 360);
}
private Point findPoint(double angle) {
int x = (int) (center.x + Math.cos(angle) * radius);
int y = (int) (center.y + Math.sin(angle) * radius);
return new Point(x, y);
}
protected void updatePoints() {
for (int p = 0; p < SIDES; p++) {
double angle = findAngle((double) p/SIDES);
Point point = findPoint(angle);
xpoints[p] = point.x;
ypoints[p] = point.y;
points[p] = point;
}
}
public void draw(Graphics2D g, int x, int y, int lineThickness, boolean border) {
// Store before changing.
Stroke tmpS = g.getStroke();
Color tmpC = g.getColor();
g.setStroke(new BasicStroke(lineThickness, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER));
if (border)
g.fillPolygon(xpoints, ypoints, npoints);
else
g.drawPolygon(xpoints, ypoints, npoints);
// Set values to previous when done.
g.setColor(tmpC);
g.setStroke(tmpS);
}
}
GameTest.java; fichiers de test pour ajouter conseil sur JFrame
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
/**
A program that allows users to edit a scene composed
of items.
*/
public class GameTest
{
public static void main(String[] args) {
JFrame f = new JFrame();
GameBoard p = new GameBoard();
f.add (p, BorderLayout.CENTER);
f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
f.setSize (600, 600);
f.setVisible (true);
}
}
Je pourrais utiliser une place de grille pour jeter les icônes hexagonales, mais défaites le but parce que je veux la grille pour aligner les uns aux autres
*-*-*-*-*
-*-*-*-*-
*-*-*-*-*
ou quelque chose de similaire
Utilisé une taille de 2 dans cette ] 1
c'est le code complet? C'est tout le code que j'ai utilisé –
vous avez beaucoup de défauts sérieux: bkgnd.draw (g2, x, y, 2, true); le x y n'a aucune pertinence à l'intérieur de cette méthode ... si vous êtes un débutant complet, que faites-vous avec un monstre compliqué? – gpasch
Pas sûr moi-même, je pensais que je l'essayerais comme un projet. Et j'ai supposé que x et y seront définis une fois que je construirai un GameHexagon (ligne, col, x, y, vrai). Et dans le composant, il dessine avec bkgnd.draw (g2, x, y, 2, true). –