| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 737 人关注过本帖
标题:我要崩溃了 怎么都找不出来为什么
只看楼主 加入收藏
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
结帖率:66.67%
收藏
 问题点数:0 回复次数:7 
我要崩溃了 怎么都找不出来为什么

我做的是推箱子程序,逻辑是没问题的,但是现在画图出问题了。
 
先看图吧
 
这说要推时的样子:
  

图片附件: 游客没有浏览图片的权限,请 登录注册



这是推了后样子, 空位直接被覆盖掉了,问题就是这里, 怎么都找不到原因。
 
图片附件: 游客没有浏览图片的权限,请 登录注册



但是推箱子的英雄却是没问题的啊蓝色圆圈:


图片附件: 游客没有浏览图片的权限,请 登录注册



 
下面是画图的代码:
程序代码:
        case WM_PAINT:
        {
            HDC hdc;
            PAINTSTRUCT ps;
            hdc = BeginPaint(hwnd, &ps);

            mg.SetGDC(hdc);

            mg.DrawMap(txz.GetZAV());
            mg.DrawMB(txz.GetMBV());
            mg.DrawXZ(txz.Getxzv());
            mg.DrawHR(txz.GetHP());
           
            EndPaint(hwnd,&ps);
        }



void CXZMG:: DrawMap(vector<POINT>* _za) //绘制地图迷宫
{
    if (m_hdc != NULL)
    {
        HBRUSH  brush1 = CreateSolidBrush(0x00000000), oldbrs;    //黑色画刷
        oldbrs = (HBRUSH)SelectObject(m_hdc, brush1);            //换画刷
        Rectangle(m_hdc, SX, SY, SX + m_W*(JS + JG) - JG, SY + m_H*(JS + JG) - JG);//画黑色背景

        HBRUSH  brush2 = CreateSolidBrush(0x000000FF);  //换红色画刷
        SelectObject(m_hdc, brush2);

        vector<POINT>::iterator b = _za->begin(), e = _za->end();
        for (; b != e; ++b)
        {
            int  l = SX + (*b).x * (JS + JG), t = SY + (*b).y * (JS + JG);
            int  r = l + JS, b = t + JS;

            Rectangle(m_hdc, l, t, r, b); //根据每个障碍障碍物的坐标画障碍物
        }

        SelectObject(m_hdc, oldbrs);//恢复原来的刷子

        DeleteObject(brush1);
        DeleteObject(brush2);
    }
}

void CXZMG:: DrawMB(vector<POINT>* mbv)
{
    if (m_hdc != NULL)
    {
        HBRUSH  brush = CreateSolidBrush(0x00FFFFFF),oldbrs;       
        HPEN    pen   = CreatePen(PS_SOLID,2,0x0000FF00), oldpen;

        oldbrs = (HBRUSH)SelectObject(m_hdc, brush);//换白色刷子刷白色空心
        oldpen = (HPEN)SelectObject(m_hdc, pen);    //换绿色画笔画边框

        vector<POINT>::iterator b = mbv->begin(), e = mbv->end();
        for (; b != e; ++b)
        {
            int  l = SX + (*b).x * (JS + JG), t = SY + (*b).y * (JS + JG);
            int  r = l + JS, d = t + JS;

            Rectangle(m_hdc, l, t, r, d);//画空位
        }

        SelectObject(m_hdc, oldbrs);//恢复
        SelectObject(m_hdc, oldpen);//恢复
        DeleteObject(brush);
        DeleteObject(pen);
    }
}

