2012-04-10 12 views
0

CSクラスでは、greenfootというプログラムを使って単純なゲームを作った。あなたが慣れているなら、このゲームはゲーム「Frogger」に非常に似ていました。私は今自分で練習しており、ゲームを似たものにしたいと思っています。私の新しいゲームは、PacManに幾分近くなるだろう。私がスクリーンの上に到達する必要のあるロケット船を制御する前に作ったゲーム。一方、私はランダムに選択されたサイズと速度の壁の矩形のバウンスのためにしました。しかし、私は新しいゲームのためにもっと興味深いものにしたいと思っています。私は最初に準拠したときにランダムな方向を作り出し、壁をバウンスしてその方向に進み、その周りにバウンスする有名なスクリーンセーバーによく似た、これらのオブジェクトのループが必要です。ここに最初の試合のための私のコードですが、これは何ですか? 最終的に私の質問は、どのようにランダムな方向のループを書くのですか?オブジェクトのランダムな方向ループを探す

+0

それはうまく機能していますか?何が問題ですか? – talnicolas

+0

はい、これは私の最初のゲームのために働いています。しかし、私は、左から始めて毎回右に行くのではなく、ランダムな新しいループが必要です。 –

+0

これはちょっと関係ないかもしれませんが、これはポケモン様式のゲームプレイに近いと思います。タイルの衝突フラグを設定する方がよいでしょう。ダイナミックエリアが可能になります。 –

答えて

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

方向を定義列挙 例えば Up、RightUp、Right ... LeftUp。

ランダムを使用して1つを選択します。 方向はdX、dXの位置の変化に変換されます。つまり、移動ステップが1ピクセルの場合、UpLeftは-1、-1(原点の左上) です。ループ内に単純にdxをXに追加し、dyをYに追加します。これらの線に沿って

0

何かが、私は推測する、働くだろう:

Random random = new Random(); 

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

単にif(新しいjava.util.Random()。nextBoolean()) 'または' if(Math.random()> = 0.5) 'ではないでしょうか? – IchBinKeinBaum

+0

@IchBinKeinBaumうん、いいね。しかし、New2.javaはJavaに新しいので、Greenfootを使用しています。効率的な1ライナーではなく、コードが多かれ少なかれ自明です。 – maksimov

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つの乱数を選択することです。次に、オブジェクトが世界の端に到達するまでオブジェクトをその方向に移動させます。オブジェクトの速度が反転するとオブジェクトは反対方向に移動します。これは、バウンスの角度を決めるためにヒットの角度を何もしないので、壁からの真のバウンスと同じではありませんが、これはあなたを始めることができるはずです。より現実的なバウンスが必要な場合は、いくつかの幾何学的計算を行う必要があります。

+0

はい!これは正解です。ありがとうございます。私は変更が必要なものを変更し、それが動作すると確信しています。ありがとうございました! –

+0

@ New2.java問題はありません。 – twain249

関連する問題