鱼C论坛

 找回密码
 立即注册
查看: 5598|回复: 35

[技术交流] 用VC6.0制作人物走迷宫(下集)

[复制链接]
发表于 2013-9-30 15:14:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
中集的最后,是人物走墙壁会穿过墙壁。

解决问题,我们需要在接受键盘信息后,对坐标进行计算。如果是穿墙,则修改坐标让他回到原地,再BitBlt

在这里,我们把每次人物的移动量都设置为1格,这样,我们只需要判断人物图的坐标跟墙壁图坐标是否重合就行。

把人物移动量设置为1格,是为了方便判断,如果不是1格而是半格,判断上就会麻烦一点。因为这里重点讲迷宫的制作,所以移动这一部分就简化一下。

列如:

n=n+100;
if(maze[(y+n)/100][(x+m)/93]==1)
{
  n=n-100;
}

当我们向下走时,是 n=n+100;
但之后要判断,如果是墙壁,则减去100回到原地。


因为代码太乱,所以我们把上面的代码归入到一个wheredown函数中:

void GameWnd::wheredown()
{
n=n+100;
if(maze[(y+n)/100][(x+m)/93]==1)
{
  n=n-100;
}
}

同理,还有whereup  whereleft  whereright函数。这些函数的作用,是在我们按动键盘后,计算出人物出现地点的正确坐标,而不会传墙

同理,我们把中集中,判断人物行走状态的代码,也放入函数中,如:

void GameWnd::whichright()
{
if (i ==2)
{
  j++;
  if(j<4)
  {
   
  }
  else
  {
   j = 0;
  }
}
else
{
  i = 2;
  j = 0;
}
mdc->SelectObject(bitmap[j]);
}

同理,还有其他三个方向的函数。这个函数,是用于判断按键后,人物该出现的正确的行走姿势。

我们在OnKeyDown中用的是四个if判断句,这里也简化成switch,综合上面,就变成:

void GameWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
  dc.BitBlt(x+m,y+n,93,100,mdc,0,0,WHITENESS);//按下键盘时,都先消去之前的人物图
switch (nChar)
{
case VK_DOWN:
  
  whichdown();
  wheredown();
  
  
  
  break;
case VK_UP:
  
  whichup();
  whereup();
  

  break;
case VK_LEFT:

  whichleft();
  whereleft();

  
  
  break;
case VK_RIGHT:
  
   whichright();
  whereright();

  break;

}
dc.BitBlt(x+m,y+n,93,100,mdc,0,0,SRCCOPY);
}

11.jpg

运行后,墙壁就是墙壁,再也穿不过去了!!


出口回放功能

现在增加一个功能,就是让人物从入口移动到出口时,就自动播放其行走的路径。

这里我们用链表来完成,原理就是用链表来记录图片的状态与坐标。

我们每次按键盘,等于是增加了链表的一个长度。

步骤:

1、定义类并初始化

class A
{
public:
int ii;
int jj;
int mm;
int nn;
A *p;
};
A * phead = new A;

A *p1 = phead;
A* p2 =phead;

///定义了一个类,作为构成链表的单元。创建了头节点。再定义两个指针指向头节点。


2、在构造函数中给成员赋值

phead->ii = 0;
phead->jj = 0;
phead->mm =0;
phead->nn =0;
phead->p = NULL;


注意:我们不能在全局中给变量赋值。这样是错的,全局中只能声明定义不能赋值。


3、在onkeydown函数中,增加链表实现代码:

  p1 = new A;
  p1->ii = i;
  p1->jj = j;
  p1->mm =m;
  p1->nn =n;
  p1->p =NULL;
  p2->p =p1;
  p2 = p1;
  if(maze[(y+n)/100][(x+m)/93]==3)
  {
   p2=phead;
   while(p2!=NULL)
   {
    mdc->SelectObject(bitmap[p2->ii][p2->jj]);
    dc.BitBlt(x+p2->mm,y+p2->nn,93,100,mdc,0,0,SRCCOPY);
    p2 = p2->p;
   
   }
   p2 = p1;
  }


if(maze[(y+n)/100][(x+m)/93]==3)
这个就表示人物走到了入口,这时就自动回放BitBlt


程序运行后:

12.jpg


当我们走到出口时,其自动回放我们行走过的路径。


游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +5 收起 理由
小甲鱼 + 10 + 10 + 5 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-30 16:27:06 | 显示全部楼层
*^_^* 给力的帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-30 17:04:34 | 显示全部楼层
写游戏。~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-30 18:25:49 | 显示全部楼层
顶楼主啦..希望楼主多发精品好帖啦.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-30 18:53:11 | 显示全部楼层
看看很有意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-30 18:58:17 | 显示全部楼层
牛,这个要学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-30 20:32:22 | 显示全部楼层
有意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-30 22:27:32 | 显示全部楼层
很好,看到写游戏就是强悍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-30 23:18:27 | 显示全部楼层
http://115.com/lb/5lbdbzdn7r9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-1 10:59:26 | 显示全部楼层
学习下
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-1 11:43:59 | 显示全部楼层
lamlamlamlama
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-1 17:03:44 | 显示全部楼层
:lol:厉害。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 13:18:58 | 显示全部楼层
好东西,学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 14:01:26 | 显示全部楼层
非常给力,支持下!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 15:25:50 | 显示全部楼层
给力给力啊啊啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 15:38:01 | 显示全部楼层
下载下来
看看看看。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 15:57:48 | 显示全部楼层
很牛叉的 样子看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 19:49:20 | 显示全部楼层
哇塞,来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-12 21:22:12 | 显示全部楼层
好好好,非常好,我喜欢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-13 02:53:05 | 显示全部楼层
这个不是范磊的教程吗,抄袭?请问楼主代码全敲出来没,再请教完成之后的EXE如何单独运行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 14:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表