diff options
author | Starla Insigna <hatkirby@fourisland.com> | 2012-06-02 16:12:21 -0400 |
---|---|---|
committer | Starla Insigna <hatkirby@fourisland.com> | 2012-06-02 16:12:21 -0400 |
commit | dd6b3c43d2a60f2aa8887b782ed8e19b28f11845 (patch) | |
tree | d3c7851aa8533a94881d536a8cef8dbb4072e47b /src/com/fourisland | |
parent | 73d3739ac1b4357eab40d730bad2953185276760 (diff) | |
download | frigidearth-dd6b3c43d2a60f2aa8887b782ed8e19b28f11845.tar.gz frigidearth-dd6b3c43d2a60f2aa8887b782ed8e19b28f11845.tar.bz2 frigidearth-dd6b3c43d2a60f2aa8887b782ed8e19b28f11845.zip |
Created GameState mechanism
I'm using a rendering system based off of FourPuzzle's, but less ugly. This one comes with built in variable window size, so the last commit was a bit unnecessary. TileGameState is just a dummy that does what the last commit did: display randomly colored tiles. 320x240 for game size is also just a placeholder for now.
Diffstat (limited to 'src/com/fourisland')
-rw-r--r-- | src/com/fourisland/frigidearth/GameState.java | 14 | ||||
-rw-r--r-- | src/com/fourisland/frigidearth/Main.java | 119 | ||||
-rw-r--r-- | src/com/fourisland/frigidearth/Renderable.java | 16 | ||||
-rw-r--r-- | src/com/fourisland/frigidearth/TileGameState.java | 54 |
4 files changed, 152 insertions, 51 deletions
diff --git a/src/com/fourisland/frigidearth/GameState.java b/src/com/fourisland/frigidearth/GameState.java new file mode 100644 index 0000000..335760a --- /dev/null +++ b/src/com/fourisland/frigidearth/GameState.java | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * To change this template, choose Tools | Templates | ||
3 | * and open the template in the editor. | ||
4 | */ | ||
5 | package com.fourisland.frigidearth; | ||
6 | |||
7 | /** | ||
8 | * | ||
9 | * @author hatkirby | ||
10 | */ | ||
11 | public interface GameState extends Renderable | ||
12 | { | ||
13 | public void tick(); | ||
14 | } | ||
diff --git a/src/com/fourisland/frigidearth/Main.java b/src/com/fourisland/frigidearth/Main.java index 2e320cc..ab4b8b6 100644 --- a/src/com/fourisland/frigidearth/Main.java +++ b/src/com/fourisland/frigidearth/Main.java | |||
@@ -4,11 +4,19 @@ | |||
4 | */ | 4 | */ |
5 | package com.fourisland.frigidearth; | 5 | package com.fourisland.frigidearth; |
6 | 6 | ||
7 | import java.awt.Canvas; | ||
7 | import java.awt.Color; | 8 | import java.awt.Color; |
8 | import java.awt.Graphics; | 9 | import java.awt.Graphics; |
9 | import java.awt.event.ComponentAdapter; | 10 | import java.awt.Graphics2D; |
10 | import java.awt.event.ComponentEvent; | 11 | import java.awt.GraphicsConfiguration; |
11 | import java.util.Random; | 12 | import java.awt.GraphicsDevice; |
13 | import java.awt.GraphicsEnvironment; | ||
14 | import java.awt.Toolkit; | ||
15 | import java.awt.Transparency; | ||
16 | import java.awt.image.BufferStrategy; | ||
17 | import java.awt.image.BufferedImage; | ||
18 | import java.util.List; | ||
19 | import java.util.concurrent.CopyOnWriteArrayList; | ||
12 | import javax.swing.JFrame; | 20 | import javax.swing.JFrame; |
13 | 21 | ||
14 | /** | 22 | /** |
@@ -17,75 +25,84 @@ import javax.swing.JFrame; | |||
17 | */ | 25 | */ |
18 | public class Main | 26 | public class Main |
19 | { | 27 | { |
20 | static final int GAME_WIDTH = 15; | 28 | static final int GAME_WIDTH = 320; |
21 | static final int GAME_HEIGHT = 10; | 29 | static final int GAME_HEIGHT = 240; |
22 | static int TILE_WIDTH = 32; | ||
23 | static int TILE_HEIGHT = 32; | ||
24 | 30 | ||
25 | private static JFrame mainWindow; | 31 | private static JFrame mainWindow; |
26 | private static Color[][] grid; | 32 | private static Color[][] grid; |
27 | private static int drawOffsetX = 0; | 33 | private static int drawOffsetX = 0; |
28 | private static int drawOffsetY = 0; | 34 | private static int drawOffsetY = 0; |
35 | private static Canvas gameCanvas; | ||
36 | private static List<Renderable> renderables = new CopyOnWriteArrayList<Renderable>(); | ||
37 | private static GameState gameState; | ||
29 | 38 | ||
30 | public static void main(String[] args) | 39 | public static void main(String[] args) |
31 | { | 40 | { |
32 | mainWindow = new JFrame("Frigid Earth"); | 41 | gameCanvas = new Canvas(); |
33 | mainWindow.setSize(GAME_WIDTH*TILE_WIDTH, GAME_HEIGHT*TILE_HEIGHT + mainWindow.getInsets().top); | 42 | |
43 | mainWindow = new JFrame(); | ||
44 | mainWindow.setTitle("Frigid Earth"); | ||
45 | mainWindow.setSize(GAME_WIDTH*2, GAME_HEIGHT*2); | ||
46 | mainWindow.setLocation(GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint().x-GAME_WIDTH, GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint().y-GAME_HEIGHT); | ||
34 | mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | 47 | mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
35 | mainWindow.addComponentListener(new ComponentAdapter() { | 48 | mainWindow.add(gameCanvas); |
36 | @Override | ||
37 | public void componentResized(ComponentEvent ce) | ||
38 | { | ||
39 | drawOffsetX = 0; | ||
40 | drawOffsetY = 0; | ||
41 | |||
42 | TILE_WIDTH = mainWindow.getContentPane().getWidth() / GAME_WIDTH; | ||
43 | drawOffsetX = mainWindow.getWidth() % GAME_WIDTH / 2; | ||
44 | TILE_HEIGHT = mainWindow.getContentPane().getHeight() / GAME_HEIGHT; | ||
45 | drawOffsetY = mainWindow.getHeight() % GAME_HEIGHT / 2; | ||
46 | |||
47 | if (TILE_WIDTH > TILE_HEIGHT) | ||
48 | { | ||
49 | TILE_WIDTH = TILE_HEIGHT; | ||
50 | drawOffsetX = (mainWindow.getContentPane().getWidth() - (GAME_WIDTH * TILE_WIDTH)) / 2; | ||
51 | } else if (TILE_HEIGHT > TILE_WIDTH) | ||
52 | { | ||
53 | TILE_HEIGHT = TILE_WIDTH; | ||
54 | drawOffsetY = (mainWindow.getContentPane().getHeight() - (GAME_HEIGHT * TILE_HEIGHT)) / 2; | ||
55 | } | ||
56 | |||
57 | redrawScreen(); | ||
58 | } | ||
59 | }); | ||
60 | mainWindow.setVisible(true); | 49 | mainWindow.setVisible(true); |
61 | 50 | ||
62 | Random r = new Random(); | 51 | gameCanvas.createBufferStrategy(2); |
63 | grid = new Color[GAME_WIDTH][GAME_HEIGHT]; | 52 | |
53 | gameState = new TileGameState(); | ||
54 | renderables.add(gameState); | ||
64 | 55 | ||
65 | for (int x=0; x<GAME_WIDTH; x++) | 56 | gameState.tick(); |
57 | |||
58 | for (;;) | ||
66 | { | 59 | { |
67 | for (int y=0; y<GAME_HEIGHT; y++) | 60 | render(gameCanvas); |
61 | |||
62 | try | ||
63 | { | ||
64 | Thread.sleep(10); | ||
65 | } catch (InterruptedException ex) | ||
68 | { | 66 | { |
69 | grid[x][y] = new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)); | 67 | //Nothing |
70 | } | 68 | } |
71 | } | 69 | } |
72 | |||
73 | redrawScreen(); | ||
74 | } | 70 | } |
75 | 71 | ||
76 | private static void redrawScreen() | 72 | public static void render(Canvas gameCanvas) |
77 | { | 73 | { |
78 | Graphics g = mainWindow.getGraphics(); | 74 | BufferStrategy buffer = gameCanvas.getBufferStrategy(); |
79 | g.setColor(Color.black); | 75 | GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); |
80 | g.fillRect(0, 0, mainWindow.getWidth(), mainWindow.getHeight()); | 76 | GraphicsDevice device = env.getDefaultScreenDevice(); |
77 | GraphicsConfiguration config = device.getDefaultConfiguration(); | ||
78 | BufferedImage vImg = config.createCompatibleImage(GAME_WIDTH, GAME_HEIGHT, Transparency.TRANSLUCENT); | ||
79 | Graphics2D g = vImg.createGraphics(); | ||
81 | 80 | ||
82 | for (int x=0; x<GAME_WIDTH; x++) | 81 | for (Renderable renderable : renderables) |
83 | { | 82 | { |
84 | for (int y=0; y<GAME_HEIGHT; y++) | 83 | renderable.render(g); |
85 | { | ||
86 | g.setColor(grid[x][y]); | ||
87 | g.fillRect(x*TILE_WIDTH + drawOffsetX, y*TILE_HEIGHT + drawOffsetY + mainWindow.getInsets().top, TILE_WIDTH, TILE_HEIGHT); | ||
88 | } | ||
89 | } | 84 | } |
85 | |||
86 | do { | ||
87 | do { | ||
88 | float wt = mainWindow.getWidth() / (float) GAME_WIDTH; | ||
89 | float ht = (mainWindow.getHeight() - mainWindow.getInsets().top) / (float) GAME_HEIGHT; | ||
90 | int renderWidth = Math.round(Math.min(wt, ht) * GAME_WIDTH); | ||
91 | int renderHeight = Math.round(Math.min(wt, ht) * GAME_HEIGHT); | ||
92 | int renderX = (mainWindow.getWidth()/2)-(renderWidth/2); | ||
93 | int renderY = ((mainWindow.getHeight()-mainWindow.getInsets().top)/2)-(renderHeight/2); | ||
94 | |||
95 | Graphics g2 = buffer.getDrawGraphics(); | ||
96 | g2.setColor(Color.BLACK); | ||
97 | g2.fillRect(0, 0, mainWindow.getWidth(), mainWindow.getHeight()); | ||
98 | g2.drawImage(vImg, renderX, renderY, renderWidth, renderHeight, gameCanvas); | ||
99 | g2.dispose(); | ||
100 | } while (buffer.contentsRestored()); | ||
101 | |||
102 | buffer.show(); | ||
103 | } while (buffer.contentsLost()); | ||
104 | |||
105 | |||
106 | Toolkit.getDefaultToolkit().sync(); | ||
90 | } | 107 | } |
91 | } | 108 | } |
diff --git a/src/com/fourisland/frigidearth/Renderable.java b/src/com/fourisland/frigidearth/Renderable.java new file mode 100644 index 0000000..5b49cc0 --- /dev/null +++ b/src/com/fourisland/frigidearth/Renderable.java | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * To change this template, choose Tools | Templates | ||
3 | * and open the template in the editor. | ||
4 | */ | ||
5 | package com.fourisland.frigidearth; | ||
6 | |||
7 | import java.awt.Graphics2D; | ||
8 | |||
9 | /** | ||
10 | * | ||
11 | * @author hatkirby | ||
12 | */ | ||
13 | public interface Renderable | ||
14 | { | ||
15 | public void render(Graphics2D g); | ||
16 | } | ||
diff --git a/src/com/fourisland/frigidearth/TileGameState.java b/src/com/fourisland/frigidearth/TileGameState.java new file mode 100644 index 0000000..b64e551 --- /dev/null +++ b/src/com/fourisland/frigidearth/TileGameState.java | |||
@@ -0,0 +1,54 @@ | |||
1 | /* | ||
2 | * To change this template, choose Tools | Templates | ||
3 | * and open the template in the editor. | ||
4 | */ | ||
5 | package com.fourisland.frigidearth; | ||
6 | |||
7 | import java.awt.Color; | ||
8 | import java.awt.Graphics2D; | ||
9 | import java.util.Random; | ||
10 | |||
11 | /** | ||
12 | * | ||
13 | * @author hatkirby | ||
14 | */ | ||
15 | public class TileGameState implements GameState | ||
16 | { | ||
17 | private final int TILE_WIDTH = 16; | ||
18 | private final int TILE_HEIGHT = 16; | ||
19 | private final int GAME_WIDTH = Main.GAME_WIDTH / TILE_WIDTH; | ||
20 | private final int GAME_HEIGHT = Main.GAME_HEIGHT / TILE_HEIGHT; | ||
21 | private Color[][] grid; | ||
22 | |||
23 | public TileGameState() | ||
24 | { | ||
25 | Random r = new Random(); | ||
26 | grid = new Color[GAME_WIDTH][GAME_HEIGHT]; | ||
27 | |||
28 | for (int x=0; x<GAME_WIDTH; x++) | ||
29 | { | ||
30 | for (int y=0; y<GAME_HEIGHT; y++) | ||
31 | { | ||
32 | grid[x][y] = new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)); | ||
33 | } | ||
34 | } | ||
35 | } | ||
36 | |||
37 | public void tick() | ||
38 | { | ||
39 | |||
40 | } | ||
41 | |||
42 | public void render(Graphics2D g) | ||
43 | { | ||
44 | for (int x=0; x<GAME_WIDTH; x++) | ||
45 | { | ||
46 | for (int y=0; y<GAME_HEIGHT; y++) | ||
47 | { | ||
48 | g.setColor(grid[x][y]); | ||
49 | g.fillRect(x*TILE_WIDTH, y*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT); | ||
50 | } | ||
51 | } | ||
52 | } | ||
53 | |||
54 | } | ||