// //----------------------------------------------------------------------- // // Initialize() // // one-time initialization at program start // void CPlayEngine::Initialize(CPlayer* pPlayer, CPlayer* pPartner, CPlayer* pLHOpponent, CPlayer* pRHOpponent, CHandHoldings* pHoldings, CCardLocation* pCardLocation, CGuessedHandHoldings** ppGuessedHands, CBidEngine* pBidder, CPlayerStatusDialog* pStatusDlg) { // m_pPlayer = pPlayer; m_pPartner = pPartner; m_pLHOpponent = pLHOpponent; m_pRHOpponent = pRHOpponent; m_nPosition = pPlayer->GetPosition(); m_nPartnerPosition = m_pPartner->GetPosition(); m_pPartnersHand = &m_pPartner->GetHand(); // ASSERT(ISPOSITION(m_nPartnerPosition)); strcpy(szLHO, PositionToString(m_pLHOpponent->GetPosition())); strcpy(szRHO, PositionToString(m_pRHOpponent->GetPosition())); // m_pHand = pHoldings; m_pCardLocation = pCardLocation; m_ppGuessedHands = ppGuessedHands; m_pBidder = pBidder; m_pStatusDlg = pStatusDlg; }
// //--------------------------------------------------------- // // PBN File output routine // BOOL CEasyBDoc::WriteFilePBN(CArchive& ar) { pFile = ar.GetFile(); ASSERT(pFile != NULL); // write header WriteComment(""); WriteComment("EXPORT"); WriteComment("PBN Format 1.0"); WriteComment(FormString("File generated by Easy Bridge version %s", theApp.GetProgramVersionString())); WriteComment(""); // // write the data // // Event tag WriteLine(TAG_EVENT, FormString("%s Game", theApp.GetValue(tstrProgramTitle))); // Site Tag WriteLine(TAG_SITE, "At Home"); // NCR added At Home // Date Tag CTime time = CTime::GetCurrentTime(); WriteLine(TAG_DATE, time.Format("%Y.%m.%d")); /* * skip the round tag -- no longer mandatory in PBN 0.91+ * // Round Tag WriteLine(TAG_ROUND, ""); */ // Board Tag WriteLine(TAG_BOARD, "1"); // NCR added 1 // West/North/East/South Tags WriteLine(TAG_WEST, "Computer"); WriteLine(TAG_NORTH, "Computer"); WriteLine(TAG_EAST, "Computer"); WriteLine(TAG_SOUTH, "Human Player"); // Dealer Tag WriteLine(TAG_DEALER, FormString("%c", PositionToChar(m_nDealer))); // Vulnerable Tag CString strVulnerable; if ((m_bVulnerable[NORTH_SOUTH]) && (m_bVulnerable[EAST_WEST])) strVulnerable = "Both"; else if (m_bVulnerable[NORTH_SOUTH]) strVulnerable = "NS"; else if (m_bVulnerable[EAST_WEST]) strVulnerable = "EW"; else strVulnerable = "None"; WriteLine(TAG_VULNERABLE, strVulnerable); // deal tag CString strDeal = "W:"; int nPos = WEST; int i; // NCR-FFS added here, removed below for(/*int*/ i=0;i<4;i++) { CCardHoldings& cards = m_pPlayer[nPos]->GetHand().GetInitialHand(); strDeal += cards.GetGIBFormatHoldingsString(); nPos = GetNextPlayer(nPos); if (i < 3) strDeal += ' '; } WriteLine(TAG_DEAL, strDeal); // Scoring tag if (theApp.IsRubberInProgress()) WriteLine(TAG_SCORING, _T("Rubber")); else WriteLine(TAG_SCORING, _T("None")); // Declarer Tag if (ISPOSITION(m_nDeclarer)) WriteLine(TAG_DECLARER, FormString("%c", PositionToChar(m_nDeclarer))); else WriteLine(TAG_DECLARER, "?"); // Contract Tag if (ISBID(m_nContract)) { // NCR Include ContractToString() here as PBN file does NOT have space before X CString strBid; strBid.Format("%d%s", BID_LEVEL(m_nContract), szSuitNameShort[BID_SUIT(m_nContract)]); int nModifier = pDOC->GetContractModifier(); if (nModifier > 0) strBid += FormString("%s", ((nModifier == 1)? "X" : "XX")); // w/o space WriteLine(TAG_CONTRACT, strBid); // NCR replaced ContractToString(m_nContract) } else WriteLine(TAG_CONTRACT, "?"); // Result tag if (m_numTricksPlayed == 13) WriteLine(TAG_RESULT, FormString("%d", m_numTricksWon[m_nContractTeam])); // NCR removed extra "s else WriteLine(TAG_RESULT, "?"); // // write out the hands in comment form // CString strHands = "{\r\n" + pDOC->FormatOriginalHands() + "}"; WriteLine(strHands); // // write out auction // CString strBids = FormString("[Auction \"%c\"]", PositionToChar(m_nDealer)); // NCR Lowercased if (m_numBidsMade > 0) strBids += "\r\n"; nPos = m_nDealer; for(i=0;i<m_numBidsMade;i++) { strBids += FormString("%s ", ::BidToPBNString(m_nBiddingHistory[i])); nPos = ::GetNextPlayer(nPos); if ( (((i+1) % 4) == 0) && (i < m_numBidsMade-1) ) strBids += "\r\n"; } // add marker if needed if (!ISBID(m_nContract)) strBids += "\r\n*"; // and write out WriteLine(strBids); // // write out plays // CString strPlays = FormString("[Play \"%c\"]", PositionToChar(m_nGameLead)); // NCR Lowercased if (m_numTricksPlayed> 0) strPlays += "\r\n"; bool bLastRowFnd = false; // NCR added - only output single row with -s for(i=0;i<m_numTricksPlayed;i++) { int nPos = m_nGameLead; for(int j=0;j<4;j++) { CCard* pCard = m_pGameTrick[i][nPos]; if (pCard == NULL) { strPlays += "- "; bLastRowFnd = true; // NCR this row will end the output } else strPlays += FormString("%s ", pCard->GetName()); nPos = ::GetNextPlayer(nPos); } // end for(j) thru poisitions if (i < m_numTricksPlayed-1) strPlays += "\r\n"; if(bLastRowFnd) break; // NCR finished output plays on line with -s } // end for(i) thru tricks // add marker if needed if (m_numTricksPlayed < 13) strPlays += "\r\n*"; // and write out WriteLine(strPlays); // Generator Tag WriteLine(TAG_GENERATOR, FormString("Easy Bridge version %s", theApp.GetProgramVersionString())); // Description Tag WriteLine(TAG_DESCRIPTION, m_strFileDescription); // blank line // SkipLine(); // // write out the auction // // // All done // ar.Flush(); return TRUE; }