add snake object

leesongun
Nov 3, 2022, 4:34 AM
RBIEBZNXMNKZRBVGKMB5DJ6HWMUAWFTGJQU3LFNU76GG55652X5QC

Dependencies

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();
    }
    //todo
    pub fn print() void {
    unreachable;
    }
  • replacement in src/game.zig at line 2
    [2.82][2.82:120]()
    const cursor = @import("cursor.zig");
    [2.82]
    [2.120]
    const Snake = @import("snake.zig");
  • replacement in src/game.zig at line 5
    [2.147][2.147:179]()
    var map = @import("map.zig"){};
    [2.147]
    [2.179]
    var snake: Snake = undefined;
  • edit in src/game.zig at line 7
    [2.224][2.224:284]()
    var head = cursor.init(0o40);
    var tail = cursor.init(0o40);
  • edit in src/game.zig at line 8
    [2.305]
    [2.305]
    snake = Snake.init(.{ .pos = 0o40, .dir = 2 });
  • replacement in src/game.zig at line 13
    [2.370][2.370:416]()
    io.print(head.pos, "<^>V"[head.dir]);
    [2.370]
    [2.416]
    io.print(snake.head.pos, "<^>V"[snake.head.dir]);
  • replacement in src/game.zig at line 15
    [2.436][2.436:674]()
    const newdir = io.scandir(head.dir);
    io.print(head.pos, " lqml kxqk jmxj"[4 * @as(u4, newdir) + head.dir]);
    //push
    map.store(head, newdir);
    head.dir = newdir ^ 2;
    head.move() orelse break;
    [2.436]
    [2.674]
    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
    [2.675][2.675:787]()
    if (head.pos != fruit.pos) {
    //pop
    map.load(&tail);
    map.zero(tail);
    [2.675]
    [2.787]
    snake.pushdir(newdir);
    snake.head.move() orelse break;
    if (snake.head.pos != fruit.pos) {
    snake.popdir();
  • replacement in src/game.zig at line 24
    [2.812][2.812:860]()
    if (head.mask() & map.blank() == 0)
    [2.812]
    [2.860]
    if (snake.collide())
  • replacement in src/game.zig at line 27
    [2.930][2.930:1011]()
    io.print(tail.pos, ' ');
    tail.move() orelse unreachable;
    [2.930]
    [2.1011]
    io.print(snake.tail.pos, ' ');
    snake.tail.move() orelse unreachable;
  • replacement in src/game.zig at line 34
    [2.1082][2.1082:1154]()
    fruit.newfruit(map.blank() ^ cursor.mask(head)) orelse return null;
    [2.1082]
    [2.1154]
    fruit.newfruit(snake.empty()) orelse return null;