2

http://i.stack.imgur.com/P7Ano.png <- 画像 ~..~

うまくいけば、タイトルはある程度有益です。私は現在、Java で初めてのゲームを作成していて、特定のコードについて助けが必要です。

どうぞ:

ヘビが赤い四角形 (以下「ブロブ」) の上を移動すると、その四角形はランダムに生成された新しい座標で再描画されます。これらの座標はランダムに生成されるため、ブロブがヘビの上にペイントされる可能性があります。

私はそれを避けたいので、ランダムな座標を生成するメソッドがヘビの現在の座標に対してそれらをチェックするようにしました。ヘビは 5x5px のセグメントで構成され、それぞれが 2D 配列に独自の座標を格納しています。

私のロジックは次のようになります。1) X 座標と Y 座標を生成します。2) 座標の差分を取得します (相互の距離など) 3) 相互の COLLISIONRANGE (5px) 内にある場合 -> それらの座標を使用しないでください。

私が本当に求めていること:

これは問題ない解決策ですか?これを確認する方法に明らかな欠点はありますか?ゲームをプレイしていると、System.out.println("Log: No-go spawn #" + i); のトリガーが増えます。私は自然だと思うよりもロギングのためにそこにいます。

ランダムに生成された座標は、多くの場合、ヘビ セグメントの COLLISIONRANGE 内にあり、すべてが正しくないようです。

私の方法:

private void generateBlobCoordinates() {
    Random randomGenerator = new Random();
    boolean isClearSpawn = true;

    int x = randomGenerator.nextInt(BORDER_X_MAX);
    int y = randomGenerator.nextInt(BORDER_Y_MAX);

    int xDiff;
    int yDiff;

    // If generated coords are within COLLISIONRANGE, set isClearSpawn to false
    for(int i = 0; i < snakeSegments.length; i++) {
        if(snakeSegments[i][0] != -1) {
            xDiff = Math.abs(x - snakeSegments[i][0]);
            yDiff = Math.abs(y - snakeSegments[i][1]);

            if(xDiff <= COLLISIONRANGE || yDiff <= COLLISIONRANGE) {
                isClearSpawn = false;
                System.out.println("Log: No-go spawn #" + i);
                break;
            }
        }
        else
            break;
    }

    if(isClearSpawn == true) {
        blobX = x;
        blobY = y;
    }
    else
        generateBlobCoordinates();
}
4

1 に答える 1

1

あなたが心配するのは正しいです。OR 条件をテストしていますが、AND が必要です。そうしないと、ヘビがいる行または列のどこでも衝突が発生します。

変化する

        if(xDiff <= COLLISIONRANGE || yDiff <= COLLISIONRANGE) {

        if(xDiff <= COLLISIONRANGE && yDiff <= COLLISIONRANGE) {
于 2013-02-07T02:13:15.670 に答える