|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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);
}
运行后,墙壁就是墙壁,再也穿不过去了!!
出口回放功能
现在增加一个功能,就是让人物从入口移动到出口时,就自动播放其行走的路径。
这里我们用链表来完成,原理就是用链表来记录图片的状态与坐标。
我们每次按键盘,等于是增加了链表的一个长度。
步骤:
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
程序运行后:
当我们走到出口时,其自动回放我们行走过的路径。
|
评分
-
参与人数 1 | 荣誉 +10 |
鱼币 +10 |
贡献 +5 |
收起
理由
|
小甲鱼
| + 10 |
+ 10 |
+ 5 |
感谢楼主无私奉献! |
查看全部评分
|