add snake object
Dependencies
- [2]
W22NXX6Sinitial commit
Change contents
- file addition: snake.zig[2.15]
const io = @import("io.zig");const Cursor = @import("cursor.zig").Self;const Map = @import("map.zig");neck: Map,head: Cursor,tail: Cursor,const Self = @This();pub fn init(start: Cursor) Self {return .{.head = start,.tail = start,.neck = .{},};}pub fn pushdir(self: *Self, dir: u2) void {self.neck.store(self.head, dir);self.head.dir = dir ^ 2;}pub fn popdir(self: *Self) void {self.neck.load(&self.tail);self.neck.zero(self.tail);}pub fn collide(self: Self) bool {return self.head.mask() & self.neck.blank() == 0;}pub fn empty(self:Self) u64 {return self.neck.blank() & ~self.head.mask();}//todopub fn print() void {unreachable;} - replacement in src/game.zig at line 2
const cursor = @import("cursor.zig");const Snake = @import("snake.zig"); - replacement in src/game.zig at line 5
var map = @import("map.zig"){};var snake: Snake = undefined; - edit in src/game.zig at line 7
var head = cursor.init(0o40);var tail = cursor.init(0o40); - edit in src/game.zig at line 8
snake = Snake.init(.{ .pos = 0o40, .dir = 2 }); - replacement in src/game.zig at line 13
io.print(head.pos, "<^>V"[head.dir]);io.print(snake.head.pos, "<^>V"[snake.head.dir]); - replacement in src/game.zig at line 15
const newdir = io.scandir(head.dir);io.print(head.pos, " lqml kxqk jmxj"[4 * @as(u4, newdir) + head.dir]);//pushmap.store(head, newdir);head.dir = newdir ^ 2;head.move() orelse break;const newdir = io.scandir(snake.head.dir);io.print(snake.head.pos, " lqml kxqk jmxj"[4 * @as(u4, newdir) + snake.head.dir]); - replacement in src/game.zig at line 18
if (head.pos != fruit.pos) {//popmap.load(&tail);map.zero(tail);snake.pushdir(newdir);snake.head.move() orelse break;if (snake.head.pos != fruit.pos) {snake.popdir(); - replacement in src/game.zig at line 24
if (head.mask() & map.blank() == 0)if (snake.collide()) - replacement in src/game.zig at line 27
io.print(tail.pos, ' ');tail.move() orelse unreachable;io.print(snake.tail.pos, ' ');snake.tail.move() orelse unreachable; - replacement in src/game.zig at line 34
fruit.newfruit(map.blank() ^ cursor.mask(head)) orelse return null;fruit.newfruit(snake.empty()) orelse return null;