1 /***
2 * Redistribution and use in source and binary forms, with or without
3 * modification, are permitted provided that the following conditions are
4 * met :
5 *
6 * . Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 *
9 * . Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * . The name of the author may not be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
25 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $Id: GridDemo.java,v 1.6 2005/09/09 18:24:38 mat007 Exp $
29 */
30
31 package jtge.sample.grid;
32
33 import java.awt.Dimension;
34 import java.awt.Toolkit;
35 import javax.swing.JFrame;
36 import javax.swing.SwingUtilities;
37 import jtge.util.grid.Grid;
38 import jtge.util.grid.IGrid;
39 import jtge.util.grid.builder.FlatHexagonBuilder;
40 import jtge.util.grid.builder.PeakHexagonBuilder;
41 import jtge.util.grid.directiongroup.FlatHexagonDirectionGroup;
42 import jtge.util.grid.directiongroup.FlatShiftedHexagonDirectionGroup;
43 import jtge.util.grid.directiongroup.PeakHexagonDirectionGroup;
44 import jtge.util.grid.directiongroup.PeakShiftedHexagonDirectionGroup;
45
46 /***
47 * Demonstrates the various hexagon grid types handled by jtge.
48 * <p>
49 * This demo opens four windows, each holding a specific type of hexagonal grid.
50 *
51 * @author Jean-Laurent Fabre de Morlhon
52 * @version $Id: GridDemo.java,v 1.6 2005/09/09 18:24:38 mat007 Exp $
53 */
54 public final class GridDemo
55 {
56 /***
57 * The size of the border around each grid in pixels.
58 */
59 private static final int BORDER_SIZE = 5;
60 /***
61 * The width and height of each grid in tiles.
62 */
63 private static final int NUMBER_OF_HEXAGONS = 10;
64 /***
65 * The size of each hexagon (must be odd for better layout).
66 */
67 private static final int HEXAGON_SIDE_LENGTH = 16;
68
69 private GridDemo()
70 {
71 }
72
73 /***
74 * Entry point.
75 *
76 * @param args unused
77 */
78 public static void main( final String[] args )
79 {
80 final JFrame flatFrame = createFlatGridFrame( "Flat Hexagon Grid", false );
81 final JFrame flatShiftedFrame = createFlatGridFrame( "Flat Shifted Hexagon Grid", true );
82 final JFrame peakFrame = createPeakGridFrame( "Peak Hexagon Grid", false );
83 final JFrame peakShiftedFrame = createPeakGridFrame( "Peak Shifted Hexagon Grid", true );
84 final Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
85 final int space = 10;
86 flatFrame.setLocation( dim.width / 2 - space - flatFrame.getWidth(), dim.height / 2 - space
87 - flatFrame.getHeight() );
88 flatShiftedFrame.setLocation( dim.width / 2 + space, dim.height / 2 - space - flatShiftedFrame.getHeight() );
89 peakFrame.setLocation( dim.width / 2 - space - peakFrame.getWidth(), dim.height / 2 + space );
90 peakShiftedFrame.setLocation( dim.width / 2 + space, dim.height / 2 + space );
91 show( flatFrame, flatShiftedFrame, peakFrame, peakShiftedFrame );
92 }
93
94 private static JFrame createFlatGridFrame( final String title, final boolean shifted )
95 {
96 final FlatHexagonBuilder builder = new FlatHexagonBuilder( HEXAGON_SIDE_LENGTH, shifted );
97 final IGrid grid = createFlatGrid( shifted );
98 final HexagonCanvas canvas = new HexagonCanvas( grid, builder, BORDER_SIZE );
99 return new GridFrame( title, canvas );
100 }
101
102 private static IGrid createFlatGrid( final boolean shifted )
103 {
104 if( shifted )
105 return new Grid( NUMBER_OF_HEXAGONS, NUMBER_OF_HEXAGONS, new FlatShiftedHexagonDirectionGroup() );
106 return new Grid( NUMBER_OF_HEXAGONS, NUMBER_OF_HEXAGONS, new FlatHexagonDirectionGroup() );
107 }
108
109 private static JFrame createPeakGridFrame( final String title, final boolean shifted )
110 {
111 final PeakHexagonBuilder builder = new PeakHexagonBuilder( HEXAGON_SIDE_LENGTH, shifted );
112 final IGrid grid = createPeakGrid( shifted );
113 final HexagonCanvas canvas = new HexagonCanvas( grid, builder, BORDER_SIZE );
114 return new GridFrame( title, canvas );
115 }
116
117 private static IGrid createPeakGrid( final boolean shifted )
118 {
119 if( shifted )
120 return new Grid( NUMBER_OF_HEXAGONS, NUMBER_OF_HEXAGONS, new PeakShiftedHexagonDirectionGroup() );
121 return new Grid( NUMBER_OF_HEXAGONS, NUMBER_OF_HEXAGONS, new PeakHexagonDirectionGroup() );
122 }
123
124 private static void show( final JFrame flatFrame, final JFrame flatShiftedFrame, final JFrame peakFrame,
125 final JFrame peakShiftedFrame )
126 {
127 final Runnable showFrame = new Runnable()
128 {
129 public void run()
130 {
131 flatFrame.show();
132 flatShiftedFrame.show();
133 peakFrame.show();
134 peakShiftedFrame.show();
135 }
136 };
137 try
138 {
139 SwingUtilities.invokeLater( showFrame );
140 }
141 catch( Exception e )
142 {
143 System.out.println( e );
144 e.printStackTrace();
145 }
146 }
147 }