diff --git a/examples/dice.rf b/examples/dice.rf new file mode 100644 index 0000000..634e524 --- /dev/null +++ b/examples/dice.rf @@ -0,0 +1,6 @@ +v + +0 + > 2. @ +> .0 ? 1. @ + > 3. @ diff --git a/src/rufunge.cpp b/src/rufunge.cpp index 48175d8..e3a327b 100644 --- a/src/rufunge.cpp +++ b/src/rufunge.cpp @@ -2,6 +2,8 @@ #include #include #include +#include /* srand, rand */ +#include /* time */ class DirSR : public Subroutine { @@ -220,6 +222,17 @@ public: } }; +class RandSR : public Subroutine +{ +public: + virtual void run(Thread *th) + { + EDIR dir = (EDIR)(rand() % 4); + th->setDir(dir); + th->move(); + } +}; + class TemplateSR : public Subroutine { public: @@ -269,12 +282,15 @@ void VM::assignStandardSR(Thread *th) c->operators['%'] = 13; c->operators['!'] = 14; c->operators['`'] = 15; + c->operators['?'] = 16; // TODO: ? # [ ] \ $ & ~ g p M P R L } void VM::init(Canvas *canvas) { + srand (time(NULL)); + assert(threads.size() == 0); assert(subroutines.size() == 0); @@ -298,6 +314,7 @@ void VM::init(Canvas *canvas) loadSubroutine(new ModSR); loadSubroutine(new NotSR); loadSubroutine(new GtSR); + loadSubroutine(new RandSR); assignStandardSR(th); }