void DoEngineDataTest() { srand(random()); EngineData data; ifstream in("../../data/engine.dat"); data.Load(in); RandomLayoutsGenerator generator; generator.Reset(); generator.SetPlayerCards( AddCardToSet( EmptyCardsSet, CreateCard(SuitHearts, 4) ), 2 ); vector<Layout> result = generator.GenerateLayouts(10000); generator.Reset(); generator.SetWidowCards( AddCardToSet( AddCardToSet( EmptyCardsSet, CreateCard(SuitDiamonds, 3) ), CreateCard(SuitHearts, 4) ) ); result = generator.GenerateLayouts(10000); printLayouts(result); }
static void printLayouts(const vector<Layout>& layouts) { multi_array<int, 2> totalCounts(boost::extents[NumOfPlayers][32]); for( int i = 0; i < layouts.size(); i++ ) { GetLog() << layouts[i].Cards[0].Value << " " << layouts[i].Cards[1].Value << " " << layouts[i].Cards[2].Value << endl; PrefAssert( CardsSetsIntersection( layouts[i].Cards[0], layouts[i].Cards[1] ) == EmptyCardsSet ); PrefAssert( CardsSetsIntersection( layouts[i].Cards[0], layouts[i].Cards[2] ) == EmptyCardsSet ); PrefAssert( CardsSetsIntersection( layouts[i].Cards[2], layouts[i].Cards[1] ) == EmptyCardsSet ); PrefAssert( CardsSetSize(layouts[i].Cards[0]) == 10 && CardsSetSize(layouts[i].Cards[1]) == 10 && CardsSetSize(layouts[i].Cards[2]) == 10 ); int count = 0; for( SuitForwardIterator itSuit; itSuit.HasNext(); itSuit.Next() ) { for( RankForwardIterator itRank; itRank.HasNext(); itRank.Next() ) { Card card = CreateCard(itSuit.GetObject(), itRank.GetObject()); for( int player = 0; player < NumOfPlayers; player++ ) { if( IsSetContainsCard(layouts[i].Cards[player], card ) ) { totalCounts[player][count]++; } } count++; } } } GetLog() << "Cards distribution: " << endl; for( int i = 0; i < NumOfPlayers; i++ ) { GetLog() << "Player " << i << endl; for( int j = 0; j < 32; j++ ) { GetLog() << totalCounts[i][j] << " "; } GetLog() << endl; } }
int AddStandardCards(CardLib api, int nJokers) { DEBUG_FUNC_NAME; int nSuit; int nValue; for(nSuit=SUIT_START; nSuit<=SUIT_END; nSuit++) { for(nValue = VALUE_START; nValue<=VALUE_END; nValue++) { Card c; CreateCard(&c, nSuit, nValue); AddCard(api, c); } } int n; for(n=0; n<nJokers; n++) { Card c; CreateCard(&c, JOKER, -1); AddCard(api, c); } return CARDLIB_OK; }
void StatusPrint() { clock_t CurTime = clock(); switch (GameStatus) { case START: sprintf(StatString, "\t\t\t [같은 카드 맞추기] \n\n" "\t\t===================================\n\n" "\t\t같은 카드를 맞추는 게임입니다.\n" "\t\t스테이지 당 뒤집기 제한이 있습니다.\n" "\t\t카드를 전부 맞추면 미션 성공입니다.\n" "\t\t뒤집기 기회가 0이 되면 미션 실패입니다.\n" "\t\t스테이지는 총 3레벨로 구성되어있습니다.\n\n" "\t\t===================================\n\n" "\t\t\t - 조 작 법 -\n\n" "\t\t이동 : 방향키 | 카드 선택 : SPACE BAR\n" "\t\t-----------------------------------\n" "\t\t게임 시작 : SPACE BAR | 게임 종료 : q\n\n\n\n"); ScreenPrint(0, 3, StatString); break; case INIT: // 초기화 // Card 초기화 Stage.CardCount = CardCountArray[Stage.Level]; // Stage Card 수 Stage.TypeCount = TypeCountArray[Stage.Level]; // Stage CardType 수 CreateCard(); // 카드 생성 함수 matchCardCount = 0; // 맞춘 Card 수 for (int i = 0; i < MaxCardCount; i++) { IsMatchCard[i] = false; // 이미 맞춘 Card 배열 } // Chocie 초기화 Choice.select = 9; // Board 초기화 Board.leftX = 15; Board.rightX = BOARD_WIDTH - 15; Board.topY = 4; Board.bottomY = BOARD_HEIGH - 4; // Game 상태 초기화 selectChance = ChanceArray[Stage.Level]; // 화면출력 if (CurTime - Stat_OldTime < PrintTime) { sprintf(StatString, "[INIT 화면]"); ScreenPrint(30, 10, StatString); } else { GameStatus = READY; Stat_OldTime = CurTime; } break; case READY: if (CurTime - Stat_OldTime < PrintTime) { sprintf(StatString, "[READY] %d 스테이지", Stage.Level + 1); ScreenPrint(25, 10, StatString); } else { GameStatus = RUNNING; Stat_OldTime = CurTime; } break; case RUNNING: if (matchCardCount == (Stage.CardCount / 2)) { GameStatus = SUCCESS; } else if (selectChance == 0) { GameStatus = FAILED; } break; case STOP: sprintf(StatString, "[STOP 화면]"); ScreenPrint(30, 10, StatString); break; case SUCCESS: if (Stage.Level < 2) { sprintf(StatString, "%d 스테이지 CLEAR \n\n" "\t\t\t다음 스테이지? [Y/N]", Stage.Level + 1); } else { sprintf(StatString, "모든 스테이지 CLEAR \n\n" "\t\t\t게임 결과창 [Y]"); } ScreenPrint(25, 10, StatString); break; case FAILED: sprintf(StatString, " %d 스테이지 GAME OVER\n\n" "\t\t\t 재도전? [Y/N]", Stage.Level + 1); ScreenPrint(25, 10, StatString); break; case RESULT: sprintf(StatString, "게임 종료. 수고하셨습니다. \n" "\t\t\t %d 스테이지까지 플레이하셨습니다. \n" "\t\t\t 나가려면 Q를 누르세요.", Stage.Level + 1); ScreenPrint(30, 10, StatString); break; default: break; } }