예제 #1
0
void CTable::Load()
{
	int SavShowCards = 0;

	FILE* sav = fopen( GAMESDIR "/solitair.sav", "rb" );

	if( sav == NULL ) return;

	fread( &SavShowCards, 1, sizeof( SavShowCards ), sav );

	if( ( SavShowCards != 3 ) && ( SavShowCards != 1 ) )
	{
		return;
	}

	ShowCards = SavShowCards;

	fread( &win_counter, 1, sizeof( win_counter ), sav );

	CCard card;
	unsigned char CardsStored;
	CBuffer buffer;


//Restore BLOCK

	block.RemoveAll();

	fread( &CardsStored, 1, sizeof( CardsStored ), sav );

	buffer.RemoveAll();
	for( unsigned char i = 0; i < CardsStored; i++ )
	{
		fread( &card, 1, sizeof( card ), sav );
		buffer.PushCard( card, true );
	}

	for( unsigned char i = 0; i < CardsStored; i++ )
	{
		block.PushCard( buffer.PopCard(), true );
	}

//Restore Wastepile
	fread( &CardsStored, 1, sizeof( CardsStored ), sav );

	buffer.RemoveAll();
	for( unsigned char i = 0; i < CardsStored; i++ )
	{
		fread( &card, 1, sizeof( card ), sav );
		buffer.PushCard( card, true );
	}

	for( unsigned char i = 0; i < CardsStored; i++ )
	{
		wastepile.PushCard( buffer.PopCard(), true );
	}
//Restore HAND
	int HSource;
	fread( &HSource, 1, sizeof( HSource ), sav );

	switch( HSource )
	{
		case 0:
			hand.SetSource(NULL);
			break;
		case BLOCK:
			hand.SetSource(&block);
			break;
		case WASTEPILE:
			hand.SetSource(&wastepile);
			break;
		case FOUNDATION1:
			hand.SetSource(&foundation[0]);
			break;
		case FOUNDATION2:
			hand.SetSource(&foundation[1]);
			break;
		case FOUNDATION3:
			hand.SetSource(&foundation[2]);
			break;
		case FOUNDATION4:
			hand.SetSource(&foundation[3]);
			break;
		case TABLEAU1:
			hand.SetSource(&tableau[0]);
			break;
		case TABLEAU2:
			hand.SetSource(&tableau[1]);
			break;
		case TABLEAU3:
			hand.SetSource(&tableau[2]);
			break;
		case TABLEAU4:
			hand.SetSource(&tableau[3]);
			break;
		case TABLEAU5:
			hand.SetSource(&tableau[4]);
			break;
		case TABLEAU6:
			hand.SetSource(&tableau[5]);
			break;
		case TABLEAU7:
			hand.SetSource(&tableau[6]);
			break;
	}


	fread( &CardsStored, 1, sizeof( CardsStored ), sav );

	buffer.RemoveAll();
	for( unsigned char i = 0; i < CardsStored; i++ )
	{
		fread( &card, 1, sizeof( card ), sav );
		buffer.PushCard( card, true );
	}

	for( unsigned char i = 0; i < CardsStored; i++ )
	{
		hand.PushCard( buffer.PopCard(), true );
	}

//Restore Tableaus
	for( int j = 0; j < 7; j++ )
	{
		fread( &CardsStored, 1, sizeof( CardsStored ), sav );

		buffer.RemoveAll();
		for( unsigned char i = 0; i < CardsStored; i++ )
		{
			fread( &card, 1, sizeof( card ), sav );
			buffer.PushCard( card, true );
		}

		for( unsigned char i = 0; i < CardsStored; i++ )
		{
			tableau[j].PushCard( buffer.PopCard(), true );
		}
	}
//Restore Foundations
	for( int j = 0; j < 4; j++ )
	{
		fread( &CardsStored, 1, sizeof( CardsStored ), sav );

		buffer.RemoveAll();
		for( unsigned char i = 0; i < CardsStored; i++ )
		{
			fread( &card, 1, sizeof( card ), sav );
			buffer.PushCard( card, true );
		}

		for( unsigned char i = 0; i < CardsStored; i++ )
		{
			foundation[j].PushCard( buffer.PopCard(), true );
		}
	}


	fclose( sav );

}