// movieWnd.cpp : implementation file // //#include "stdafx.h" #include "movie.h" #include "movieWnd.h" #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // movieWnd IMPLEMENT_DYNCREATE(movieWnd, CFrameWnd) int x=0,y=0,i,d,c,xp; int maze[8][8]={ 1,1,1,1,1,1,2,1, //第一行,值为2的元素代表入口 3,0,0,1,0,0,0,1, //第二行,值为3的元素代表出口 1,1,0,0,0,1,1,1, //第三行 1,0,0,1,0,0,0,1, //第四行 1,1,1,1,0,1,1,1, //第五行 1,0,0,0,0,0,0,1, //第六行 1,0,1,0,1,0,0,1, //第七行 1,1,1,1,1,1,1,1 //第八行 }; int m,n; int k,p; BOOL Start=true; movieWnd::movieWnd() { Create(NULL,"绘图视窗",WS_OVERLAPPEDWINDOW,CRect(0,0,320,320));// char ch[8]; for (int i=0;i<4;i++) { for (int j=0;j<4;j++) { sprintf(ch,"%d.%d.bmp",i+1,j+1); bitmap[i][j]=new CBitmap; bitmap[i][j]->m_hObject=LoadImage(NULL,ch,IMAGE_BITMAP,40,40,LR_LOADFROMFILE); } } mdc=new CDC; CClientDC dc(this); mdc->CreateCompatibleDC(&dc); mdc->SelectObject(bitmap[0][0]); dir=0,index=0; for( i=0;i<8;i++) { for (int j=0;j<8;j++) { if (maze[i][j]==2) { m=i; n=j; break; } } } wall=new CBitmap; wall->m_hObject=LoadImage(NULL,"wall.bmp",IMAGE_BITMAP,40,40,LR_LOADFROMFILE); } movieWnd::~movieWnd() { } BEGIN_MESSAGE_MAP(movieWnd, CFrameWnd) //{{AFX_MSG_MAP(movieWnd) ON_WM_PAINT() ON_WM_CREATE() ON_WM_TIMER() ON_WM_KEYDOWN() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // movieWnd message handlers void movieWnd::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here //dc.BitBlt(0,0,40,40,mdc,0,0,SRCCOPY); // Do not call CFrameWnd::OnPaint() for painting messages } int movieWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here SetTimer(1,40,NULL); return 0; } void movieWnd::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default if (Start) { start(); } /* CClientDC dc(this); if (dir>=4) { dir=0; } if (index<4) { mdc->SelectObject(bitmap[dir][index]); index++; } else { index=0; dir++; mdc->SelectObject(bitmap[dir][index]); } dc.BitBlt(0,0,40,40,mdc,0,0,SRCCOPY); */ CFrameWnd::OnTimer(nIDEvent); } void movieWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default CClientDC dc(this); dc.BitBlt(n*40+x,m*40+y,40,40,mdc,0,0,WHITENESS); k=(int)floor((n*40+x)/40); p=(int)floor((m*40+y)/40); if (maze[p][k]==3) { dc.TextOut(50,50,"出去了"); } if (nChar==VK_DOWN) { y+=40; k=(n*40+x)/40; p=(m*40+y)/40; if (maze[p][k]==1) { y-=40; } if (dir==0) { index++; if (index==4) { index=0; } } else { index=0; dir=0; } } if (nChar==VK_UP) { y-=40; k=(n*40+x)/40; p=(m*40+y)/40; if (maze[p][k]==1) { y+=40; //return; } if (dir==3) { index++; if (index==4) { index=0; } } else { index=0; dir=3; } } if (nChar==VK_LEFT) { x-=40; k=(n*40+x)/40; p=(m*40+y)/40; if (maze[p][k]==1) { x+=40; //return; } if (dir==1) { index++; if (index==4) { index=0; } } else { index=0; dir=1; } } if (nChar==VK_RIGHT) { x+=40; k=(n*40+x)/40; p=(m*40+y)/40; if (maze[p][k]==1) { x-=40; //return; } if (dir==2) { index++; if (index==4) { index=0; } } else { index=0; dir=2; } } mdc->SelectObject(bitmap[dir][index]); dc.BitBlt(n*40+x,m*40+y,40,40,mdc,0,0,SRCCOPY); CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags); } void movieWnd::start() { CClientDC dc(this); mdc->SelectObject(wall); for (int i=0;i<8;i++) { for (int j=0;j<8;j++) { if (maze[i][j]==1) { dc.BitBlt(j*40,i*40,40,40,mdc,0,0,SRCCOPY); } } } mdc->SelectObject(bitmap[0][0]); dc.BitBlt(n*40,m*40,40,40,mdc,0,0,SRCCOPY); Start=false; }