Attempt at movement.

This commit is contained in:
Jacob Signorovitch
2025-04-09 19:18:01 -04:00
parent f78290c0c6
commit b7b4665a53

View File

@@ -81,7 +81,11 @@ class Game extends World {
public void onKeyEvent(String key) { public void onKeyEvent(String key) {
System.out.println("YES"); System.out.println("YES");
if (key == "h") { this.grid.set(0, 0, 8); } if (key.equals("left") || key.equals("h")) this.grid.move(0);
else if (key.equals("down") || key.equals("j")) this.grid.move(1);
else if (key.equals("up") || key.equals("k")) this.grid.move(2);
else if (key.equals("right") || key.equals("l")) this.grid.move(3);
else return;
this.draw(); this.draw();
} }
@@ -119,21 +123,45 @@ class Grid {
return free; return free;
} }
// Set the tile at the coords. Just for testing. // Get the indexes of all "unfree" cells -- those whose value in buf is not
// 0, and represent a used tile.
List<Integer> unfreeCellIdxs() {
List<Integer> unfree = new ArrayList<>();
for (int i = 0; i < this.sz; i++)
if (this.buf.get(i) != 0 && unfree.add(i)) continue;
return unfree;
}
// Set the tile at the coords.
Grid set(int x, int y, int v) { Grid set(int x, int y, int v) {
this.buf.set(this.w * y + x, v); this.buf.set(this.w * y + x, v);
return this; return this;
} }
// Get the value at the coords. Just for testing. // Get the value at the coords.
int get(int x, int y) { return this.buf.get(this.w * y + x); } int get(int x, int y) { return this.buf.get(this.w * y + x); }
// Get the x coord for an index.
int ix(int i) { return i % this.h; }
// Get the y coord for an index.
int iy(int i) { return i % this.w; }
// Move all tiles in that direction until they can't move or combine any // Move all tiles in that direction until they can't move or combine any
// more. // more.
void move(int d) { void move(int d) {
// TODO: Don't assume right. // TODO: Don't assume right.
// Assume right. // Assume right.
for (int i = 0; i < this.h; i++) {} List<Integer> unfrees = this.unfreeCellIdxs();
List<Integer> frees = this.freeCellIdxs();
for (int unfree : unfrees) {
/*
if (frees.contains(this.ix(unfree) + 1)) {
this.buf.set(unfree, 0))
}
*/
}
} }
// Render the grid. // Render the grid.
@@ -204,7 +232,7 @@ class Examples {
} }
/* /*
void testMoveLeft(Tester t) { void testMoveRight(Tester t) {
init(); init();
regular.set(1, 0, 16) regular.set(1, 0, 16)
.set(2, 0, 16) .set(2, 0, 16)