可视化大作业(2)

2019-03-03 21:22

武汉理工大学《可视化编程》课程设计说明书

// TODO: Add your specialized code here and/or call the base class }

我们假设贪吃蛇开始有3个节点,食物则是认为1无0有.

3.4响应键盘操作的消息

void CSnakeView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {

// TODO: Add your message handler code here and/or call default switch(nChar) {

case VK_UP:if(Snake[0].direct!=2)Snake[0].direct=1;break; case VK_DOWN:if(Snake[0].direct!=1)Snake[0].direct=2;break; case VK_LEFT:if(Snake[0].direct!=4)Snake[0].direct=3;break; case

VK_RIGHT:if(Snake[0].direct!=3)Snake[0].direct=4;break; }

CView::OnKeyDown(nChar, nRepCnt, nFlags); CView::OnKeyDown(nChar, nRepCnt, nFlags);

}分别对上下左右的消息进行响应,snake[0].direct表示的时蛇头方向.而case VK_UP:if(Snake[0].direct!=2)Snake[0].direct=1;break; 意思就是当Snake[0].direct的方向此时并不等于“下”的时候,才能做出“上”的操作动作,同理其他的代码亦是相同的意思.

6

武汉理工大学《可视化编程》课程设计说明书

3.5对OnRButtonDown()具体添加代码

void CSnakeView::OnRButtonDown(UINT nFlags, CPoint point) {

// TODO: Add your message handler code here and/or call

default

CString str;

str.Format(\AfxMessageBox(str);

CView::OnRButtonDown(nFlags, point); CView::OnRButtonDown(nFlags, point); CView::OnRButtonDown(nFlags, point);

}这个函数用于当你用鼠标右键屏幕,就会马上显示当前位置的坐标信息。其实这个函数可有可无,但是我在后面的的确定初始化窗口的大小很有作用,于是我在当时决定将其加进去.

3.6对贪吃蛇初始化(画图)

void CSnakeView::Oninit() {

CDC *pDC=GetDC();

CBrush DrawBrush=(RGB(100,0,0));

CBrush *Drawbrush=pDC->SelectObject(&DrawBrush);

7

武汉理工大学《可视化编程》课程设计说明书

for(int i=0;i<=Snake[0].len-1;i++)

pDC->Rectangle(Snake[i].x*20,Snake[i].y*20,(Snake[i].x+1)*20,(Snake[i].y+1)*20);

pDC->SelectObject(DrawBrush);

} 利用Windows给我们提供的CDC类来进行画图,我们首先用一个指向CDC类的指针

去接受与该窗口相关联的DC句柄,然后用定义画刷一个DrawBrush对象,并且用RGB(100,100,100)来给画刷初始化颜色。并且用SelectObject(&DrawBrush);函数把对象画刷选入到设备描述表中,用for循环依次把贪吃蛇的3个节点画出来。

3.7对相关控件的的功能设定

void CSnakeView::OnPause() {

// TODO: Add your command handler code here KillTimer(1);

}

void CSnakeView::OnContinue() {

// TODO: Add your command handler code here SetTimer(1,10,NULL);

8

武汉理工大学《可视化编程》课程设计说明书

}

void CSnakeView::OnExit() {

// TODO: Add your command handler code here

exit (0); }

void CSnakeView::OnStart() {

// TODO: Add your command handler code here SetTimer(1,30,NULL);

}

SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器

在MFC程序中SetTimer被封装在CWnd类中,所以我在调用就不用指定窗口句柄了,并且找资料得到SetTimer API函数的原型

UINT_PTR SetTimer( HWND hWnd, // 窗口句柄

UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判

断是哪个定时器

UINT uElapse, // 时间间隔,单位为毫秒 TIMERPROC lpTimerFunc // 回调函数 );

因此更加容易的理解了settime的使用及原理.

9

武汉理工大学《可视化编程》课程设计说明书

3.8用画刷画一个背景,并画3个矩形区域.

void CSnakeView::OnDraw(CDC* pDC) {

CSnakeDoc* pDoc = GetDocument(); }

OnDraw()函数众所周知视图类中的输出.视图类的输出基本上都是在视图类的OnDraw函数中处理的,系统会准备好入参,然后调用OnDraw函数

10

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here CBrush backBrush(RGB(100,100,100));

CBrush* pOldBrush = pDC->SelectObject(&backBrush); CRect rect;

pDC->GetClipBox(&rect);

pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),PATCOPY); pDC->SelectObject(pOldBrush);

pDC->Rectangle(19,19,501,501); Oninit();


可视化大作业(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:量子力学典型题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: