📄 rainview.cpp
字号:
pDC->SelectStockObject(WHITE_PEN);
pDC->MoveTo(0,rainRect.Height()-CHARHEIGHT*MSG_Y);
pDC->LineTo(rainRect.Width()-1,rainRect.Height()-CHARHEIGHT*MSG_Y);
pDC->MoveTo(0,rainRect.Height()-CHARHEIGHT*MSG_Y);
pDC->LineTo(0,rainRect.Height()-1);
// draw the face
CString face(" : -");
CString eye (" )");
pDC->SetTextColor(RGB(0,0,0));
pDC->TextOut(0,
rainRect.Height()-CHARHEIGHT*MSG_Y+1,
face);
pDC->SetTextColor(RGB(MapRand(255),MapRand(255),MapRand(255)));
pDC->TextOut(0,
rainRect.Height()-CHARHEIGHT*MSG_Y+1,
eye);
// draw the MSG
pDC->SetTextColor(RGB(10,10,10));
pDC->TextOut(5*CHARWIDTH,
rainRect.Height()-CHARHEIGHT*MSG_Y+1,
pDoc->getRainMsg());
}
void CRainView::drawConnectState(CDC *pDC)
{
// draw the black ground
CRainDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int i,lineNumber;
CString tmpStr;
pDC->SelectObject(&rainFont2);
pDC->SetTextColor(RGB(255,255,100));
if(pDoc->rainType==RT_SERVER)
{
tmpStr=pDoc->localUsrName;
pDC->TextOut(5,0,tmpStr);
tmpStr="("+pDoc->server.myIP+")";
pDC->TextOut(5,CHARHEIGHT*2,tmpStr);
lineNumber=2;
for(i=0;i<DFT_CLIENT_NUM;i++)
{
if(pDoc->server.slaveSocket[i].getConnectState()!=CONNECTION_LOST)
{
tmpStr=pDoc->server.slaveSocket[i].usrName;
pDC->TextOut(5,CHARHEIGHT*2*(lineNumber),tmpStr);
tmpStr="("+pDoc->server.slaveSocket[i].usrIP+")";
pDC->TextOut(5,CHARHEIGHT*2*(lineNumber+1),tmpStr);
lineNumber+=2;
}
}
}
else//rainType==RT_CLIENT
{
lineNumber=0;
for(i=0;i<pDoc->client.usrNumber;i++)
{
tmpStr=pDoc->client.usrName[i];
pDC->TextOut(5,CHARHEIGHT*2*lineNumber,tmpStr);
tmpStr="("+pDoc->client.usrIP[i]+")";
pDC->TextOut(5,CHARHEIGHT*2*(lineNumber+1),tmpStr);
lineNumber+=2;
}
}
}
void CRainView::drawDemo(CDC *pDC)
{
int flag;
CRainDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->SelectStockObject(BLACK_BRUSH);
pDC->Rectangle(0,
0,
rainRect.Width(),
rainRect.Height()-CHARHEIGHT*MSG_Y);
if(pDoc->getDemoState()==2)//
{
return;
}
if(pDoc->getDemoStep()==0)
{
pDC->SetTextColor(RGB(255,255,100));
pDC->SelectObject(&rainFont3);
pDC->TextOut(CHARWIDTH*(14-4),
CHARHEIGHT*7,
"Rain - Keyboard Superman");
pDC->SelectObject(&rainFont1);
pDC->TextOut(CHARWIDTH*14,
CHARHEIGHT*15,
"Copyright (C) 1996-2000 Rison Han");
pDC->TextOut(CHARWIDTH*(14+6),
CHARHEIGHT*18,
"risonhan@sina.com");
pDC->TextOut(CHARWIDTH*(14+4),
CHARHEIGHT*21,
"http://risonhan.yeah.net");
}
else/* demoStep==1 */
{
pDC->SelectObject(&rainFont3);
flag=MapRand(1);
pDC->SetTextColor(RGB(MapRand(255),MapRand(255),MapRand(255)));
if(flag)
{
pDC->TextOut((MapRand(30)+10+8)*CHARWIDTH,
(MapRand(15)+5)*CHARHEIGHT,
"Rain");
}
else
{
pDC->TextOut((MapRand(10)+5+8)*CHARWIDTH,
(MapRand(15)+5)*CHARHEIGHT,
"Keyboard Superman");
}
}
}
void CRainView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CRainDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int hit;
//process user input
if (pDoc->getRainState()==RS_RUNNING)
{
hit=pDoc->charInput(nChar);
if(hit)
{
MessageBeep(MB_OK);
pDoc->strHit();
}
Invalidate(false);//
}
CView::OnChar(nChar, nRepCnt, nFlags);
}
void CRainView::OnMenuitemStart()
{
// TODO: Add your command handler code here
CRainDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int ret;
if(!doRainStart())
{
return;
}
switch(pDoc->rainType)
{
case RT_LOCAL:
AfxGetApp()->m_pMainWnd->SetWindowText(LOCAL_TITLE);
if(pDoc->rainSource==RS_FILE)
{
if(!pDoc->openFile(pDoc->fileName))
{
MessageBox("Unable to open file !","Rain",MB_OK|MB_ICONWARNING);
return ;
}
}
SetTimer(STEP_TIMER_EVENT,pDoc->stepTime,NULL);
pDoc->setRainState(RS_RUNNING);
pDoc->setRainMsg(RUNNING_MSG);
break;
case RT_CLIENT:
AfxGetApp()->m_pMainWnd->SetWindowText(CLIENT_TITLE);
pDoc->client.myIP=localHostIP();
ret=pDoc->client.Create(0,
SOCK_STREAM,
FD_CONNECT|FD_READ,
NULL);
if(!ret)
{
MessageBox("Unable to Create socket!","Rain",MB_OK|MB_ICONWARNING);
return ;
}
pDoc->client.isSockCreated=1;
connectTimer=0;//
ret=connectDlg.DoModal();
if(ret!=IDOK)
{
pDoc->initRain();
return;
}
pDoc->client.serverIP=connectDlg.m_serverIP;
ret=pDoc->client.Connect(pDoc->client.serverIP,1818);
if(!ret)
{
MessageBox("Unable to start Connection!","Rain",MB_OK|MB_ICONWARNING);
pDoc->initRain();
return ;
}
pDoc->setRainState(RS_CONNECTING);
pDoc->setRainMsg(CONNECTING_MSG);
break;
case RT_SERVER:
AfxGetApp()->m_pMainWnd->SetWindowText(SERVER_TITLE);
pDoc->server.myIP=localHostIP();
if(pDoc->rainSource==RS_FILE)
{
if(!pDoc->openFile(pDoc->fileName))
{
MessageBox("Unable to open file !","Rain",MB_OK|MB_ICONWARNING);
return ;
}
}
ret=pDoc->server.Create(1818,
SOCK_STREAM,
FD_READ|FD_ACCEPT,
NULL);
if(!ret)
{
MessageBox("Unable to Create socket!","Rain",MB_OK|MB_ICONWARNING);
pDoc->initRain();
return;
}
pDoc->server.isSockCreated=1;
ret=pDoc->server.Listen(DFT_CLIENT_NUM);
if(!ret)
{
MessageBox("Unable to listen!","Rain",MB_OK|MB_ICONWARNING);
pDoc->initRain();
return;
}
pDoc->setRainState(RS_ACCEPTING);
pDoc->setRainMsg(ACCEPTING_MSG);
stateDlg.setFlag(0);
ret=stateDlg.DoModal();
if(ret!=IDOK)
{
pDoc->initRain();
pDoc->setRainState(RS_STOPPED);
pDoc->setRainMsg(STOPPED_MSG);
return ;
}
pDoc->server.begin(pDoc->stepTime);
timeLeft=BEGIN_TIME;
pDoc->setRainState(RS_BEGINNING);
pDoc->setRainMsg(RS_BEGINNING);
break;
}
}
void CRainView::OnMenuitemStop()
{
// TODO: Add your command handler code here
CRainDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->initRain();
KillTimer(STEP_TIMER_EVENT);
pDoc->setRainState(RS_STOPPED);
pDoc->setRainMsg(STOPPED_MSG);
}
void CRainView::OnMenuitemPause()
{
// TODO: Add your command handler code here
CRainDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pauseFlag++;
if(pauseFlag==2)
{
pauseFlag=0;
}
if(pauseFlag)
{
KillTimer(STEP_TIMER_EVENT);
pDoc->setRainState(RS_PAUSED);
pDoc->setRainMsg(PAUSED_MSG);
}
else
{
SetTimer(STEP_TIMER_EVENT,pDoc->stepTime,NULL);
pDoc->setRainState(RS_RUNNING);
pDoc->setRainMsg(RUNNING_MSG);
}
}
void CRainView::OnUpdateMenuitemStart(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CRainDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (pDoc->getRainState()==RS_STOPPED)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
void CRainView::OnUpdateMenuitemPause(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CRainDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if ((pDoc->getRainState()==RS_STOPPED)||(pDoc->rainType!=RT_LOCAL))
{
pCmdUI->Enable(FALSE);
}
else
{
pCmdUI->Enable(TRUE);
if (pauseFlag)
{
pCmdUI->SetCheck(TRUE);
}
else
{
pCmdUI->SetCheck(FALSE);
}
}
}
void CRainView::OnUpdateMenuitemStop(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CRainDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (pDoc->getRainState()==RS_STOPPED)
pCmdUI->Enable(FALSE);
else
pCmdUI->Enable(TRUE);
pDoc->setDemoState(0);
}
void CRainView::doResultReport()
{
resultDlg.DoModal();
}
void CRainView::doHighScore()
{
CRainDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CTime time=CTime::GetCurrentTime();
if(pDoc->currentSpeed>pDoc->recordSpeed)
{
pDoc->recordSpeed=pDoc->currentSpeed;
pDoc->recordUsrName=pDoc->localUsrName;
pDoc->recordCreateTime.Format("%d.%d.%d",time.GetYear(),time.GetMonth(),time.GetDay());
scoreDlg.DoModal();
}
}
int CRainView::doRainStart()
{
CRainDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int ret;
pDoc->setDemoState(2);
ret=startDlg.DoModal();
if(ret!=IDOK)
{
pDoc->setDemoState(0);
return 0;
}
pDoc->localUsrName=startDlg.m_localUsrName;
pDoc->stepTime=startDlg.m_stepTime;
pDoc->stepBetweenStr=startDlg.m_stepBetweenStr;
pDoc->maxStrlen=startDlg.m_maxStrlen;
pDoc->allStr=startDlg.m_allStr;
pDoc->rainType=startDlg.m_rainType;
pDoc->rainSource=startDlg.m_rainSource;
pDoc->rainLevel=startDlg.m_rainLevel;
pDoc->fileName=startDlg.m_fileName;
return 1;
}
void CRainView::OnMenuitemScore()
{
// TODO: Add your command handler code here
CRainDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->setDemoState(2);
scoreDlg.DoModal();
pDoc->setDemoState(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -