📄 mazeview.cpp
字号:
// mazeView.cpp : implementation of the CMazeView class
//
#include "stdafx.h"
#include "maze.h"
#include <time.h>
#include "mazeDoc.h"
#include "mazeView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMazeView
IMPLEMENT_DYNCREATE(CMazeView, CView)
BEGIN_MESSAGE_MAP(CMazeView, CView)
//{{AFX_MSG_MAP(CMazeView)
ON_COMMAND(ID_START, OnStart)
ON_WM_TIMER()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMazeView construction/destruction
CMazeView::CMazeView()
{
// TODO: add construction code here
srand((unsigned int) time(0));
m_pPerson = NULL;
}
CMazeView::~CMazeView()
{
delete m_pPerson;
m_pPerson = NULL;
}
BOOL CMazeView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMazeView drawing
void CMazeView::OnDraw(CDC* pDC)
{
CMazeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
static BOOL FirstIn = TRUE;
if ( FirstIn )
{
vector<MYPOINT> temp(52);
vector< vector<MYPOINT> > map(30,temp);
CreateMap(map);
m_Map = map;
m_pPerson = new CPerson(map);
m_BgMap.CreateCompatibleBitmap(pDC,750,420);
m_BgDC.CreateCompatibleDC(pDC);
m_BgDC.SelectObject(&m_BgMap);
CBitmap WhiteMap,GreenMap;
WhiteMap.LoadBitmap(IDB_WHITE);
GreenMap.LoadBitmap(IDB_GREEN);
CDC MapDC;
MapDC.CreateCompatibleDC(pDC);
for(int i=1;i<map.size()-1;++i)
for(int j=1;j<temp.size()-1;++j)
{
if ( map[i][j].access ) MapDC.SelectObject(&WhiteMap);
else MapDC.SelectObject(&GreenMap);
m_BgDC.BitBlt((j-1)*15,(i-1)*15,15,15,&MapDC,0,0,SRCCOPY);
}
pDC->BitBlt(0,0,750,450,&m_BgDC,0,0,SRCCOPY);
CBitmap BallMap;
BallMap.LoadBitmap(IDB_BALL);
CDC BallDC;
BallDC.CreateCompatibleDC(pDC);
BallDC.SelectObject(&BallMap);
pDC->BitBlt(2,2,10,10,&BallDC,0,0,SRCCOPY);
FirstIn = FALSE;
}
}
/////////////////////////////////////////////////////////////////////////////
// CMazeView printing
BOOL CMazeView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMazeView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMazeView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMazeView diagnostics
#ifdef _DEBUG
void CMazeView::AssertValid() const
{
CView::AssertValid();
}
void CMazeView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMazeDoc* CMazeView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMazeDoc)));
return (CMazeDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMazeView message handlers
void CMazeView::OnStart()
{
// TODO: Add your command handler code here
m_pPerson->ReStart(m_Map);
Display(m_pPerson->GetX(),m_pPerson->GetY());
SetTimer(1,100,NULL);
}
void CMazeView::Display(int x,int y)
{
CDC *pDC = GetDC();
pDC->BitBlt(0,0,750,450,&m_BgDC,0,0,SRCCOPY);
CPoint pos;
pos.x = (x-1) * 15 + 2;
pos.y = (y-1) * 15 + 2;
CBitmap BallMap;
BallMap.LoadBitmap(IDB_BALL);
CDC BallDC;
BallDC.CreateCompatibleDC(pDC);
BallDC.SelectObject(&BallMap);
pDC->BitBlt(pos.x,pos.y,10,10,&BallDC,0,0,SRCCOPY);
}
void CMazeView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
int direction;
if ( 0<=(direction = m_pPerson->SearchDir()) )
{
Display(m_pPerson->GetX(),m_pPerson->GetY());
if ( 50 == m_pPerson->GetX() && 28 == m_pPerson->GetY() )
{
KillTimer(1);
MessageBox("成功找到通路!");
}
}
else
{
KillTimer(1);
MessageBox("无通路!");
}
CView::OnTimer(nIDEvent);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -