看板 C_and_CPP 關於我們 聯絡資訊
看到好多人回覆就想來參一腳,於是就設法為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
proach:我以前一直夢想要開個麻將伺服器,讓各家電腦連線進來 09/23 19:16
proach:打麻將,打個幾百萬場,評斷一下機率在麻將內有多重要 09/23 19:16
proach:我覺得面對機率很大的遊戲,才能比較出AI的一些特性 09/23 19:17