0

学校で新しいタスクを取得して、スネークゲームを最初からコーディングし、スネークヘッドが食べ物を食べるときに配列を使用して新しいスネークボディパーツを追加する必要があります。最初は、スネークに1つのヘッドと2つのボディパーツが必要です。これを行う方法を考えてください..そこにいる誰かが正しい方向に私を助けることができますか..どのように始めるのですか?これまでの私のコードは次のとおりです。

世界:

public class WorldofSnake extends World
{

    /**
     * Constructor for objects of class WorldofSnake.
     * 
     */
    public WorldofSnake()
    {    

        super(600, 400, 1); 

        addObject ( new Snake(),70 , 50);
        addObject ( new Food(), Greenfoot.getRandomNumber(600), Greenfoot.getRandomNumber(400));
    }
}

クラススネーク:

import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Snake here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Snake extends Actor
{

private int foodEaten;



public Snake()
{
     foodEaten = 0;
}


public void act() 
{
       checkKeypress();
       lookForFood();
    }

    public void checkKeypress()
    { if(Greenfoot.isKeyDown("left")){
      setLocation(getX() - 2,(getY()));
    }
      if(Greenfoot.isKeyDown("right")){
      setLocation(getX() + 2,(getY()));
    }
      if(Greenfoot.isKeyDown("up")){
      setLocation(getX() ,(getY() - 2));  
    }
      if(Greenfoot.isKeyDown("down")){
      setLocation(getX() ,(getY() + 2));  
}

}
public void lookForFood()
{
  Actor a = getOneIntersectingObject(Food.class);
  if (a !=null)
{
  getWorld().removeObject(a);
  getWorld().addObject ( new Food(), Greenfoot.getRandomNumber(600), Greenfoot.getRandomNumber(400));
  foodEaten = foodEaten + 1;
}

}
}
4

1 に答える 1

1

あなたの質問は、単純な配列処理よりも一般的なものだと感じています。

スネーク クラスに多くのスプライト インタラクション ロジックを配置しようとしているようです。

おそらくより良いアイデアは、ユーザー入力を別の場所に移動し、ゲーム ボードに状態変化を衝突検出を含むさまざまなスプライト (ヘビ、食べ物、壁など) に伝達させることです。ゲーム ボードがヘビと食べ物の衝突を検出すると、食べ物のスプライトを次の位置に移動し、プレイ中のヘビ オブジェクトで Eat() を呼び出します。ヘビと自分自身の衝突を検出すると、ゲームは終了します。

ヘビがボード上に自分自身を描画するようにしたり*、少なくともボードが処理する表示情報を保存したりすることは不合理ではありません。スネーク オブジェクトは、スネークを構成するブロックの座標を格納する配列 (より良いのは ArrayList) を持つことができます。ヘビが動くと、配列をインクリメントしてポイントを変更し、動きの方向と移動距離を考慮に入れることができます。私がそれを実装していた場合、ヘビがボードを横断するときにヘビの部分をどのように回転させるかをヘビに指示する一連のピボット ポイントを使用します。ピボット ポイントが有効でなくなったら (ヘビにはピボットを横切る部分がなくなります)、配列から削除します。

私の提案です。私は生計を立てるためにゲームを作っているわけではないので、もっと良い方法があると確信しています。

*前者の設定方法についてさらに参照したい場合は、Gang of Four によるデザイン パターンの InDesign のようなアプリで使用されている前者の例を見つけることができます。

于 2011-10-20T20:04:14.353 に答える