diff --git a/src/bag.zig b/src/bag.zig new file mode 100644 index 0000000..fd3c57f --- /dev/null +++ b/src/bag.zig @@ -0,0 +1,44 @@ +const Piece = @import("piece.zig"); + +const Self = @This(); + +contents: [14]?Piece.Type, + +pub fn init() Self { + var ret = Self{ + .contents = undefined, + }; + // We must fill all of the array + for (ret.contents[0..6]) |_, i| { + ret.contents[i] = @intToEnum(Piece.Type, i); + } + // Then we would shuffle + + for (ret.contents[7..13]) |_, i| { + ret.contents[i + 7] = @intToEnum(Piece.Type, i); + } + // Then we would shuffle + + return ret; +} + +pub fn pop(self: *Self) Piece.Type { + var ret = Piece.Type.i; + if (self.contents[0]) |head| { + ret = head; + for (self.contents) |_, i| { + if (self.contents[i + 1]) |next| { + self.contents[i] = next; + self.contents[i + 1] = null; + } else break; + } + if (self.contents[7] == null) { + for (self.contents[7..13]) |_, i| { + self.contents[i + 7] = @intToEnum(Piece.Type, i); + } + } + // Then we would shuffle + + } + return ret; +} diff --git a/src/game.zig b/src/game.zig index ba732b2..af806b0 100644 --- a/src/game.zig +++ b/src/game.zig @@ -3,6 +3,7 @@ const SDL = @import("sdl2"); const Grid = @import("grid.zig"); const Piece = @import("piece.zig"); +const Bag = @import("bag.zig"); const movement = @import("movement.zig"); @@ -13,7 +14,8 @@ grid_cell_size: i32, grid_pos_x: i32, grid_pos_y: i32, -bag: [14]Piece.Type, +bag: Bag, + held: ?Piece, piece: ?Piece, renderer: *SDL.SDL_Renderer, @@ -23,17 +25,19 @@ left_action: bool = false, down_action: bool = false, pub fn init(renderer: *SDL.SDL_Renderer) Self { - return Self{ + var ret = Self { .grid = Grid.init(), .grid_cell_size = 16, .grid_pos_x = 16, .grid_pos_y = 16, - .bag = undefined, - .piece = Piece.init(Piece.Type.t), + .bag = Bag.init(), + .piece = undefined, .held = null, .renderer = renderer, }; + ret.piece = Piece.init(ret.bag.pop()); + return ret; } fn render(self: Self) void { self.grid.render(self.renderer, self.grid_cell_size, self.grid_pos_x, self.grid_pos_y); @@ -77,7 +81,7 @@ pub fn tick(self: *Self) void { if (self.piece) |safe_piece| { if (safe_piece.dropped) { self.grid = movement.drop(self.grid, safe_piece); - self.piece = Piece.init(Piece.Type.t); + self.piece = Piece.init(self.bag.pop()); } } diff --git a/src/piece.zig b/src/piece.zig index 550d9f3..dfd5910 100644 --- a/src/piece.zig +++ b/src/piece.zig @@ -27,7 +27,6 @@ dropped: bool = false, color: SDL.SDL_Color, - pub fn init(piece_type: Type) Self { return Self{ .row = 0, diff --git a/zig-cache/h/8fb74d559dd889eac55495e9f1d9dc64.txt b/zig-cache/h/8fb74d559dd889eac55495e9f1d9dc64.txt index 8b3b76c..80e44e1 100644 --- a/zig-cache/h/8fb74d559dd889eac55495e9f1d9dc64.txt +++ b/zig-cache/h/8fb74d559dd889eac55495e9f1d9dc64.txt @@ -1,7 +1,7 @@ 1271 36569768 1656334617470040282 fdaa7b4da8476360daa4621804b40f8f /home/strange/Documentos/Projectes/Programació/usg/src/main.zig 1271 36569768 1656334617470040282 fdaa7b4da8476360daa4621804b40f8f /home/strange/Documentos/Projectes/Programació/usg/src/main.zig 135300 36570392 1655299923670057346 b4c2d851673df5aab566633b89bdaa84 /home/strange/Documentos/Projectes/Programació/usg/lib/SDL.zig/src/binding/sdl.zig -32 36968726 1656434162539985452 91a8da097c7c1645ba2a6217a5171c4e /home/strange/Documentos/Projectes/Programació/usg/zig-cache/options/kh59p23UXKId3bWMadeQ0Yp6cv2kATA4qPk2nBQ2q_3IsG9JTjKRYS1YxdIMHL6s +32 36968726 1656603169529970766 91a8da097c7c1645ba2a6217a5171c4e /home/strange/Documentos/Projectes/Programació/usg/zig-cache/options/kh59p23UXKId3bWMadeQ0Yp6cv2kATA4qPk2nBQ2q_3IsG9JTjKRYS1YxdIMHL6s 5621 36968525 1655270162000000000 66001e1a55f68e4681c1f32a69223647 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/std.zig 5621 36968525 1655270162000000000 66001e1a55f68e4681c1f32a69223647 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/std.zig 29901 36968437 1655270162000000000 5c441d88acbf5e7fe2a26137df2b5376 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/builtin.zig @@ -21,14 +21,15 @@ 121502 36968568 1655270162000000000 4bad05f05e4a10364e515a13d2fa2b3f /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/os/linux/io_uring.zig 135300 36570392 1655299923670057346 b4c2d851673df5aab566633b89bdaa84 /home/strange/Documentos/Projectes/Programació/usg/lib/SDL.zig/src/binding/sdl.zig 1640 36570393 1655299923670057346 c3d50ea43c9e10688a521a9ac927ded4 /home/strange/Documentos/Projectes/Programació/usg/lib/SDL.zig/src/binding/sdl_image.zig -32 36968726 1656434162539985452 91a8da097c7c1645ba2a6217a5171c4e /home/strange/Documentos/Projectes/Programació/usg/zig-cache/options/kh59p23UXKId3bWMadeQ0Yp6cv2kATA4qPk2nBQ2q_3IsG9JTjKRYS1YxdIMHL6s +32 36968726 1656603169529970766 91a8da097c7c1645ba2a6217a5171c4e /home/strange/Documentos/Projectes/Programació/usg/zig-cache/options/kh59p23UXKId3bWMadeQ0Yp6cv2kATA4qPk2nBQ2q_3IsG9JTjKRYS1YxdIMHL6s 7338 36968289 1655270162000000000 ee4fd6c02929ff52d99a8faa2539dce8 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/zig.zig 21121 36968483 1655270162000000000 669c911cf26ce07c5f5516d896b30e33 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/zig/c_translation.zig 113573 36968636 1655270162000000000 2c3980264c753ba754322c7c8c4f2634 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/mem.zig -2326 36570413 1656433976089986564 b5923a8a7d90c6a495a5914d992e6f25 /home/strange/Documentos/Projectes/Programació/usg/src/game.zig +2399 36570413 1656603168279970768 d4d51b79488448e23f39e4e84787d496 /home/strange/Documentos/Projectes/Programació/usg/src/game.zig 1359 36569821 1656418680670025505 5643391f858689faa3fe97fa8d814454 /home/strange/Documentos/Projectes/Programació/usg/src/grid.zig 342 36569823 1656079597800036836 fcaa0d5efa9177d38e199b7727f8f020 /home/strange/Documentos/Projectes/Programació/usg/src/cell.zig -3497 36569819 1656433455109989671 609c6515376d60dd45ea803bc24f2389 /home/strange/Documentos/Projectes/Programació/usg/src/piece.zig +1044 36570092 1656602936009971256 dd01945b52fd457a1747c416231ca4d8 /home/strange/Documentos/Projectes/Programació/usg/src/bag.zig +3496 36570196 1656599489839978486 b265adb85e30c82ae22f0bb2d5a8dd49 /home/strange/Documentos/Projectes/Programació/usg/src/piece.zig 45023 36968356 1655270162000000000 c30e605ecc099ad6f5498460429756fa /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/elf.zig 5432 36968458 1655270162000000000 624956409eee1e93746e77415e9cdca9 /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/atomic.zig 25568 36968501 1655270162000000000 f15ad6de023e2f7205ca6550cee7becd /home/strange/Documentos/Projectes/Programació/usg/zig/lib/std/atomic/Atomic.zig diff --git a/zig-cache/o/1f40d36fdbc6aca7bc0580447c047c66/usg b/zig-cache/o/1f40d36fdbc6aca7bc0580447c047c66/usg new file mode 100755 index 0000000..9705b9d Binary files /dev/null and b/zig-cache/o/1f40d36fdbc6aca7bc0580447c047c66/usg differ diff --git a/zig-cache/o/1f40d36fdbc6aca7bc0580447c047c66/usg.o b/zig-cache/o/1f40d36fdbc6aca7bc0580447c047c66/usg.o new file mode 100644 index 0000000..6cb4c0c Binary files /dev/null and b/zig-cache/o/1f40d36fdbc6aca7bc0580447c047c66/usg.o differ diff --git a/zig-cache/o/8849629281b2c63655afef17848489b8/usg b/zig-cache/o/8849629281b2c63655afef17848489b8/usg new file mode 100755 index 0000000..6975fc8 Binary files /dev/null and b/zig-cache/o/8849629281b2c63655afef17848489b8/usg differ diff --git a/zig-cache/o/8849629281b2c63655afef17848489b8/usg.o b/zig-cache/o/8849629281b2c63655afef17848489b8/usg.o new file mode 100644 index 0000000..ee5b7a1 Binary files /dev/null and b/zig-cache/o/8849629281b2c63655afef17848489b8/usg.o differ diff --git a/zig-cache/o/b6c950089b79be8eb5f92c28ec77f88a/usg b/zig-cache/o/b6c950089b79be8eb5f92c28ec77f88a/usg new file mode 100755 index 0000000..a6cd953 Binary files /dev/null and b/zig-cache/o/b6c950089b79be8eb5f92c28ec77f88a/usg differ diff --git a/zig-cache/o/b6c950089b79be8eb5f92c28ec77f88a/usg.o b/zig-cache/o/b6c950089b79be8eb5f92c28ec77f88a/usg.o new file mode 100644 index 0000000..86a8f2e Binary files /dev/null and b/zig-cache/o/b6c950089b79be8eb5f92c28ec77f88a/usg.o differ diff --git a/zig-cache/o/c8df9e97ebe016905fdfbf0d50be6ea4/usg b/zig-cache/o/c8df9e97ebe016905fdfbf0d50be6ea4/usg new file mode 100755 index 0000000..32c7e20 Binary files /dev/null and b/zig-cache/o/c8df9e97ebe016905fdfbf0d50be6ea4/usg differ diff --git a/zig-cache/o/c8df9e97ebe016905fdfbf0d50be6ea4/usg.o b/zig-cache/o/c8df9e97ebe016905fdfbf0d50be6ea4/usg.o new file mode 100644 index 0000000..5760342 Binary files /dev/null and b/zig-cache/o/c8df9e97ebe016905fdfbf0d50be6ea4/usg.o differ diff --git a/zig-cache/z/2c3f388dff25479fd5c0bc9efd144dbe b/zig-cache/z/2c3f388dff25479fd5c0bc9efd144dbe new file mode 100644 index 0000000..0644eb5 Binary files /dev/null and b/zig-cache/z/2c3f388dff25479fd5c0bc9efd144dbe differ diff --git a/zig-cache/z/87092e0025c62db0f1adbe7b56bf23bb b/zig-cache/z/87092e0025c62db0f1adbe7b56bf23bb index 291318a..7b6f6c7 100644 Binary files a/zig-cache/z/87092e0025c62db0f1adbe7b56bf23bb and b/zig-cache/z/87092e0025c62db0f1adbe7b56bf23bb differ diff --git a/zig-cache/z/a4146a97860546c83bdbfe47a036b0af b/zig-cache/z/a4146a97860546c83bdbfe47a036b0af index 480f26e..4a49fcc 100644 Binary files a/zig-cache/z/a4146a97860546c83bdbfe47a036b0af and b/zig-cache/z/a4146a97860546c83bdbfe47a036b0af differ diff --git a/zig-out/bin/usg b/zig-out/bin/usg index 2e74a9f..6975fc8 100755 Binary files a/zig-out/bin/usg and b/zig-out/bin/usg differ