2011年2月18日 星期五

Test on BubbleBall Level One

不囉嗦直接看 test:
#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,太苦了,要來睡覺了,晚安。)

沒有留言:

張貼留言