⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rainview.cpp

📁 好用的键盘超人源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -