diff options
author | Oxore <oxore@protonmail.com> | 2018-06-30 19:26:03 +0300 |
---|---|---|
committer | Oxore <oxore@protonmail.com> | 2018-06-30 19:26:03 +0300 |
commit | bb9d1873ad414b09efdd7c8bf6798b431adb3cb2 (patch) | |
tree | e5b1106bd7a55a10c8ee7f9908f7bdd75413af29 /src/field.c | |
parent | bf0e5690a31d4c3cecd2ba512729a0b73989bbda (diff) |
Move all field&shape related funcs to field class
Diffstat (limited to 'src/field.c')
-rw-r--r-- | src/field.c | 57 |
1 files changed, 56 insertions, 1 deletions
diff --git a/src/field.c b/src/field.c index dcb332d..89abd02 100644 --- a/src/field.c +++ b/src/field.c @@ -85,7 +85,19 @@ void colorize_field_random(struct field *fld) } } -void init_next_shape_field(struct shape *next) +void colorize_active_shape(struct field *fld, struct shape *shape) +{ + for (int j = 0; j < 4; j++) + for (int i = 0; i < 4; i++) + if (shape->c[j][i] && j + shape->y < FLD_SIZE_Y) { + sfRectangleShape_setFillColor( + fld->p[j + shape->y][i + shape->x], shape->fColor); + sfRectangleShape_setOutlineColor( + fld->p[j + shape->y][i + shape->x], UIFGACTIVECOLOR); + } +} + +void init_next_shape(struct shape *next) { sfVector2f nsPos; for (int j = 0; j < 4; j++) { @@ -171,6 +183,16 @@ void resetActiveShape(struct field *fld, struct shape *active) } } +void gen_shape(struct shape *shape) +{ + shape->t = (rand() % 7) + 1; // Insert new random shape of 7 variants + load_shape(shape); + if (shape->t == 5) + for (int j = 0; j < 3; j++) + for (int i = 0; i < 4; i++) + shape->c[i][j] = shape->c[i][j+1]; +} + int collide(struct field *fld, struct shape *active) { if (out_of_bounds(fld, active)) @@ -233,3 +255,36 @@ void rotate_shape(struct field *fld, struct shape *shape) if (collide(fld, shape)) rotate_shape_left(shape); } + +int rm_lines(struct field *fld) +{ + int lines = 0; + for (int j = 0; j < FLD_SIZE_Y; j++) { + int cells = 0; + for (int i = 0; i < FLD_SIZE_X; i++) + if (fld->c[j][i].a) + ++cells; + if (cells == FLD_SIZE_X) { + ++lines; + for (int n = j; n < FLD_SIZE_Y; n++) + for (int m = 0; m < 10; m++) { + fld->c[n][m].a = fld->c[n+1][m].a; + fld->c[n][m].fColor = fld->c[n+1][m].fColor; + } + --j; + } + } + return lines; +} + +void free_field(struct field *fld) { + for (int j = 0; j < fld->size.y; j++) + for (int i = 0; i < fld->size.x; i++) + sfRectangleShape_destroy(fld->p[j][i]); +} + +void free_shape(struct shape *shape) { + for (int j = 0; j < 4; j++) + for (int i = 0; i < 4; i++) + sfRectangleShape_destroy(shape->p[j][i]); +} |