Began implementing the funge field
This commit is contained in:
parent
4a296c28ee
commit
9a5ff5f233
6 changed files with 135 additions and 0 deletions
37
src/field.nim
Normal file
37
src/field.nim
Normal 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
5
src/nimfunge98.nim
Normal file
|
@ -0,0 +1,5 @@
|
|||
import nimfunge98/field/field
|
||||
|
||||
let f:Field
|
||||
|
||||
echo f.get(3,2)
|
Reference in a new issue