void CXZMG:: DrawXZ(vector<POINT>* _xz)//绘制所有箱子 传入箱子的坐标点表
{
    if (m_hdc != NULL)
    {
        HBRUSH  brush = CreateHatchBrush(HS_DIAGCROSS,0x000000ff),oldbrs;
        HPEN    pen   = CreatePen(PS_SOLID,1, 0x00ffffff),oldpen;

        oldbrs = (HBRUSH)SelectObject(m_hdc, brush);    //换网格刷子
        oldpen = (HPEN)SelectObject(m_hdc, pen);        //白色边框

        vector<POINT>::iterator b = _xz->begin(), e = _xz->end();
        for (; b != e; ++b)
        {
            int  l = SX + (*b).x * (JS + JG), t = SY + (*b).y * (JS + JG);
            int  r = l + JS, d = t + JS;

            Rectangle(m_hdc,l+3, t+3, r-3, d-3);
        }
        SelectObject(m_hdc, oldbrs);//恢复
        SelectObject(m_hdc, oldpen);//恢复
        DeleteObject(pen);
        DeleteObject(brush);
    }
}

void CXZMG:: DrawHR(POINT hp)    //绘制英雄 传入英雄的坐标
{
    if (m_hdc != NULL)
    {
        HBRUSH  brush = CreateSolidBrush(0x00FF0000),oldbrs;
        HPEN    pen   = CreatePen(PS_SOLID,1, 0x00FF0000),oldpen;

        oldbrs = (HBRUSH)SelectObject(m_hdc, brush); //蓝色画刷
        oldpen = (HPEN)SelectObject(m_hdc, pen);     //蓝色边框

        Ellipse(m_hdc, SX + hp.x * (JS+JG)+JG,
                       SY + hp.y * (JS+JG)+JG,
                       SX + hp.x * (JS+JG)+JS -JG-1,
                       SY + hp.y * (JS+JG)+JS -JG-1);

        SelectObject(m_hdc, oldbrs);//恢复
        SelectObject(m_hdc, oldpen);//恢复
        DeleteObject(pen);
        DeleteObject(brush);
    }





[ 本帖最后由 死了都要C 于 2012-2-26 17:44 编辑 ]
搜索更多相关主题的帖子: 推箱子 画图 
2012-02-26 17:40
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
坐等···

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2012-02-26 17:55
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
不等了

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2012-02-26 18:11
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


我这边绘图很正常。。
怀疑你绘图没有问题的,应该是
mg.DrawMB(txz.GetMBV());
和mg.DrawXZ(txz.Getxzv());

中txz.GetMBV 和txz.Getxzv没有重叠点,应该是程序逻辑有问题的。每一关中,txz.GetMBV中的数据是不变的,是不是你的程序在某个箱子移动到了那个位置时候,对应的GetMBV值被改变了而没有画出来?

代码还有个严重的问题,可读性很差。。命名方面注意一点。

加油。

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-02-29 14:19
mayuebo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:257
专家分:1282
注 册:2005-9-8
收藏
得分:0 
算法设计有问题.设置墙壁和箱子不可以走

成功贵在坚持
2012-03-01 10:46
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
收藏
得分:0 
回去跑一下,跟一下

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-03-02 15:25
豆腐佬
Rank: 2
等 级:论坛游民
帖 子:5
专家分:40
注 册:2012-2-29
收藏
得分:0 
我之前见了个控制台程序和这个类似,调试一下就知道错在哪里了。
我猜是在接收“上下左右”消息时,根据下一个iGk[next](一个10*10的数组来表示第一关)是什么(比如箱子/空位/目的地/箱子在目的地),然后对应的改变数组,就是在改变数组这个地方出的错。具体一点,就是当按了下时,若前方是箱子,箱子的前方是目的地,移动了之后,就应该是当前为空位,前方为人,前前方为“箱子在目的地”而不是“箱子”.
2012-03-06 14:10
豆腐佬
Rank: 2
等 级:论坛游民
帖 子:5
专家分:40
注 册:2012-2-29
收藏
得分:0 
回复 7楼 豆腐佬
还有一种可能就是画图时,画“箱子在目的地”时画错
2012-03-06 15:33
快速回复:我要崩溃了 怎么都找不出来为什么
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042427 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved