diff options
author | Mike Buland <eichlan@xagasoft.com> | 2011-12-31 00:13:13 -0700 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2011-12-31 00:13:13 -0700 |
commit | 55e6f570f5760e970c6523458914b5e4c63a6ce4 (patch) | |
tree | ae996d612c6c55b914a960139a618922bf7e4971 /src | |
parent | 3357b0a0ecc4d36ccd3c2668e9d55aaaefedf4df (diff) | |
download | stage-55e6f570f5760e970c6523458914b5e4c63a6ce4.tar.gz stage-55e6f570f5760e970c6523458914b5e4c63a6ce4.tar.bz2 stage-55e6f570f5760e970c6523458914b5e4c63a6ce4.tar.xz stage-55e6f570f5760e970c6523458914b5e4c63a6ce4.zip |
Random function added, other fixes.
Diffstat (limited to 'src')
-rw-r--r-- | src/functiondisplay.cpp | 7 | ||||
-rw-r--r-- | src/functionrandom.cpp | 30 | ||||
-rw-r--r-- | src/functionrandom.h | 16 | ||||
-rw-r--r-- | src/game.cpp | 3 | ||||
-rw-r--r-- | src/gamestate.cpp | 3 | ||||
-rw-r--r-- | src/main.cpp | 5 | ||||
-rw-r--r-- | src/variable.cpp | 11 |
7 files changed, 69 insertions, 6 deletions
diff --git a/src/functiondisplay.cpp b/src/functiondisplay.cpp index ab37a08..7328293 100644 --- a/src/functiondisplay.cpp +++ b/src/functiondisplay.cpp | |||
@@ -15,12 +15,13 @@ FunctionDisplay::~FunctionDisplay() | |||
15 | 15 | ||
16 | void FunctionDisplay::call( class GameState &gState ) | 16 | void FunctionDisplay::call( class GameState &gState ) |
17 | { | 17 | { |
18 | // Bu::String s = gState.popDeref().to( Variable::tString ).getString(); | 18 | Bu::String s = gState.popDeref().to( Variable::tString ).getString(); |
19 | 19 | sio << format( s ) << sio.nl; | |
20 | // sio << format( s ) << sio.nl; | ||
21 | 20 | ||
21 | /* | ||
22 | Variable v = gState.popDeref(); | 22 | Variable v = gState.popDeref(); |
23 | sio << "Display: " << v << sio.nl; | 23 | sio << "Display: " << v << sio.nl; |
24 | */ | ||
24 | } | 25 | } |
25 | 26 | ||
26 | Bu::String FunctionDisplay::format( const Bu::String &sSrc ) | 27 | Bu::String FunctionDisplay::format( const Bu::String &sSrc ) |
diff --git a/src/functionrandom.cpp b/src/functionrandom.cpp new file mode 100644 index 0000000..2665a14 --- /dev/null +++ b/src/functionrandom.cpp | |||
@@ -0,0 +1,30 @@ | |||
1 | #include "functionrandom.h" | ||
2 | |||
3 | #include "gamestate.h" | ||
4 | |||
5 | #include <stdlib.h> | ||
6 | |||
7 | FunctionRandom::FunctionRandom() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | FunctionRandom::~FunctionRandom() | ||
12 | { | ||
13 | } | ||
14 | |||
15 | void FunctionRandom::call( class GameState &gState ) | ||
16 | { | ||
17 | Variable vHigh = gState.popDeref(); | ||
18 | Variable vLow = gState.popDeref(); | ||
19 | |||
20 | if( vHigh.getType() != vLow.getType() ) | ||
21 | throw Bu::ExceptionBase("Different types in random!"); | ||
22 | |||
23 | if( vLow.getType() == Variable::tInt ) | ||
24 | { | ||
25 | gState.push( Variable( (int64_t)( | ||
26 | (random()%(vHigh.getInt()-vLow.getInt()+1ll))+vLow.getInt() | ||
27 | ) ) ); | ||
28 | } | ||
29 | } | ||
30 | |||
diff --git a/src/functionrandom.h b/src/functionrandom.h new file mode 100644 index 0000000..b30f110 --- /dev/null +++ b/src/functionrandom.h | |||
@@ -0,0 +1,16 @@ | |||
1 | #ifndef FUNCTION_RANDOM_H | ||
2 | #define FUNCTION_RANDOM_H | ||
3 | |||
4 | #include "function.h" | ||
5 | |||
6 | class FunctionRandom : public Function | ||
7 | { | ||
8 | public: | ||
9 | FunctionRandom(); | ||
10 | virtual ~FunctionRandom(); | ||
11 | |||
12 | virtual Bu::String getName() const { return "random"; } | ||
13 | virtual void call( class GameState &gState ); | ||
14 | }; | ||
15 | |||
16 | #endif | ||
diff --git a/src/game.cpp b/src/game.cpp index 910cec2..c19b039 100644 --- a/src/game.cpp +++ b/src/game.cpp | |||
@@ -4,13 +4,16 @@ | |||
4 | #include "functionexists.h" | 4 | #include "functionexists.h" |
5 | #include "functiondelete.h" | 5 | #include "functiondelete.h" |
6 | #include "functionexit.h" | 6 | #include "functionexit.h" |
7 | #include "functionrandom.h" | ||
7 | 8 | ||
8 | Game::Game() | 9 | Game::Game() |
9 | { | 10 | { |
11 | hGlobalParam.insert("start", Variable::newSituationName("start") ); | ||
10 | addFunction( new FunctionDisplay() ); | 12 | addFunction( new FunctionDisplay() ); |
11 | addFunction( new FunctionExists() ); | 13 | addFunction( new FunctionExists() ); |
12 | addFunction( new FunctionDelete() ); | 14 | addFunction( new FunctionDelete() ); |
13 | addFunction( new FunctionExit() ); | 15 | addFunction( new FunctionExit() ); |
16 | addFunction( new FunctionRandom() ); | ||
14 | } | 17 | } |
15 | 18 | ||
16 | Game::~Game() | 19 | Game::~Game() |
diff --git a/src/gamestate.cpp b/src/gamestate.cpp index dcae848..2032d5c 100644 --- a/src/gamestate.cpp +++ b/src/gamestate.cpp | |||
@@ -465,7 +465,8 @@ void GameState::parse( const AstBranch::NodeList &lCode ) | |||
465 | { | 465 | { |
466 | Variable v = popDeref(); | 466 | Variable v = popDeref(); |
467 | Variable x = popDeref(); | 467 | Variable x = popDeref(); |
468 | if( v.getType() == Variable::tDictionary ) | 468 | if( v.getType() == Variable::tDictionary || |
469 | v.getType() == Variable::tList ) | ||
469 | { | 470 | { |
470 | push( Variable( v.has( x ) ) ); | 471 | push( Variable( v.has( x ) ) ); |
471 | } | 472 | } |
diff --git a/src/main.cpp b/src/main.cpp index b3dbba7..1f532d9 100644 --- a/src/main.cpp +++ b/src/main.cpp | |||
@@ -3,6 +3,9 @@ | |||
3 | #include "gamestate.h" | 3 | #include "gamestate.h" |
4 | #include "parser.tab.h" | 4 | #include "parser.tab.h" |
5 | 5 | ||
6 | #include <stdlib.h> | ||
7 | #include <time.h> | ||
8 | |||
6 | #include <bu/sio.h> | 9 | #include <bu/sio.h> |
7 | using namespace Bu; | 10 | using namespace Bu; |
8 | 11 | ||
@@ -28,6 +31,8 @@ int main( int argc, char *argv[] ) | |||
28 | 31 | ||
29 | fclose( in ); | 32 | fclose( in ); |
30 | 33 | ||
34 | srandom( time( NULL ) ); | ||
35 | |||
31 | Game *pGame = bld.getGame(); | 36 | Game *pGame = bld.getGame(); |
32 | 37 | ||
33 | GameState gs( pGame ); | 38 | GameState gs( pGame ); |
diff --git a/src/variable.cpp b/src/variable.cpp index 5296848..a3fb4a2 100644 --- a/src/variable.cpp +++ b/src/variable.cpp | |||
@@ -242,8 +242,15 @@ bool Variable::has( const Variable &vKey ) | |||
242 | { | 242 | { |
243 | if( eType == tDictionary ) | 243 | if( eType == tDictionary ) |
244 | return hValue->has( vKey ); | 244 | return hValue->has( vKey ); |
245 | // else if( eType == tList ) | 245 | else if( eType == tList ) |
246 | // return lValue->contains( vKey ); | 246 | { |
247 | for( VariableList::const_iterator i = lValue->begin(); i; i++ ) | ||
248 | { | ||
249 | if( (*i) == vKey ) | ||
250 | return true; | ||
251 | } | ||
252 | return false; | ||
253 | } | ||
247 | else | 254 | else |
248 | throw Bu::ExceptionBase("Insert on non-dictionary."); | 255 | throw Bu::ExceptionBase("Insert on non-dictionary."); |
249 | } | 256 | } |