import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
-import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.Paint.Cap;
private int screenWidth;
private int screenHeight;
- private int tilesetRows;
- private int tilesetCols;
- private int tileHeight;
- private int tileWidth;
private Bitmap bg;
- private Bitmap tile[];
private Point selection1 = new Point(0, 0);
private Point selection2 = new Point(0, 0);
private List<Point> path = null;
private long playTime;
private long baseTime;
private Timer timer;
+ private Tileset tileset;
static class hHandler extends Handler {
private final WeakReference<ShisenShoView> mTarget;
private SurfaceHolder surfaceHolder = null;
private String time = INVALID_TIME;
- public ShisenShoView(ShisenSho shishenSho) {
- super((Context) shishenSho);
- this.app = shishenSho;
+ public ShisenShoView(ShisenSho shisenSho) {
+ super((Context) shisenSho);
+ this.app = shisenSho;
cstate = StatePlay.UNINITIALIZED;
surfaceHolder = getHolder();
surfaceHolder.addCallback(this);
+ tileset = new Tileset(shisenSho);
}
public ShisenShoView(Context ctx) {
this.cstate=cstate;
}
- private void loadTileset() {
- BitmapFactory.Options ops = new BitmapFactory.Options();
- ops.inScaled = false;
- Bitmap tileset = BitmapFactory.decodeResource(getResources(), R.drawable.tileset, ops);
- tileset.setDensity(Bitmap.DENSITY_NONE);
-
- // The tile set has 4 rows x 9 columns
- tilesetRows = 4;
- tilesetCols = 9;
- int loadedtileWidth = tileset.getWidth()/tilesetCols;
- int loadedtileHeight = tileset.getHeight()/tilesetRows;
- tile = new Bitmap[tilesetRows*tilesetCols];
-
- // align to screen:
- // "large" is 16x6, and we want to have a nice border, so we use 17x7 and
- // choose the lowest scale so everything fits
- float scalex = ((float) screenWidth/17) / loadedtileWidth;
- float scaley = ((float) screenHeight/7) / loadedtileHeight;
- if (scaley < scalex) {
- scalex = scaley;
- } else {
- scaley = scalex;
- }
- Matrix matrix = new Matrix();
- matrix.setScale(scalex, scaley);
-
- int k=0;
- for (int i=0; i<tilesetRows; i++) {
- for (int j=0; j<tilesetCols; j++) {
- tile[k] = Bitmap.createBitmap(tileset, j*loadedtileWidth, i*loadedtileHeight,
- loadedtileWidth, loadedtileHeight, matrix, false);
- tile[k].setDensity(Bitmap.DENSITY_NONE);
- k++;
- }
- }
- tileWidth = tile[0].getWidth();
- tileHeight = tile[0].getHeight();
- }
-
private void loadBackground() {
BitmapFactory.Options ops = new BitmapFactory.Options();
ops.inScaled = false;
}
}
+ public void loadTileset() {
+ tileset.loadTileset(screenWidth, screenHeight);
+ }
+
private void initializeGame() {
loadBackground();
screenWidth=getWidth();
try {
if (canvas == null) canvas = surfaceHolder.lockCanvas(null);
if (canvas == null) return;
- if (cstate==StatePlay.UNINITIALIZED) initializeGame();
+ if (cstate == StatePlay.UNINITIALIZED) initializeGame();
synchronized (surfaceHolder) {
doDraw(canvas);
}
int y0=0;
if (app!=null && app.board!=null) {
- x0=(screenWidth-app.board.boardSize[1]*tileWidth)/2;
- y0=(screenHeight-app.board.boardSize[0]*tileHeight)/2;
+ x0=(screenWidth-app.board.boardSize[1]*tileset.tileWidth)/2;
+ y0=(screenHeight-app.board.boardSize[0]*tileset.tileHeight)/2;
}
int selectcolor = Color.parseColor(COLOR_SELECTED);
// Tiles are 56px height, 40px width each
char piece=app.board.board[i][j];
if (piece!=0) {
- canvas.drawBitmap(tile[piece], x0+j*tileWidth, y0+i*tileHeight, null);
+ canvas.drawBitmap(
+ tileset.tile[piece],
+ x0+j*tileset.tileWidth,
+ y0+i*tileset.tileHeight,
+ null);
}
}
}
paint.setStrokeJoin(Join.ROUND);
paint.setStrokeWidth(3);
canvas.drawLine(
- x0 + p0.j * tileWidth - 2 + (tileWidth / 2),
- y0 + p0.i * tileHeight - 2 + (tileHeight / 2),
- x0 + p1.j * tileWidth - 2 + (tileWidth / 2),
- y0 + p1.i * tileHeight - 2 + (tileHeight / 2), paint);
+ x0 + p0.j * tileset.tileWidth - 2 + (tileset.tileWidth / 2),
+ y0 + p0.i * tileset.tileHeight - 2 + (tileset.tileHeight / 2),
+ x0 + p1.j * tileset.tileWidth - 2 + (tileset.tileWidth / 2),
+ y0 + p1.i * tileset.tileHeight - 2 + (tileset.tileHeight / 2), paint);
}
private void highlightTile(Canvas canvas, int x0, int y0, Point p, int color) {
paint.setStrokeJoin(Join.ROUND);
paint.setStrokeWidth(3);
Rect r = new Rect(
- x0 + p.j * tileWidth - 2,
- y0 + p.i * tileHeight - 2,
- x0 + p.j * tileWidth + tileWidth + 2,
- y0 + p.i * tileHeight + tileHeight + 2);
+ x0 + p.j * tileset.tileWidth - 2,
+ y0 + p.i * tileset.tileHeight - 2,
+ x0 + p.j * tileset.tileWidth + tileset.tileWidth + 2,
+ y0 + p.i * tileset.tileHeight + tileset.tileHeight + 2);
canvas.drawRect(r, paint);
}
private void onClick(int x, int y) {
try {
- int i=(y-(screenHeight-app.board.boardSize[0]*tileHeight)/2)/tileHeight;
- int j=(x-(screenWidth-app.board.boardSize[1]*tileWidth)/2)/tileWidth;
+ int i=(y-(screenHeight-app.board.boardSize[0]*tileset.tileHeight)/2)/tileset.tileHeight;
+ int j=(x-(screenWidth-app.board.boardSize[1]*tileset.tileWidth)/2)/tileset.tileWidth;
switch (cstate) {
case IDLE:
if (time.compareTo(besttime2) < 0) {
// score!
new AlertDialog.Builder(app.activity)
- .setTitle("Hiscore!")
+ .setTitle(R.string.hiscore_title)
.setCancelable(true)
.setIcon(R.drawable.icon)
- .setPositiveButton(app.getString(android.R.string.ok), null)
- .setMessage("You've made the highscore list!").create() // FIXME: hardcoded string
+ .setPositiveButton(android.R.string.ok, null)
+ .setMessage(R.string.hiscore_text)
+ .create()
.show();
SharedPreferences.Editor editor = sp.edit();