MFC模拟高尔顿板实验

本文档详细介绍了如何使用MFC进行高尔顿板实验的模拟,包括创建应用程序、绘制高尔顿板、实现小球动态下落、添加开始、暂停、退出按钮以及为消息框添加自动关闭功能。通过实验模拟,展示了小球下落的统计规律。
摘要由CSDN通过智能技术生成

先上效果图,图中小球是动态下落的,下落到对应桶里会更新相应计数。

《1》建立基于单文档的应用程序,名为:GEDB。

《2》为类CDEDBView添加成员函数void CGEDBView::DrawFrame(CDC *pDC),并添加如下代码:

void CGEDBView::DrawFrame(CDC *pDC)

{

         CRect rc;//定义一个矩形区域变量

         GetClientRect(rc);//获取当前窗口的客户区大小

         CPoint point[12] ;

         point[0] = (85 ,5) ;//画图区域的左上角

         point[1] = (685 ,403) ;//画图区域的右下角

        

         //设置每个钉子的半径为12

         int R = 12 ;

         //绘制图形区域的边缘(灰色)

         CPen pen(PS_INSIDEFRAME,1,RGB(192,192,192));//定义画笔

         CPen* oldPen=pDC->SelectObject(&pen); //pen选入设备环境

         CRect recttempt(85,5,685,403) ;

         pDC->Rectangle(recttempt) ;

        

         //绘制显示小球的所在区域

         CRect rect1(85 -4*R ,300-23*R ,85-2*R ,300+7*R) ;

         pDC->Rectangle(rect1) ;

         pDC->SetBkColor(RGB(250,250,0)) ;

         CString str[2]= {"顶部","底部"};

         pDC->TextOut(85 -4*R,300-25*R,str[0]) ;

         pDC->TextOut(85 -4*R,300+8*R,str[1]) ;

         //绘制不同桶间的分割线(蓝色)

         CPen Lpen0 ;

         Lpen0.CreatePen(PS_SOLID ,2 ,RGB(0,0,255)) ;

         pDC->SelectObject(Lpen0) ;

         for (int i = 1 ;i<12 ;i++)

         {

                   pDC->MoveTo(100 + i*4*R ,400) ;

                   pDC->LineTo(100 + i*4*R ,300) ;

         }

        

         //绘制高尔顿版的边缘(肖贡土色)

         CPen Lpen1 ;

         Lpen1.CreatePen(PS_DASH ,5 ,RGB(197,97,20)) ;

         pDC->SelectObject(Lpen1) ;

         pDC->MoveTo(100,400) ;

         pDC->LineTo(100 ,300) ;

         pDC->MoveTo(676,400) ;

         pDC->LineTo(676 ,300) ;

         pDC->MoveTo(100,400) ;

         pDC->LineTo(676 ,400) ;

        

         pDC->MoveTo(100 ,300) ;

         pDC->LineTo(375 ,25) ;

         pDC->MoveTo(676 ,300) ;

         pDC->LineTo(406 ,25) ;

        

         pDC->MoveTo(375 ,25) ;

         pDC->LineTo(375 ,10) ;

         pDC->MoveTo(406 ,25) ;

         pDC->LineTo(406 ,10) ;

        

        

         CPen Lpen3(PS_NULL ,1 ,RGB(0,0,0)) ;//创建无边缘的画笔

         pDC->SelectObject(Lpen3) ;

         CBrush brush(RGB(0,255,0)) ;

         CBrush *OldBrush = pDC->SelectObject(&brush) ;

         for (i = 0 ;i<12;i++)

         {

                   for (int j = 1 ;j <12-i ;j++)

                   {

                            //绘制钉子

                            pDC->Ellipse(100+j*4*R-R + i*2*R ,300+R - i*2*R,100+j*4*R+R+ i*2*R ,

                                     300-R - i*2*R) ;

                            //绘制小球下落位置的提示球

                            pDC->Ellipse(85 - 4*R ,300+R - i*2*R ,85 - 2*R ,300-R - i*2*R) ;

                   }

         }

         //因为提示球的行数比钉子多三个,故还需要画3

         for (i =1 ;i<4;i++)

         {

                   CRect rectRange;

                   rectRange.left = 85 - 4*R ;

                   rectRange.top = 300 - R ;

                   rectRange.right = 85 - 2*R ;

                   rectRange.bottom = 300 +

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值