1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165 |
package bump_n_jump;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.ArrayList;
import javax.imageio.ImageIO;
public class LevelCreator {
private static final double X_INCREMENT = 25;
private static final double Y_INCREMENT = 25;
private BallSprite ballSprite;
private Door door;
private ArrayList<Dog> dogs;
private ArrayList<Tile> tiles;
private ArrayList<Star> stars;
private ArrayList<Spike> spikes;
private ArrayList<Trampoline> tramps;
private ArrayList<Warp> warps;
private double initialBallX; //for setting the initial coords of the ball.
private double initialBallY; //this is retrieved later if the ball has to respawn.
private double exitX = 0, exitY = 0; //for holding warp zones.
private BufferedImage blueTile, greenTile, orangeTile, purpleTile; //images of the tiles.
//could rename these blueTile, redTile, etc to match what they represent.
/**
* creates an instantiation of this class, sets up some of the vars.
*/
public LevelCreator() {
dogs = new ArrayList<Dog>();
tiles = new ArrayList<Tile>();
stars = new ArrayList<Star>();
spikes = new ArrayList<Spike>();
tramps = new ArrayList<Trampoline>();
warps = new ArrayList<Warp>();
try {
blueTile = ImageIO.read(getClass().getResource("../images/blueBlock.jpg"));
greenTile = ImageIO.read(getClass().getResource("../images/greenBlock.jpg"));
orangeTile = ImageIO.read(getClass().getResource("../images/orangeBlock.jpg"));
purpleTile = ImageIO.read(getClass().getResource("../images/purpleBlock.jpg"));
}
catch (IOException e) {
System.err.println("Error reading image:" + e.toString());
}
}
/*
* Takes the filename and pointers to the level's contents.
*/
public Level create(String filename, String backImageName) {
dogs.clear();
tiles.clear();
stars.clear();
spikes.clear();
tramps.clear();
warps.clear();
try {
BufferedReader in = new BufferedReader(new FileReader(filename));
String str;
double x = 0;
double y = 0;
while ((str = in.readLine()) != null) {
//parse the string character by character.
char[] array = str.toCharArray();
x = 0;
for (int i = 0; i < array.length; i++) {
interpretChar(array[i], x, y);
x += X_INCREMENT;
}
y += Y_INCREMENT;
}
in.close();
//deal with warp exit zone:
if (warps.size() == 1) {
warps.get(0).setExitX(exitX);
warps.get(0).setExitY(exitY);
}
}
catch (IOException e) {
System.err.println("Error reading file: " + e.toString());
}
BufferedImage background = null;
try {
background = ImageIO.read(getClass().getResource(backImageName));
}
catch (IOException e) {
System.err.println(e.toString());
}
Level l = new Level(ballSprite, door, dogs, tiles, stars, spikes, tramps,
warps, initialBallX, initialBallY, filename, background, backImageName);
return l;
}
private void interpretChar(char c, double x, double y) {
switch (c) {
case ' ':
break;
case 'o':
ballSprite = new BallSprite(x, y);
initialBallX = x;
initialBallY = y;
break;
// Adds blue tile
case '#':
tiles.add(new Tile(x, y, blueTile));
break;
// Adds green tile
case 'g':
tiles.add(new Tile(x, y, greenTile));
break;
// Adds orange tile
case '0':
tiles.add(new Tile(x, y, orangeTile));
break;
// Adds purple tile
case 'p':
tiles.add(new Tile(x, y, purpleTile));
break;
case '*':
stars.add(new Star(x+7.5,y+7.5)); // Stars are 35x35 pixels. This is the standard star offset.
break;
case '^':
tramps.add(new Trampoline(x, y));
break;
case 'x':
spikes.add(new Spike(x, y));
break;
case 'D':
door = new Door(x, y);
break;
case '@':
warps.add(new Warp(x, y));
break;
case 'E':
exitX = x;
exitY = y;
break;
case 'w':
dogs.add(new Dog(x, y+10)); // Adjusts for the dog being only 40 pixels high.
break;
default:
//don't do anything if the character isn't recognized.
break;
}
}
} |