0

CSの授業では、greenfootというプログラムを使って簡単なゲームを作りました。このゲームは、おなじみのゲーム「フロッガー」によく似ていました。私は今、自分で練習していて、似たようなゲームを作りたいと思っています。私の新しいゲームは、パックマンにいくぶん近いものになるでしょう。画面の上部に到達する必要があるロケット船を制御する前に作成したゲーム。その間、長方形が壁に跳ね返るサイズと速度をランダムに選択しました。でも、新しいゲームはもっと面白くしたい。これらのオブジェクトが最初に順応したときにランダムな方向を作成し、壁をバウンドさせてその方向に継続するループが必要です。これは、あの有名なスクリーン セーバーが跳ね回るようなものです。これが最初のゲームのコードです。このようなものですか? 結局のところ、私の質問は、

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

Up、RightUp、Right... LeftUp などの方向列挙を定義します。

ランダムを使用して 1 つを選択します。方向は dX,dX の位置の変化に変換されるため、たとえば 1 ピクセルの移動ステップでは、UpLeft は -1,-1 (原点は左上です!) で、ループで X に dx を、Y に dy を追加するだけです。

于 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 に答える