|
-
January 26th, 2013, 12:44 PM
#2
Re: How to I put picture buttons inside a hexgrid
Here is my code so far (I use netbeams):
Here is the main class:
package hexagon.project;
import acm.graphics.GRect;
import acm.program.GraphicsProgram;
public class Main extends GraphicsProgram {
@Override
public void init(){
add(new HexMap(13,13,100,100),0,0);
}
Here is the important hexgrid class:
package hexagon.project;
import acm.graphics.GCompound;
import acm.program.GraphicsProgram;
import java.awt.Color;
import java.util.ArrayList;
/**
*
* @author Brian
*/
public class HexMap extends GCompound {
public HexMap(int rows, int cols, int hexWidth, int hexHeight) {
this.rows = rows;
this.cols = cols;
hexmap = new Hexagons[rows][cols];
for (int row = 0; row < rows; ++row) {
for (int col = 0; col < cols; ++col) {
Hexagons hex = new Hexagons(this, rows, cols, hexWidth, hexHeight);
hexmap[row][col] = hex;
add(hex, col * hexWidth + (row % 2 == 1 ? .5 * hexWidth : 0.0), row * hexHeight * .75);
}
}
for (int row = 0; row < rows; ++row) {
for (int col = 0; col < cols; ++col) {
Hexagons hex = hexmap[row][col];
if (row % 2 == 0) {
addNeighbors(hex, row - 1, col, HexDirection.NE);
addNeighbors(hex, row, col + 1, HexDirection.DE);
addNeighbors(hex, row + 1, col, HexDirection.SE);
addNeighbors(hex, row+1, col - 1, HexDirection.SW);
addNeighbors(hex, row, col - 1, HexDirection.DW);
addNeighbors(hex, row - 1, col - 1, HexDirection.NW);
} else {
addNeighbors(hex, row - 1, col+1, HexDirection.NE);
addNeighbors(hex, row, col + 1, HexDirection.DE);
addNeighbors(hex, row + 1, col+1, HexDirection.SE);
addNeighbors(hex, row+1, col, HexDirection.SW);
addNeighbors(hex, row, col - 1, HexDirection.DW);
addNeighbors(hex, row - 1, col, HexDirection.NW);
}
}
}
}
private void addNeighbors(Hexagons theHex,int row, int col, HexDirection dir) {
if (row >= 0 && row < rows && col >= 0 && col < cols) {
theHex.addNeighbors(dir, hexmap[row][col]);
}
}
private Hexagons[][] hexmap;
private int rows;
private int cols;
private Shapes door;
}
This is the Hexagon class(contains shape of hexs):
package hexagon.project;
import acm.graphics.GCompound;
import acm.graphics.GPolygon;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class Hexagons extends GCompound {
public Hexagons(HexMap theMap, int mapRow, int mapCol, int width, int height) {
this.map = theMap;
this.row = mapRow;
this.col = mapCol;
this.width = width;
this.height = height;
this.neighbors=new ArrayList<Hexagons>(6);
for(int i=0;i<6;++i){
neighbors.add(null);
}
GPolygon theHex = new GPolygon();
theHex.addVertex(.5 * width, 0.0); //middle top
theHex.addVertex(width, .25 * height); //right top
theHex.addVertex(width, .75 * height); //right bottom
theHex.addVertex(.5 * width, height); //middle bottom
theHex.addVertex(0.0, .75 * height); //left bottom
theHex.addVertex(0.0, .25 * height); //left top
add(theHex);
this.addMouseListener(new MouseListener(){
@Override
public void mouseClicked(MouseEvent e) {
String message= String.format("Mouse clicked on hex(%d,%d)",row,col);
JOptionPane.showMessageDialog(null,message);
}
@Override
public void mousePressed(MouseEvent me) {
}
@Override
public void mouseReleased(MouseEvent me) {
}
@Override
public void mouseEntered(MouseEvent me) {
}
@Override
public void mouseExited(MouseEvent me) {
}
});
}
public void addNeighbors(HexDirection dir, Hexagons hex){
neighbors.set(dir.getInt(), hex);
}
public Hexagons getNeighbors(HexDirection dir){
return neighbors.get(dir.getInt());
}
private int row;
private int col;
private HexMap map;
private int width;
private int height;
private ArrayList<Hexagons>neighbors;
}
Lastly I have a shape class which have the door, arrow, and bulb images(the code for this class is incomplete:
package hexagon.project;
import acm.graphics.GImage;
public class Shapes {
public Shapes(int width, int height){
GImage door = new GImage("door.bmp");
etc...
}
GImage leftArrow;
GImage rightArrow;
GImage door;
}
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|