void CGreedySnakeView::OnDraw(CDC* pDC) { // TODO: 在此处为本机数据添加绘制代码 CDC memDC; CDC tempDC; CBitmap memBmp; CRect rectClient; GetClientRect(rectClient); memDC.CreateCompatibleDC(pDC); tempDC.CreateCompatibleDC(pDC); memBmp.CreateCompatibleBitmap(pDC, rectClient.right, rectClient.bottom); memDC.SelectObject(&memBmp); drawBackgound(&tempDC, &memDC, rectClient); drawMap(&tempDC, &memDC); pDC->BitBlt(0, 0, rectClient.right, rectClient.bottom, &memDC, 0, 0, SRCCOPY); tempDC.DeleteDC(); memDC.DeleteDC(); pDC->SelectStockObject(BLACK_BRUSH); } void CGreedySnakeView::drawBackgound(CDC* tempDC, CDC* memDC, CRect& rectClient) { tempDC->SelectObject(&m_bmpBackGound); memDC->BitBlt(0, 0, rectClient.right, rectClient.bottom, tempDC, 0, 0, SRCCOPY); } void CGreedySnakeView::drawMap(CDC* tempDC, CDC* memDC) { int tempMap[MAP_HEIGHT][MAP_WIDTH]; memcpy(tempMap,Manager::theManager()->getBlocks(),sizeof(tempMap)); // Manger 构造函数中调用initialGame 已经loadMap for (int i = 0; i < MAP_HEIGHT; ++i) for (int j = 0; j < MAP_WIDTH; ++j) { switch(tempMap[i][j]) { case MAP_OBSTACLE: tempDC->SelectObject(&m_bmpBrick); memDC->BitBlt(j*10, i*10, 10, 10, tempDC, 0, 0, SRCCOPY); break; case MAP_FRUIT: tempDC->SelectObject(&m_bmpFruit); memDC->BitBlt(j*10, i*10, 10, 10, tempDC, 0, 0, SRCCOPY); break; case MAP_SNAKE_BODY: tempDC->SelectObject(&m_bmpSnakeBody); memDC->BitBlt(j*10, i*10, 10, 10, tempDC, 0, 0, SRCCOPY); break; case MAP_SNAKE_HEAD: tempDC->SelectObject(&m_bmpSnakeHead); memDC->BitBlt(j*10, i*10, 10, 10, tempDC, 0, 0, SRCCOPY); break; } } }