前提・実現したいこと
X,Y座標をテキストフィールドに入力しボタンを押すと、縦横50の塗りつぶされた正方形を描くものです。
ただし正方形の始点の座標は、2次元配列を用いることと、既に存在する正方形と衝突する場合は、「衝突します」と表示させたいです。
java
import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Prog2Lec10Subject02 extends Applet implements ActionListener{
TextField tf1,tf2;
Button additionButton;
int i,j; int x,y; int[][] zahyo; String str = ""; public void init(){ i=j=0; zahyo = new int[10][2]; add(new Label("x座標")); tf1 = new TextField("",5); tf1.addActionListener(this); add(tf1); add(new Label("y座標")); tf2 = new TextField("",5); tf2.addActionListener(this); add(tf2); additionButton = new Button("追加"); additionButton.addActionListener(this); add(additionButton); } public void actionPerformed(ActionEvent e){ if(e.getSource() == additionButton) { x = Integer.parseInt(tf1.getText()); y = Integer.parseInt(tf2.getText()); zahyo[i][0] =x; zahyo[i][1] =y; } repaint(); } public void update(Graphics g){ paint(g); g.drawString(str, 100, 50); if(isCollision() == false){ g.setColor(Color.RED); g.fillRect(x,y, 50, 50); str = ""; i++; } else if(isCollision() == true){ str = "追加しようとする正方形は、他の正方形と衝突します"; } } public boolean isCollision(){ for(int j=0; i>j; j++);{ if(zahyo[0][j]+50 > zahyo[i][0]&& zahyo[1][j]+50 > zahyo[i][1]&& zahyo[i][0]+50 > zahyo[0][j]&& zahyo[i][1]+50 > zahyo[1][j]) return true; } return false; }
}
### 試したこと 最初にx=50,y=50を入れ、次にx=75,y=75を入力すると、重なるため衝突しますと出ました。 しかしx=200,y=100を入れ、次にx=230,y=100を入力すると、重なってしまいます。 恐らく最初のzahyo[i][0],[i][1]にx・yは代入されているので、「i++」の位置か、boolean isCollisionの中身がおかしいような気がするのですが、うまく動かないので、ご教示願います。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/19 03:39
2018/10/19 03:50
退会済みユーザー
2018/10/19 07:35