一个 关于加速贪吃蛇 移动的问题???

Cjslong 2010-08-15 09:43:31
小弟 初学 vc,做了个贪吃蛇小游戏 但是有个问题

我想在 在控制贪吃蛇移动是 可以让它向指定的防线移动

比如说 按着 上健不放 就让蛇向上加速移动?

请问该怎么实现 ?关键是怎么才能知道某个方向键是 一直按着不放的呢?

我已经响应了 OnKeyDown()和OnkeyUp 但这两个的反应 都应该是 瞬时的呀?

vc初学者 诚请高人指点 分数不多 见谅!!!
...全文
248 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mszjk 2010-08-16
  • 打赏
  • 举报
回复
话说2楼的贪吃蛇在不按键的时候是不会动的~
mszjk 2010-08-16
  • 打赏
  • 举报
回复
lz不妨这样设计:
贪吃蛇的坐标肯定是要的:
POINT position[MAX_POINT]; // MAX_POINT定义为贪吃蛇的最大长度,也就是贪吃蛇最多有几个点组成,如果某点不存在,则设置其x域为-1

贪吃蛇是不停的移动的,只是移动的方向根据案件有所改变,不如就设置一个POINT变量,作为移动方向.
POINT direction; // x,y域只能为1, 0, -1,表明移动的方向
比如 direction.x = 1; direction.y = 0;表明向右移动

有了移动方向后,根据lz的要求还需要速度.
ULONG speed;

有了方向跟速度,不妨再添加个步长吧?
POINT step;
那么步长step.x = direction.x * speed;
step.y = direction.y * speed;

至于时间更新一直设置为固定数值,0.1秒够长?具体自己设计吧.
SetTimer(..., ..., 100ms, TimerProc); // 请msdn...

#define POSITION_PRESENT(pt) (pt.x != -1) // 如果x域为-1,则表示该点不存在.

VOID __stdcall TimerProc(...)
{
int i;

// timer中只需这两行代码就改变了当前坐标
for(i = 0;
i < MAX_POINT && POSITION_PRESENT(position[i]);
i++)
{
position[i].x += step.x;
position[i].y += step.y;
}

// 剩余的就是GDI画图了,就是画几个方框,自己设计
// DrawYourGameMap(...., position, ....);
}

// 至于加速度的问题
当键盘按下的时候产生WM_KEYDOWN(由OnKeyDown()处理),如果一直按下,则不停产生WM_KEYDOWN,直至键盘释放产生WM_KEYUP(由OnkeyUp处理).
所以你只需在WM_KEYDOWN(OnKeyDown()函数)中根据键盘状况进行处理:如果是长时间按下,则改变速度,并且更新方向(如果方向改变);如果只是按下一次,那么只需改变方向(如果方向改变).

#define ACCMULATE 1 // 加速度,自己定义
VOID OnKeyDown(..., LPARAM lParam)
{
if(lParam & (1 << 30)) // 可以在MSDN中输入WM_KEYDOWN搜索,结果便会知道lParam的第30位
// 标明键盘先前状况.
// msdn:30 Specifies the previous key state. The value
// is 1 if the key is down before the message is sent,
// or it is zero if the key is up.
{
// 先前是按下的,表明是长时间按下,那么需要改变速度
speed.x += ACCMULATE;
speed.y += ACCMULATE;
// 更新步长
step.x = direction.x * speed;
step.y = direction.y * speed;
}

// 接着更新方向
// ... 根据键值来设定direction.x跟direction.y
}

至于WM_KEYUP(OnKeyUp())就不必处理了.
xxd_qd 2010-08-15
  • 打赏
  • 举报
回复
OnKeyDown的时候设置一个Timer,OnKeyUp的时候删掉这个Timer,因此当你获得Timer消息的时候,一定是处于键按下的状态。每当收到一个Timer的时候就让蛇运动一下,想要加速的话就是每个Timer消息蛇的运动距离逐渐增大。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