寻找对象的随机方向循环

时间:2012-04-10 14:43:12

标签: java loops boolean greenfoot

在CS课上,我们使用名为greenfoot的程序制作了一个简单的游戏。如果你熟悉的话,这个游戏很像游戏“Frogger”。我现在正在练习,想要制作类似的游戏。我的新游戏将与PacMan有点接近。在我控制需要到达屏幕顶部的火箭飞船之前我制作的游戏。与此同时,我已经随机选择了尺寸和速度的矩形弹跳墙。但是,我想让我的新游戏更有趣。我想为这些对象创建一个循环,当它首次符合时会创建一个随机方向,并弹出墙壁并继续向那个方向移动,就像那个反弹的着名屏幕保护程序一样。这是第一款游戏的代码,是这样的吗? 所以最终我的问题是,如何为随机方向编写循环。

public boolean canMoveRight() 
{
  if ( getX() + 1 < getWorld().getWidth() ) 
    return true;
  else
    return false;
}
public boolean canMoveLeft() 
{
  if ( getX() - 1 > 0 )
    return true;
  else 
    return false;
}

public void moveRight()
{
       setLocation( getX() + speed, getY() );
}
public void moveLeft() 
{
      setLocation ( getX() - speed, getY()  );
}  

    public void act() 
    {
    if (right==true) 
    {
    if (canMoveRight() )
    {
       moveRight();
    }
    else
    {
       right = false;
    }
  }
  else 
  {
     if( canMoveLeft() )
             moveLeft();
     else
            right = true;
  }
}

3 个答案:

答案 0 :(得分:0)

定义方向枚举 例如 Up,RightUp,Right ... LeftUp。

使用随机选择一个。 方向转换为dX,dX位置的变化,因此运动步长为1像素UpLeft为-1,-1(原点左上角!) 然后在你的循环中简单地将dx添加到X并将dy添加到Y.

答案 1 :(得分:0)

我想这些方面的东西会起作用:

Random random = new Random();

int direction = random.nextInt(1); // gives 0 or 1 randomly
if (direction == 0) {
   // move left
} else {
   // move right
}

答案 2 :(得分:0)

你在找这样的东西吗?

int horz = ((Math.random() * 10) % 10) + 1; //I just choose 10 at random
int vert = ((Math.random() *10) % 10) + 1;
//You can use another random number to choose to negate either horz or vert if you want
//You can also use random numbers to define the start location.

public boolean canMoveHorz() 
{
  if ( (getX() + horz < getWorld().getWidth() && horz > 0) || (getX() + horz > 0 && horz < 0)) 
    return true;
  else
    return false;
}
public boolean canMoveVert() 
{
  if ( (getY() + vert > 0 && vert < 0) || (getY() + vert < getWorld().getHeight() && vert > 0))
    return true;
  else 
    return false;
}


public void act() {
   if(!canMoveHorz()) {
       horz *= -1;
   }

   if(!canMoveVert()) {
       vert *= -1;
   }

   setLocation(getX() + horz, getY() + vert);
}

这需要一些调整,但它的作用是选择2个随机数来决定对象的速度(垂直和水平)。然后它将物体移动到那些方向,直到它到达世界的边缘,此时它会使速度无效,因此物体将向相反的方向移动。这与墙壁上的真实反弹不同,因为我没有对击球的角度做任何事情以确定反弹的角度,但这应该能让你开始。如果你想要更逼真的弹跳,​​你将不得不做一些几何计算。