0

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

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;
  }
}
4

3 回答 3

0

定义一个方向枚举,例如上、右上、右...左上。

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

于 2012-04-10T14:57:06.320 回答
0

我想,沿着这些路线的东西会起作用:

Random random = new Random();

int direction = random.nextInt(1); // gives 0 or 1 randomly
if (direction == 0) {
   // move left
} else {
   // move right
}
于 2012-04-10T14:57:20.437 回答
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 个随机数来决定对象的速度(垂直和水平)。然后它在这些方向上移动对象,直到它到达世界的边缘,此时它抵消了速度,因此对象将向相反的方向移动。这与真正的墙壁反弹不同,因为我没有对击球的角度做任何事情来确定反弹的角度,但这应该能够让你开始。如果你想要一个更真实的反弹,你必须做一些几何计算。

于 2012-04-10T14:57:24.443 回答