Archived
1
0
Fork 0

Began implementing the funge field

This commit is contained in:
Julien Dessaux 2021-09-30 21:41:27 +02:00
parent 4a296c28ee
commit 9a5ff5f233
6 changed files with 135 additions and 0 deletions

37
src/field.nim Normal file
View file

@ -0,0 +1,37 @@
type
Line = ref object
x, l: int
columns: seq[int]
Field* = ref object
x, y: int
lx, ly: int
lines: seq[Line]
proc get*(f: Field, x, y: int): int =
if y >= f.y and y < f.y + f.ly:
let l = f.lines[y-f.y]
if x >= l.x and x < l.x + l.l:
return l.columns[x-l.x]
return int(' ')
proc isIn*(f: Field, x, y: int): bool =
return x >= f.x and y >= f.y and x < f.x+f.lx and y < f.y+f.ly
when defined(unitTesting):
let minimal = Field(
x: 0,
y: 0,
lx: 1,
ly: 1,
lines: @[
Line(x: 0, l: 1, columns: @[int('@')])
]
)
suite "Field":
test "Field.get":
check minimal.get(0,0) == int('@')
check minimal.get(1,0) == int(' ')
test "Field.isIn":
check minimal.isIn(0, 0) == true
check minimal.isIn(1, 0) == false

5
src/nimfunge98.nim Normal file
View file

@ -0,0 +1,5 @@
import nimfunge98/field/field
let f:Field
echo f.get(3,2)