BlockworldProblemのインスタンスを解決しようとしています。基本的に、NxNグリッドには、ブロックA、B、C、およびエージェントが含まれます。エージェントのみが移動できます。ブロックに遭遇する途中で、エージェントの位置が切り替わります。たとえば、Agent(1、0)が左に移動してブロックB(0、0)に遭遇すると、2つの新しい位置はAgent(0、0)とB(1、0)になります。
私のエージェントクラスとブロッククラスはどちらもエンティティのサブクラスです。
これが私の関数swap()です。移動後、エージェントがブロック上にあるかどうかをチェックし、ブロックの新しい位置がエージェントの前の位置になります。
(Block block:blockList)で試しましたが、ポリモーフィズムを使おうとすると(Entity en:entityList)では機能しません。
誰かが私が犯した間違いを見つけられますか?
public void swap() {
for (Entity en : entityList) {
if (agent.position.equals(block.position) && (en instanceof Block)) {
System.out.print("Agent overlap block: " + en);
en.previousPosition = new Dimension(block.position.width, block.position.height);
en.setPosition(agent.previousPosition);
}
}
}
まず第一に、ifステートメントの「ブロック」がどこから来たのかを教えていません。あなたがする必要があるかもしれないことは、です:
public void swap(){
for(Entity en:entityList){
if((en instanceof Block)&&(en.position.equals(agent.position)){
// ^here is "en" instead of block
System.out.println("Agent overlab block: "+en);
en.previousPosition=new Dimension(
en.position.width,
en.position.height);
en.setPosition(agent.previousPosition);
}
}
}
最後に、Dimensionの代わりにjava.awt.Pointを使用できます。また、フィールド「previousPosition」にはsetterメソッドを使用する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加