我的CPP文件中倒数第五行的 dc.Rectangle(&rect);    //绘制矩形   在窗口上反应不出来啊//
//头文件 TicTac.h
//
#define ID_MOVE 1
#define ID_FOOD 2class SnakePoint{   //蛇的数据结构
public:
    int x[100];        //存储蛇节点坐标的数组
    int y[100];        //x[0],y[0]存储随机出现的食物点
    int node;                    //蛇节点数
    int direction;              //蛇走动方向,1为右,2为下,3为左,4为上
};class CMyApp : public CWinApp
{
public:
    virtual BOOL InitInstance ();
};class CMainWindow : public CWnd
{
protected:
     CRect m_rcSquares[20][20]; // 这个客户区由20*20个rect构成
SnakePoint snake;  //蛇
bool needfood;
bool alive;
CRect rect;public:
    CMainWindow ();protected:
    virtual void PostNcDestroy (); afx_msg void OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags );
afx_msg void OnTimer(UINT nTimerID);
afx_msg void OnPaint();
// afx_msg void OnCreate(LPCREATESTRUCT lpcs);
    DECLARE_MESSAGE_MAP ()
};

解决方案 »

  1.   

    //实现文件 
    //TicTac.cpp
    //#include <afxwin.h>
    #include "TicTac.h"
    #include <stdlib.h>CMyApp myApp;/////////////////////////////////////////////////////////////////////////
    // CMyApp member functionsBOOL CMyApp::InitInstance ()
    {
        m_pMainWnd = new CMainWindow;
        m_pMainWnd->ShowWindow (m_nCmdShow);
        m_pMainWnd->UpdateWindow ();
        return TRUE;
    }/////////////////////////////////////////////////////////////////////////
    // CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow, CWnd)
        ON_WM_PAINT ()
    ON_WM_KEYDOWN()
    ON_WM_TIMER()
    END_MESSAGE_MAP ()CMainWindow::CMainWindow ()
    { for(int i=0;i<20;i++)
    for(int j=0;j<20;j++)
    m_rcSquares[i][j]=CRect( j*10 , i*10 , (j+1)*10 , (i+1)*10 ) ;
            snake.direction=3;  //默认向左移动
            snake.x[1]=2;
            snake.y[1]=3;
            snake.x[2]=3;
            snake.y[2]=3;
            snake.node=2;            //刚开始事,蛇为两节,方向向左
      
    //
    // Register a WNDCLASS.
    //
        CString strWndClass = AfxRegisterWndClass (
            CS_DBLCLKS, // Class style
            AfxGetApp ()->LoadStandardCursor (IDC_ARROW),   // Class cursor
            (HBRUSH) (COLOR_3DFACE + 1), // Background brush
            AfxGetApp ()->LoadStandardIcon (IDI_WINLOGO) // Class icon
        ); //
    // Create a window.
    //
        CreateEx (0, strWndClass, _T ("贪吃蛇"),
            WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
            NULL, NULL); //
    // Size the window.
    //
        CRect rect (0, 0, 200, 200);
        CalcWindowRect (&rect);    SetWindowPos (NULL, 0, 0, rect.Width (), rect.Height (),
            SWP_NOZORDER | SWP_NOMOVE | SWP_NOREDRAW);
    SetTimer(ID_MOVE,100,NULL);
    SetTimer(ID_FOOD,200,NULL);
    }void CMainWindow::OnPaint()
    {
    }
    void CMainWindow::PostNcDestroy ()
    {
        delete this;
    }void CMainWindow::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
    switch(nChar)
    {
    case VK_LEFT:  snake.direction=3; break;
    case VK_RIGHT: snake.direction=1; break;
    case VK_UP :   snake.direction=4; break;
    case VK_DOWN  :   snake.direction=2; break;
    }}void CMainWindow::OnTimer(UINT nTimerID)
    {
    switch(nTimerID)
    {
    case ID_FOOD:
    //如果食物被吃掉,则随机产生一个食物点
    if(needfood)
    {
    snake.x[0]=(int)rand()%20;
                snake.y[0]=(int)rand()%20;
                needfood=false;
    }
    break;
    case ID_MOVE: 
    //移动蛇身 
    for(int i=snake.node;i>1;i--)
    {
    snake.x[i]=snake.x[i-1];
    snake.y[i]=snake.y[i-1];
    }
     //移动蛇头
    switch(snake.direction)
    {
    case 1:snake.x[1]+=1;break;
    case 2:snake.y[1]+=1;break;
    case 3:snake.x[1]-=1;break;
    case 4:snake.y[1]-=1;break;
            }    
    //判断蛇头是否撞到自己
    for(int k=3;k<=snake.node;k++)
    {
    if(snake.x[k]==snake.x[0]&&snake.y[k]==snake.y[0])
    {
    alive=false;
    break;
                }
    }
    //判断蛇头是否出界
    if(snake.x[1]<0||snake.x[1]>=20||snake.y[1]<0||snake.y[1]>=20)
    {
    alive=false;
    }
         //判断是否吃到食物
    if(snake.x[1]==snake.x[0]&&snake.y[1]==snake.y[0])
    {
    snake.node++;
                needfood=true;
    for(int m=snake.node;m<=1; m++)
    {
    snake.x[m]=snake.x[m-1];
    snake.y[m]=snake.y[m-1];
    }
    }
    }
        CClientDC dc (this);
    CBrush brush(RGB(25,25,25));
    CBrush *pOldBrush=dc.SelectObject (&brush);
    int x1,y1;
    for(int j=2;j<=snake.node;j++)
    {
    x1=snake.x[j];  //取出坐标
    y1=snake.y[j];  //取出坐标
    rect= m_rcSquares[ x1 ][ y1];   //根据坐标返回rect
    dc.Rectangle(&rect);    //绘制矩形 
    }
    dc.SelectObject(pOldBrush);}
      

  2.   

    另跟一下看看rect的数据 和snake.node的数据