这段代码什么意思 void CsnakeDlg::DrawSnake(CDC& dc) { CBrush brushSnake(RGB(0, 162, 232)); list<SNAKE>::iterator it = m_listSnake.begin(); while (it != m_listSnake.end()) { CRect rt; rt.left = it->nCol * GAMEBLOCK; rt.top = it->nRow * GAMEBLOCK; rt.right = rt.left + 20; rt.bottom = rt.top + 20; if (it == m_listSnake.begin()) { dc.Rectangle(rt); } else { dc.FillRect(rt, &brushSnake); } it++; } }
时间: 2024-04-02 21:34:30 浏览: 144
这段代码是一个函数,用于在游戏界面上绘制蛇的身体。在函数中,首先定义一个颜色为 RGB(0, 162, 232) 的画刷 brushSnake,用于绘制蛇的身体。然后,使用迭代器遍历蛇的每一个身体块(存储在链表 m_listSnake 中),并根据身体块的行和列数(nRow、nCol)以及 GAMEBLOCK 的大小计算出身体块的矩形 rt。如果当前遍历到的身体块是蛇头,那么使用 dc.Rectangle 函数绘制一个矩形框作为蛇头;否则,使用 dc.FillRect 函数用 brushSnake 画刷填充矩形 rt,绘制蛇身。最后,迭代器 it 指向下一个身体块,继续遍历直到链表末尾。
相关问题
void CMfcSnakeDlg::MvUp() { CDC* pdc = GetDlgItem(IDC_game)->GetWindowDC(); // 将最后一个恢复背景色 CBrush* pOldBrs = pdc->SelectObject(&m_brush[3]); pdc->Rectangle(m_map[my_snake.body[my_snake.len - 1].x][my_snake.body[my_snake.len - 1].y]); pdc->SelectObject(&pen1); pdc->Rectangle(m_map[my_snake.body[my_snake.len - 1].x][my_snake.body[my_snake.len - 1].y]); pdc->SelectObject(pOldBrs); my_snake.UpMove(); drawSnake(); }
这段代码是贪吃蛇游戏中控制贪吃蛇向上移动的函数,会在游戏运行时被反复调用。它的作用是将贪吃蛇的头部向上移动一个格子,并更新贪吃蛇的身体和头部的绘制。
函数首先通过 GetDlgItem() 函数获取游戏窗口的设备上下文 DC,然后将贪吃蛇尾部的格子恢复为背景色。接着调用 my_snake.UpMove() 函数将贪吃蛇头部向上移动一个格子,然后调用 drawSnake() 函数重新绘制贪吃蛇。绘制完成后,函数将之前的画刷和设备上下文恢复,并释放设备上下文。
void CMfcSnakeDlg::SnackInit() { // 游戏区 CDC* pdc = GetDlgItem(IDC_game)->GetWindowDC(); // 棋盘初始化 CBrush* pOldBrs = pdc->SelectObject(&m_brush[3]); CPen* pOldPen = pdc->SelectObject(&pen1); for (int i = 0; i < 24; i++) { for (int j = 0; j < 50; j++) { m_map[i][j].left = 0 + j * 20; m_map[i][j].right = 20 + j * 20; m_map[i][j].top = 0 + i * 20; m_map[i][j].bottom = 20 + i * 20; pdc->SelectObject(&m_brush[3]); pdc->Rectangle(m_map[i][j]); //pdc->SelectObject(&pen1); //pdc->Rectangle(m_map[i][j]); } } pdc->SelectObject(&pOldBrs); // 蛇初始化 my_snake.init(); score = 0; START = false; DEAD = false; srand((unsigned)time(NULL)); drawSnake(); setBean(); // 控件初始化 EDIT_Score.SetWindowTextW(_T("0")); SetDlgItemText(IDC_BUTTON_Start, _T("开始")); }
这是一个 MFC 程序中的对话框类的成员函数,用于初始化游戏。首先获取 IDC_game 控件的设备上下文对象指针 pdc,然后将棋盘画刷对象 m_brush[3] 和画笔对象 pen1 选入设备上下文对象中,用于绘制棋盘。接着通过循环遍历 24 行 50 列的二维数组 m_map,初始化每个矩形的位置和大小,并调用 Rectangle() 函数绘制矩形。然后将之前选入设备上下文对象中的画刷和画笔对象恢复为原来的对象。接下来初始化蛇、得分、开始标志和死亡标志,随机设置豆子的位置,并调用 drawSnake() 函数绘制蛇和豆子。最后将得分编辑框控件 EDIT_Score 的文本设置为“0”,将“开始”按钮的文本设置为“开始”。
阅读全文