Skip to content

Commit

Permalink
Working conways game of life
Browse files Browse the repository at this point in the history
  • Loading branch information
cody-quinn committed Jun 27, 2023
1 parent 5d958f8 commit 2cf498f
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 43 deletions.
75 changes: 43 additions & 32 deletions examples/cgol.sloth
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -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;
Expand All @@ -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;
}
19 changes: 19 additions & 0 deletions examples/hello.sloth
Original file line number Diff line number Diff line change
@@ -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;
}
8 changes: 6 additions & 2 deletions sloth/src/codegen/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,11 @@ impl<'ctx> Codegen<'ctx> {

let inner_ptr = self
.builder
.build_array_malloc(element_type, i32_type.const_int(100, false), "vecinnerptr")
.build_array_malloc(
element_type,
i32_type.const_int(5000, false),
"vecinnerptr",
)
.unwrap();

for (idx, value) in values.iter().enumerate() {
Expand Down Expand Up @@ -479,7 +483,7 @@ impl<'ctx> Codegen<'ctx> {
.build_store(size_ptr, i32_type.const_int(values.len() as u64, false));

self.builder
.build_store(cap_ptr, i32_type.const_int(100, false));
.build_store(cap_ptr, i32_type.const_int(2500, false));

self.builder.build_store(inner, inner_ptr);

Expand Down
4 changes: 4 additions & 0 deletions std/stdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,7 @@ void print(char *str) {
void termpos(int x, int y) {
printf("\x1b[%d;%dH", x, y);
}

void termclear() {
printf("\x1b[2J\x1b[H");
}
8 changes: 4 additions & 4 deletions std/stdlib.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ int as_int(float x) {
return (int) x;
}

char* istr(int x) {
char snum[100];
return (char* )itoa(x, snum, 10);
}
// char* istr(int x) {
// char snum[100];
// return (char* )itoa(x, snum, 10);
// }
6 changes: 2 additions & 4 deletions std/stdlib.sloth
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ foreign fn slen(str: String) Int;
foreign fn parse_int(str: String) Int;
foreign fn termpos(x: Int, y: Int);
foreign fn as_int(x: Float) Int;
foreign fn istr(x: Int) Int;
#foreign fn istr(x: Int) Int;

fn termclear() Void {
print("\x1b[2J\x1b[H");
}
foreign fn termclear() Void;
2 changes: 1 addition & 1 deletion test.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ void print(char* x) {
void printfl(float x) {
printf("%f", x);
}
void printint(int x) {
void printdeez(int x) {
printf("%d", x);
}

Expand Down

0 comments on commit 2cf498f

Please sign in to comment.