Beispiel #1
0
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);	
}
Beispiel #2
0
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;
	}
	
}
Beispiel #3
0
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;
}
Beispiel #4
0
	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;
		}
	}