#include <gtest/gtest.h>
#include "base_level.h"
#include "base_level_helper.h"
class LevelOne : public BaseLevel {
public:
LevelOne() {
InitWorld();
SetEdgeBackground(math::Vector2(-50.0f, 0.0f), math::Vector2(50.0f, 0.0f));
SetPlayer(math::Vector2(-10.0f, 3.0f));
SetGoal(math::Vector2(10.0f, 0.3f));
}
~LevelOne() {
DeinitWorld();
}
bool IsGoaledAfter(int seconds) {
float time_step = 1.0f/60.0f;
for (int i = 0; i < seconds; ++i) {
Simulate(time_step);
if (IsGoaled()) {
return true;
}
}
return false;
}
};
TEST(LevelOneTest, ReachGoal) {
LevelOne level;
level.SetTriangle(math::Vector2(-10.0f, 0.0f), 0.0f);
EXPECT_TRUE(level.IsGoaledAfter(60 * 10));
}
TEST(LevelOneTest, AnotherWayToReachGoal) {
LevelOne level;
level.SetTriangle(math::Vector2(-10.0f, 0.1f), 0.0f);
EXPECT_TRUE(level.IsGoaledAfter(60 * 10));
}
TEST(LevelOneTest, WrongPosition) {
LevelOne level;
level.SetTriangle(math::Vector2(-2.0f, 0.0f), 0.0f);
EXPECT_FALSE(level.IsGoaledAfter(60 * 5));
}
從測試可以看到 BaseLevel class 非常好用:生世界,接著設定背景、玩家、目標、三角形,接著模擬,詢問物體方位,判斷有沒有達陣,最後滅世界,就那麼簡單。這就是典型 Template method patterns 加 builder patterns 的應用。至於 BaseLevel 細節,我就不多說了,人有秘密才有神秘感,哈哈。
謝謝大家收看,接下來要拼 Level Two 了。(附註:當初以為已經過測試了,其實沒有。當我再寫其他類似測試後,發覺失敗,於是再把缺的東西補起來,修掉一些 bugs,弄到剛剛終於過了。@台灣時間 2011年2月20日 AM1:23,太苦了,要來睡覺了,晚安。)
沒有留言:
張貼留言