改善Snake游戏的设计动作

时间:2016-10-20 21:46:33

标签: c++

我正在努力改进我的游戏开发设计,现在我有类似的东西:

class Movement {
private:
  Body b;    
public:
  move_up() {
    // catch the body head
    // add one snake character above head
    // catch the body tail
    // remove the tail character
  }
  move_down(){
    // catch the body head
    // add one snake character below head
    // catch the body tail
    // remove the tail character
  }
  move_left(){
    // catch the body head
    // add one snake character on left side of head
    // catch the body tail
    // remove the tail character
  }
  move_right(){
    // catch the body head
    // add one snake character on right side of head
    // catch the body tail
    // remove the tail character
  }
}

在每个移动方法中看到重复伪代码是非常难看的。我想使这更通用,但我不知道如何在C ++中做到这一点。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

对于蛇游戏,您可能希望分两个部分来处理。

一个响应键盘输入。它只是根据输入键记录一个新的旅行方向。

另一件以预定义的间隔运行。它:

  1. 检查碰撞
    • 如果有一个
    • 则结束游戏
  2. 在当前行进方向上为蛇的头部添加一个角色
  3. 从尾部删除一个字符
    • (如果蛇不只是吃电源按钮)
  4. 更新分数
  5. 可能还有一些我现在没有发生的事情
  6. 但是,特别是,我们不希望任何第二个列表等待来自用户的输入。第二部分只是连续运行,所以即使没有来自用户的输入,蛇也会继续移动。

答案 1 :(得分:0)

我之前制作了Snake,这些是我的程序中用来使Snake发生的步骤;

  1. 当蛇的方向改变时,必须检查它是否在180°旋转方向之前,否则当前方向可能不会改变。

  2. 您在帖子中描述的方法必须只包含在蛇的当前位置旁边为蛇添加一个点/像素/字符所需的内容。

  3. 您需要蛇的所有点的列表(包含x,y值)。

  4. 在每一个动作中,你必须首先确保你没有撞到自己或撞墙,否则你应该先死。

  5. 在每一步中,如果移动成功,您必须检查当前位置(最后一步)是否包含同一位置的食物,如果是,则在分数变量中添加分数并确保您不要t删除蛇的列表中最旧的(x,y)。 如果没有,你必须删除那个。