Re: [討論] ?A?B猜數字遊戲的AI
看到好多人回覆就想來參一腳,於是就設法為xAxB的遊戲用物件導向的方式封裝起來,
之後xAxBGame_1這個class就這樣生出來了,而整個程式碼在這邊:
http://ideone.com/0v3oV
擷取一部分的程式碼,首先可以看到建立xAxBGame_1物件的部分:
// 想建構xAxBGame_1卻不想保留sampleSpace和sampleLength(因為會包在裡面),
// 所以就想到用Lambda來搞。
auto const game = (
[]() -> xAxBGame_1<int> {
int sampleSpace[] = {0,1,2,3,4,5,6,7,8,9};
int sampleLength = 4;
return xAxBGame_1<int>(
sampleLength,
xAxBGame_1<int>::SampleSpace(&sampleSpace[0],
&sampleSpace[10])
);
}
)();
// 方便建構遊戲用四位數整數用(型別為Sample)的公用程式,像函數原型如下:
// xAxBGame_1<int>::Sample createGameSample(int e1, int e2, int e3, int e4)
auto const createGameSample = (
[](int e1, int e2, int e3, int e4) -> xAxBGame_1<int>::Sample{
int sampleElements[4];
sampleElements[0] = e1; sampleElements[1] = e2;
sampleElements[2] = e3; sampleElements[3] = e4;
return xAxBGame_1<int>::Sample(&sampleElements[0],
&sampleElements[4]);
}
);
現在有了game和createGameSample就可以大膽的來實驗game旗下的二個物件:
game.sampleChecker() 以及
game.sampleComparer()
先來試試game.sampleChecker()這物件:
cout << game.sampleChecker().check(createGameSample(0,1,2,-3)) << endl;
cout << game.sampleChecker().check(createGameSample(0,2,2,3)) << endl;
cout << game.sampleChecker().check(createGameSample(0,1,2,3)) << endl;
// 沒意外的話結果應為:
// 0
// 0
// 1
// game.sampleChecker().check會檢查 是否有重覆 以及 是否有非法 項目
另外來測試game.sampleComparer()這個物件,因為比較的結果型別為
xAxBGame_1<int>::xAxB,所以另外寫了個公用程式把xAxB轉型成string:
template<typename TxAxB>
const std::string toString_xAxB(const TxAxB& xAB) {
內容省略..
}
接著就回到測試game.sampleComparer()這個正題:
auto sample1 = createGameSample(0,1,2,3);
auto sample2 = createGameSample(0,2,4,5);
cout << toString_xAxB(game.sampleComparer().compare(sample1, sample2))
<< endl;
// 沒意外的話結果為:
// 1A1B
// 呵呵,大功告成~~~ (雖然沒有完整測試過就是了@@"
大致上就game.sampleComparer()和game.sampleChecker()要特別講的,
就這樣~~~ 祝各位用得順心 看得順眼 =ˇ=
By s3748679
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.238.151.222
→
09/23 19:16, , 1F
09/23 19:16, 1F
→
09/23 19:16, , 2F
09/23 19:16, 2F
→
09/23 19:17, , 3F
09/23 19:17, 3F
討論串 (同標題文章)
完整討論串 (本文為第 9 之 11 篇):