www.pudn.com > TetrisWang.zip > PropPage.cpp
// PropPage.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "PropPage.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
IMPLEMENT_DYNCREATE(CPropPageDifficute, CPropertyPage)
IMPLEMENT_DYNCREATE(CPropPageDisplay, CPropertyPage)
IMPLEMENT_DYNCREATE(CPropPageComputer, CPropertyPage)
IMPLEMENT_DYNCREATE(CPropPageOperate, CPropertyPage)
/////////////////////////////////////////////////////////////////////////////
// CPropPageDifficute property page
CPropPageDifficute::CPropPageDifficute() : CPropertyPage(CPropPageDifficute::IDD, CTetrisApp::m_nLangue == CTetrisApp::CHINESE ? IDS_DIFFICUTE_C : IDS_DIFFICUTE_E)
{
//{{AFX_DATA_INIT(CPropPageDifficute)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
CPropPageDifficute::~CPropPageDifficute()
{
}
void CPropPageDifficute::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPropPageDifficute)
DDX_Control(pDX, IDC_GROUP_TYPE, m_gpType);
DDX_Control(pDX, IDC_COMBO_SPEED2, m_coboSpeed2);
DDX_Control(pDX, IDC_COMBO_SPEED1, m_coboSpeed1);
DDX_Control(pDX, IDC_COMBO_LINES2, m_coboLines2);
DDX_Control(pDX, IDC_COMBO_LINES1, m_coboLines1);
DDX_Control(pDX, IDC_CHECK_TYPE_EXT2, m_chkExt2);
DDX_Control(pDX, IDC_CHECK_TYPE_EXT1, m_chkExt1);
DDX_Control(pDX, IDC_CHECK_TYPE_EAS2, m_chkEas2);
DDX_Control(pDX, IDC_CHECK_TYPE_EAS1, m_chkEas1);
DDX_Control(pDX, IDC_CHECK_TYPE_BASE2, m_chkBase2);
DDX_Control(pDX, IDC_CHECK_TYPE_BASE1, m_chkBase1);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPropPageDifficute, CPropertyPage)
//{{AFX_MSG_MAP(CPropPageDifficute)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPropPageDisplay property page
CPropPageDisplay::CPropPageDisplay() : CPropertyPage(CPropPageDisplay::IDD, CTetrisApp::m_nLangue == CTetrisApp::CHINESE ? IDS_DISPLAY_C : IDS_DISPLAY_E)
{
//{{AFX_DATA_INIT(CPropPageDisplay)
//}}AFX_DATA_INIT
}
CPropPageDisplay::~CPropPageDisplay()
{
}
void CPropPageDisplay::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPropPageDisplay)
DDX_Control(pDX, IDC_FRAME_BIG_TETRIS, m_frmBigTetris);
DDX_Control(pDX, IDC_COMBO_COLOR, m_coboColorType);
DDX_Control(pDX, IDC_FRAME_TETRIS, m_frmTetris);
DDX_Control(pDX, IDC_DISP_CHOOSE, m_btnChoose);
DDX_Control(pDX, IDC_DISP_SETCOLOR, m_btnSetColor);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPropPageDisplay, CPropertyPage)
//{{AFX_MSG_MAP(CPropPageDisplay)
ON_BN_CLICKED(IDC_DISP_CHOOSE, OnDispChoose)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_FRAME_TETRIS, OnFrameTetris)
ON_WM_LBUTTONDOWN()
ON_BN_CLICKED(IDC_DISP_SETCOLOR, OnDispSetcolor)
ON_WM_LBUTTONDBLCLK()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPropPageComputer property page
CPropPageComputer::CPropPageComputer() : CPropertyPage(CPropPageComputer::IDD, CTetrisApp::m_nLangue == CTetrisApp::CHINESE ? IDS_COMPUTER_C : IDS_COMPUTER_E)
{
//{{AFX_DATA_INIT(CPropPageComputer)
//}}AFX_DATA_INIT
}
CPropPageComputer::~CPropPageComputer()
{
}
void CPropPageComputer::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPropPageComputer)
DDX_Control(pDX, IDC_COMBO_FALL, m_coboFall);
DDX_Control(pDX, IDC_COMBO_INTELIGENCE, m_coboInteligence);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPropPageComputer, CPropertyPage)
//{{AFX_MSG_MAP(CPropPageComputer)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPropPageOperate property page
CPropPageOperate::CPropPageOperate() : CPropertyPage(CPropPageOperate::IDD, CTetrisApp::m_nLangue == CTetrisApp::CHINESE ? IDS_OPERATE_C : IDS_OPERATE_E)
{
//{{AFX_DATA_INIT(CPropPageOperate)
//}}AFX_DATA_INIT
}
CPropPageOperate::~CPropPageOperate()
{
}
void CPropPageOperate::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPropPageOperate)
DDX_Control(pDX, IDC_TEXT_ROATE2, m_btnRoate2);
DDX_Control(pDX, IDC_TEXT_ROATE1, m_btnRoate1);
DDX_Control(pDX, IDC_TEXT_RIGHT2, m_btnRight2);
DDX_Control(pDX, IDC_TEXT_RIGHT1, m_btnRight1);
DDX_Control(pDX, IDC_TEXT_LEFT2, m_btnLeft2);
DDX_Control(pDX, IDC_TEXT_LEFT1, m_btnLeft1);
DDX_Control(pDX, IDC_TEXT_DOWN2, m_btnDown2);
DDX_Control(pDX, IDC_TEXT_DOWN1, m_btnDown1);
DDX_Control(pDX, IDC_COMBO_GAMETYPE, m_coboGameType);
DDX_Control(pDX, IDC_CHECK_SAVEPOS, m_chkSavePos);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPropPageOperate, CPropertyPage)
//{{AFX_MSG_MAP(CPropPageOperate)
ON_BN_CLICKED(IDC_TEXT_ROATE1, OnTextRoate1)
ON_BN_CLICKED(IDC_TEXT_ROATE2, OnTextRoate2)
ON_BN_CLICKED(IDC_TEXT_DOWN1, OnTextDown1)
ON_BN_CLICKED(IDC_TEXT_DOWN2, OnTextDown2)
ON_BN_CLICKED(IDC_TEXT_LEFT1, OnTextLeft1)
ON_BN_CLICKED(IDC_TEXT_LEFT2, OnTextLeft2)
ON_BN_CLICKED(IDC_TEXT_RIGHT1, OnTextRight1)
ON_BN_CLICKED(IDC_TEXT_RIGHT2, OnTextRight2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CPropPageDisplay::OnDispChoose()
{
// TODO: Add your control notification handler code here
m_bChooseColor = !m_bChooseColor;
m_btnChoose.SetWindowText(GetLangueString("Set Tetris Color") + CString(m_bChooseColor?"<<":">>"));
m_btnSetColor.ShowWindow(m_bChooseColor);
m_frmTetris.ShowWindow(m_bChooseColor);
m_frmBigTetris.ShowWindow(m_bChooseColor);
}
void CPropPageDisplay::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CDC* pDC = m_frmTetris.GetWindowDC();
CRect rc;
m_frmTetris.GetWindowRect(rc);
pDC->Rectangle(0, 0, rc.Width(), rc.Height());
for (int i=0; iRectangle(CRect(pt, CSize(m_nSize*4, m_nSize*4)));
m_Tetris[i].Draw(pt, *pDC, FALSE, m_nSize, TRUE);
}
DrawBigTetris();
// Do not call CPropertyPage::OnPaint() for painting messages
}
void CPropPageDifficute::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CDC* pDC = m_gpType.GetWindowDC();
int nSize = 10;
for (int i=0; i<6; i++)
{
CPoint pt = CPoint(10+i%2*50, 20+i/2*45);
m_Tetris[i].Draw(pt, *pDC, FALSE, nSize);
}
// Do not call CPropertyPage::OnPaint() for painting messages
}
BOOL CPropPageDisplay::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// TODO: Add extra initialization here
SetDlgItemText(IDC_TXT_TETRIS_COLOR, GetLangueString("Tetris Color"));
SetDlgItemText(IDC_DISP_SETCOLOR, GetLangueString("Set Color"));
m_coboColorType.Clear();
m_coboColorType.AddString(GetLangueString("Own"));
m_coboColorType.AddString(GetLangueString("Same"));
m_coboColorType.AddString(GetLangueString("Random"));
SetInitValue();
m_nSize = 10;
m_nTetrisIndex = 0;
m_bChooseColor = TRUE;
OnDispChoose();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CPropPageComputer::OnInitDialog()
{
CPropertyPage::OnInitDialog();
SetWindowText(GetLangueString("Computer Attrib"));
SetDlgItemText(IDC_TXT_INTELIGENCE, GetLangueString("Inteligence"));
SetDlgItemText(IDC_TXT_FALLDOWN, GetLangueString("FallDown"));
m_coboInteligence.Clear();
m_coboInteligence.AddString(GetLangueString("Normal"));
m_coboInteligence.AddString(GetLangueString("Good"));
m_coboInteligence.AddString(GetLangueString("Very Good"));
m_coboFall.Clear();
m_coboFall.AddString(GetLangueString("NO"));
m_coboFall.AddString(GetLangueString("YES"));
SetInitValue();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CPropPageDifficute::OnInitDialog()
{
CPropertyPage::OnInitDialog();
SetWindowText(GetLangueString("Difficute"));
SetDlgItemText(IDC_TXT_SPEED, GetLangueString("Speed"));
SetDlgItemText(IDC_TXT_LINES, GetLangueString("Lines"));
SetDlgItemText(IDC_GROUP_TYPE, GetLangueString("Tetris Type"));
SetDlgItemText(IDC_CHECK_TYPE_BASE1, GetLangueString("Base Type"));
SetDlgItemText(IDC_CHECK_TYPE_BASE2, GetLangueString("Base Type"));
SetDlgItemText(IDC_CHECK_TYPE_EXT1, GetLangueString("Extend Type"));
SetDlgItemText(IDC_CHECK_TYPE_EXT2, GetLangueString("Extend Type"));
SetDlgItemText(IDC_CHECK_TYPE_EAS1, GetLangueString("Easy Type"));
SetDlgItemText(IDC_CHECK_TYPE_EAS2, GetLangueString("Easy Type"));
SetDlgItemText(IDC_TXT_PLAYER1, GetLangueString("Player1"));
SetDlgItemText(IDC_TXT_PLAYER2, GetLangueString("Player2"));
SetInitValue();
// TODO: Add extra initialization here
m_Tetris[0] = CTetris(1, m_pView->m_nColorRef[1], TRUE);
m_Tetris[1] = CTetris(4, m_pView->m_nColorRef[4], TRUE);
m_Tetris[2] = CTetris(7, m_pView->m_nColorRef[7], TRUE);
m_Tetris[3] = CTetris(8, m_pView->m_nColorRef[8], TRUE);
m_Tetris[4] = CTetris(19, m_pView->m_nColorRef[19], TRUE);
m_Tetris[5] = CTetris(20, m_pView->m_nColorRef[20], TRUE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CPropPageOperate::OnInitDialog()
{
CPropertyPage::OnInitDialog();
SetDlgItemText(IDC_TXT_ROATE, GetLangueString("Roate"));
SetDlgItemText(IDC_TXT_FALL_DOWN, GetLangueString("Fall Down"));
SetDlgItemText(IDC_TXT_MOVE_LEFT, GetLangueString("Move Left"));
SetDlgItemText(IDC_TXT_MOVE_RIGHT, GetLangueString("Move Right"));
SetDlgItemText(IDC_TXT_DEFAULT_GAME_TYPE, GetLangueString("Default Game Type"));
SetDlgItemText(IDC_CHECK_SAVEPOS, GetLangueString("Save Window Position"));
SetDlgItemText(IDC_TXT_PLAYER1, GetLangueString("Player1"));
SetDlgItemText(IDC_TXT_PLAYER2, GetLangueString("Player2"));
m_coboGameType.Clear();
m_coboGameType.AddString(GetLangueString("_Single"));
m_coboGameType.AddString(GetLangueString("_Double"));
m_coboGameType.AddString(GetLangueString("_Sitzkrieg"));
m_coboGameType.AddString(GetLangueString("_Net"));
m_coboGameType.AddString(GetLangueString("_Computer"));
m_btnDown1.SetIcon();
m_btnDown2.SetIcon();
m_btnRoate1.SetIcon();
m_btnRoate2.SetIcon();
m_btnLeft1.SetIcon();
m_btnLeft2.SetIcon();
m_btnRight1.SetIcon();
m_btnRight2.SetIcon();
// TODO: Add extra initialization here
SetInitValue();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPropPageComputer::OnSave()
{
m_pView->m_nComputerIntelligence = m_coboInteligence.GetCurSel();
m_pView->m_bComputerFallDown = m_coboFall.GetCurSel();
}
void CPropPageDifficute::OnSave()
{
m_pView->m_nStartSpeed[0] = m_coboSpeed1.GetCurSel();
m_pView->m_nStartSpeed[1] = m_coboSpeed2.GetCurSel();
m_pView->m_nStartLines[0] = m_coboLines1.GetCurSel()*3;
m_pView->m_nStartLines[1] = m_coboLines2.GetCurSel()*3;
m_pView->m_nTetrisType[0] = CGame::TETRIS_BASE;
m_pView->m_nTetrisType[1] = CGame::TETRIS_BASE;
if (m_chkExt1.GetCheck())
m_pView->m_nTetrisType[0] = CGame::TETRIS_EXTEND;
if (m_chkExt2.GetCheck())
m_pView->m_nTetrisType[1] = CGame::TETRIS_EXTEND;
if (m_chkEas1.GetCheck())
m_pView->m_nTetrisType[0] = CGame::TETRIS_EASY;
if (m_chkEas2.GetCheck())
m_pView->m_nTetrisType[1] = CGame::TETRIS_EASY;
}
void CPropPageDisplay::OnSave()
{
m_pView->m_nColorType = m_coboColorType.GetCurSel();
for (int i=0; im_nColorRef[i] = m_nColorRef[i];
}
}
void CPropPageOperate::OnSave()
{
for (int i=0; im_nCtrlKeys[i][j] = m_nKeys[i][j];
CWinApp* pApp = AfxGetApp();
pApp->WriteProfileInt("Operate", "SavePos", m_chkSavePos.GetCheck());
m_pView->m_nDefaultGameType = m_coboGameType.GetCurSel();
}
void CPropPageComputer::SetInitValue()
{
m_coboInteligence.SetCurSel(m_pView->m_nComputerIntelligence);
m_coboFall.SetCurSel(m_pView->m_bComputerFallDown);
}
void CPropPageDifficute::SetInitValue()
{
m_coboSpeed1.SetCurSel(m_pView->m_nStartSpeed[0]);
m_coboSpeed2.SetCurSel(m_pView->m_nStartSpeed[1]);
m_coboLines1.SetCurSel(m_pView->m_nStartLines[0]/3);
m_coboLines2.SetCurSel(m_pView->m_nStartLines[1]/3);
m_chkBase1.SetCheck(m_pView->m_nTetrisType[0]>=CGame::TETRIS_BASE);
m_chkBase2.SetCheck(m_pView->m_nTetrisType[1]>=CGame::TETRIS_BASE);
m_chkExt1.SetCheck(m_pView->m_nTetrisType[0]>=CGame::TETRIS_EXTEND);
m_chkExt2.SetCheck(m_pView->m_nTetrisType[1]>=CGame::TETRIS_EXTEND);
m_chkEas1.SetCheck(m_pView->m_nTetrisType[0]>=CGame::TETRIS_EASY);
m_chkEas2.SetCheck(m_pView->m_nTetrisType[1]>=CGame::TETRIS_EASY);
}
void CPropPageDisplay::SetInitValue()
{
m_coboColorType.SetCurSel(m_pView->m_nColorType);
for (int i=0; im_nColorRef[i];
}
for (i=0; im_nCtrlKeys[i][j];
SetKeyToTitle(i, j);
}
}
CWinApp* pApp = AfxGetApp();
m_chkSavePos.SetCheck(pApp->GetProfileInt("Operate", "SavePos", 1));
m_coboGameType.SetCurSel(m_pView->m_nDefaultGameType);
}
void CPropPageDisplay::OnFrameTetris()
{
// TODO: Add your control notification handler code here
}
void CPropPageDisplay::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (!m_bChooseColor)
{
CPropertyPage::OnLButtonDown(nFlags, point);
return;
}
CDC* pDC = m_frmTetris.GetWindowDC();
CRect rcFrm;
CRect rcDlg;
GetWindowRect(rcDlg);
m_frmTetris.GetWindowRect(rcFrm);
CRect rc = CRect(CPoint(rcFrm.left-rcDlg.left, rcFrm.top-rcDlg.top), CSize(rcFrm.Width(), rcFrm.Height()));
if (rc.PtInRect(point))
{
int nIndex = (point.y-rc.top)/(m_nSize*4) * 5 + (point.x-rc.left)/(m_nSize*4);
if (nIndex >= 0 && nIndex < MAX_TETRIS_TYPE && nIndex != m_nTetrisIndex)
{
m_nTetrisIndex = nIndex;
DrawBigTetris();
}
}
CPropertyPage::OnLButtonDown(nFlags, point);
}
void CPropPageDisplay::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (!m_bChooseColor)
{
CPropertyPage::OnLButtonDown(nFlags, point);
return;
}
CDC* pDC = m_frmTetris.GetWindowDC();
CRect rcFrm;
CRect rcDlg;
GetWindowRect(rcDlg);
m_frmTetris.GetWindowRect(rcFrm);
CRect rc = CRect(CPoint(rcFrm.left-rcDlg.left, rcFrm.top-rcDlg.top), CSize(rcFrm.Width(), rcFrm.Height()));
if (rc.PtInRect(point))
{
OnDispSetcolor();
}
CPropertyPage::OnLButtonDblClk(nFlags, point);
}
void CPropPageDisplay::DrawBigTetris()
{
CDC *pDC = m_frmBigTetris.GetWindowDC();
CRect rc;
m_frmBigTetris.GetWindowRect(rc);
pDC->Rectangle(0, 0, rc.Width(), rc.Height());
CPoint pt = CPoint(8, 10);
m_Tetris[m_nTetrisIndex].Draw(pt, *pDC, FALSE, CBlock::GetCell(), TRUE);
}
void CPropPageDisplay::OnDispSetcolor()
{
// TODO: Add your control notification handler code here
CColorDialog dlg;
if (dlg.DoModal() == IDOK)
{
m_nColorRef[m_nTetrisIndex] = dlg.GetColor();
m_Tetris[m_nTetrisIndex].SetColor(m_nColorRef[m_nTetrisIndex]);
}
Invalidate();
}
void CPropPageOperate::OnTextRoate1()
{
// TODO: Add your control notification handler code here
ShowSetKeyDlg(0, 2);
}
void CPropPageOperate::OnTextRoate2()
{
// TODO: Add your control notification handler code here
ShowSetKeyDlg(1, 2);
}
void CPropPageOperate::OnTextDown1()
{
// TODO: Add your control notification handler code here
ShowSetKeyDlg(0, 3);
}
void CPropPageOperate::OnTextDown2()
{
// TODO: Add your control notification handler code here
ShowSetKeyDlg(1, 3);
}
void CPropPageOperate::OnTextLeft1()
{
// TODO: Add your control notification handler code here
ShowSetKeyDlg(0, 0);
}
void CPropPageOperate::OnTextLeft2()
{
// TODO: Add your control notification handler code here
ShowSetKeyDlg(1, 0);
}
void CPropPageOperate::OnTextRight1()
{
// TODO: Add your control notification handler code here
ShowSetKeyDlg(0, 1);
}
void CPropPageOperate::OnTextRight2()
{
// TODO: Add your control notification handler code here
ShowSetKeyDlg(1, 1);
}
void CPropPageOperate::ShowSetKeyDlg(int nPlayer, int nKeyIndex)
{
CSetKeyDlg m_dlgSetKey(this);
m_dlgSetKey.m_sTitle = GetLangueString("Set Key") + " - ";
m_dlgSetKey.m_sTitle += (nPlayer ? GetLangueString("Player2") : GetLangueString("Player1")) + " - ";
switch (nKeyIndex)
{
case 0:
m_dlgSetKey.m_sTitle += GetLangueString("Move Left");
break;
case 1:
m_dlgSetKey.m_sTitle += GetLangueString("Move Right");
break;
case 2:
m_dlgSetKey.m_sTitle += GetLangueString("Roate");
break;
case 3:
m_dlgSetKey.m_sTitle += GetLangueString("Fall Down");
break;
}
m_dlgSetKey.m_nKeyValue = m_nKeys[nPlayer][nKeyIndex];
if (m_dlgSetKey.DoModal() == IDOK)
{
m_nKeys[nPlayer][nKeyIndex] = m_dlgSetKey.m_nKeyValue;
SetKeyToTitle(nPlayer, nKeyIndex);
}
}
void CPropPageOperate::SetKeyToTitle(int nPlayer, int nKeyIndex)
{
switch (nPlayer)
{
case 0:
{
switch (nKeyIndex)
{
case 0:
SetDlgItemText(IDC_TEXT_LEFT1, UintToString(m_nKeys[nPlayer][nKeyIndex]));
break;
case 1:
SetDlgItemText(IDC_TEXT_RIGHT1, UintToString(m_nKeys[nPlayer][nKeyIndex]));
break;
case 2:
SetDlgItemText(IDC_TEXT_ROATE1, UintToString(m_nKeys[nPlayer][nKeyIndex]));
break;
case 3:
SetDlgItemText(IDC_TEXT_DOWN1, UintToString(m_nKeys[nPlayer][nKeyIndex]));
break;
}
}
break;
case 1:
{
switch (nKeyIndex)
{
case 0:
SetDlgItemText(IDC_TEXT_LEFT2, UintToString(m_nKeys[nPlayer][nKeyIndex]));
break;
case 1:
SetDlgItemText(IDC_TEXT_RIGHT2, UintToString(m_nKeys[nPlayer][nKeyIndex]));
break;
case 2:
SetDlgItemText(IDC_TEXT_ROATE2, UintToString(m_nKeys[nPlayer][nKeyIndex]));
break;
case 3:
SetDlgItemText(IDC_TEXT_DOWN2, UintToString(m_nKeys[nPlayer][nKeyIndex]));
break;
}
}
break;
}
}