From 2cf498f7bf1311ebca156315a0c9ac25b0addef5 Mon Sep 17 00:00:00 2001 From: Cody Date: Tue, 27 Jun 2023 04:03:26 -0500 Subject: Working conways game of life --- examples/cgol.sloth | 75 ++++++++++++++++++++++++++++++---------------------- examples/hello.sloth | 19 +++++++++++++ 2 files changed, 62 insertions(+), 32 deletions(-) (limited to 'examples') diff --git a/examples/cgol.sloth b/examples/cgol.sloth index b1a6998..a5b761f 100644 --- a/examples/cgol.sloth +++ b/examples/cgol.sloth @@ -5,9 +5,8 @@ fn populate() [Int] { # Fill the vector with random values var i: Int = 0; - while i < 100 { + while i < 2500 { var n: Int = randGen(0,1); - println(istr(n)); vpushi(life, n); i = i+1; } @@ -16,69 +15,79 @@ fn populate() [Int] { } fn coord(x: Int, y: Int) Int { - println("COORD"); var res: Int = -1; # Calculate index based on coordinates if x >= 0 && y >= 0 { - println("COORD1"); - res = y*10 + x; + res = y*50 + x; } # if coordinate is invalid, return -1 return res; } fn cval(x: Int, y: Int, life: [Int]) Int { - println("CVAL"); # Check to make sure index exists before returning var res: Int = 0; var c: Int = coord(x, y); - println("CVAL1"); if c >= 0 { - println("CVAL2"); res = vgeti(life, c); } - println("CVAL3"); return res; } -fn update(life: [Int]) [Int] { +fn update(life: [Int], new: [Int]) { # Iterate through life var x: Int = 0; - while x < 10 { + while x < 50 { var y: Int = 0; - while y < 10 { + while y < 50 { # Calculate total score around selected cell - var total: Int = cval(x-1, y-1) + cval(x-1, y) + cval(x-1, y+1) + cval(x, y-1) + cval(x, y+1) + cval(x+1, y-1) + cval(x+1, y) + cval(x+1, y+1); + var total: Int = + cval(x-1, y-1, life) + # Top Left + cval(x-1, y , life) + + cval(x-1, y+1, life) + + cval(x , y-1, life) + + cval(x , y+1, life) + + cval(x+1, y-1, life) + + cval(x+1, y , life) + + cval(x+1, y+1, life); # Apply game of life rules - if cval(x, y) == 1 && total < 2 || total > 3 { - vseti(life, 0); - } else if total == 3 { - vseti(life, 1); - } + var idx: Int = coord(x, y); + + if cval(x, y, life) == 1 { + if total < 2 || total > 3 { + vseti(new, idx, 0); + } else { + vseti(new, idx, 1); + } + } else { + if total == 3 { + vseti(new, idx, 1); + } else { + vseti(new, idx, 0); + } + } + y = y+1; } x = x+1; } - - return life; } fn display(life: [Int]) { - println("DISPLAY"); # Iterate through life + #termclear(); var x: Int = 0; - while x < 10 { - println("DISPLAY1"); + while x < 50 { var y: Int = 0; - while y < 10 { - println("DISPLAY2"); + while y < 50 { # if the cell is alive, print - if cval(x, y) == 1{ - println("DISPLAY3"); - termpos(x, y); + termpos(x, y); + if cval(x, y, life) == 1{ print("#"); - } + } else { + print(" "); + } y = y+1; } x = x+1; @@ -91,9 +100,11 @@ fn main() Int { display(life); # Play forever while true { - life = update(life); - display(life); - wait(0.5); + var new: [Int] = populate(); + update(life, new); + display(new); + life = new; + wait(1.0); } return 0; } diff --git a/examples/hello.sloth b/examples/hello.sloth index 8abb65c..75071c3 100644 --- a/examples/hello.sloth +++ b/examples/hello.sloth @@ -1,4 +1,23 @@ +foreign fn printdeez(nutz: Int); +foreign fn print(str: String); +foreign fn randGen(min: Int, max: Int) Int; + fn main() Int { + var x: [Int] = [5]; + vpopi(x); + var i: Int = 0; + while i < 100 { + vpushi(x, randGen(0, 100)); + i = i + 1; + } + + var y: Int = vgeti(x, 42); + var y: Int = vgeti(x, 45); + var y: Int = vgeti(x, 41); + var y: Int = vgeti(x, 49); + printdeez(y); + + print("Hello World\n"); return 0; } -- cgit v1.2.3