前提・実現したいこと
既にブロックが置かれている場所だけに
ブロックを置けなくしたい
発生している問題・エラーメッセージ
ブロックが置かれていない場所でも置かれているという メッセージが出てブロックを置けない
該当のソースコード
java
1import MyLib.Swing.*; 2import javax.swing.*; 3import java.awt.*; 4import java.awt.event.*; 5import java.util.*; 6 7public class GTest extends JFrame implements KeyListener 8{ 9 10 static GTest Frame; 11 static JPanel Panel; 12 13 boolean Back = false; 14 15 int BlockWidth = 10; 16 int BlockHeight = 10; 17 int BlockX = 9; 18 int BlockY = 32; 19 20 boolean Copy = false; 21 22 ArrayList<Integer> CopyX = new ArrayList<Integer>(); 23 ArrayList<Integer> CopyY = new ArrayList<Integer>(); 24 25 public static void main(String[] args) 26 { 27 Frame = new GTest(); 28 MFrame.SetFrame(Frame, "グラフィックテスト", 500, 500, true, false, true); 29 } 30 31 GTest() 32 { 33 Panel = new JPanel(); 34 MPanel.nullLayout(Panel); 35 36 addKeyListener(this); 37 38 getContentPane().add(Panel, BorderLayout.CENTER); 39 } 40 41 public void paint(Graphics g) 42 { 43 Dimension size = getSize(); 44 45 g.setColor(Color.black); 46 47 if(!Back){ 48 g.fillRect(0, 0, size.width - 1, size.height - 1); 49 } 50 51 if(Copy){ 52 for(int i = 0; i < CopyX.size(); i++){ 53 g.setColor(Color.white); 54 g.fillRect(CopyX.get(i), CopyY.get(i), BlockWidth, BlockHeight); 55 } 56 } 57 58 g.setColor(Color.red); 59 g.fillRect(BlockX, BlockY, 10, 10); 60 } 61 62 public void keyPressed(KeyEvent e) 63 { 64 //System.out.println(e.getKeyText(e.getKeyCode())); 65 switch(e.getKeyText(e.getKeyCode())){ 66 case "上":{ 67 BlockY -= BlockHeight; 68 repaint(); 69 }break; 70 71 case "下":{ 72 BlockY += BlockHeight; 73 repaint(); 74 }break; 75 76 case "右":{ 77 BlockX += BlockWidth; 78 repaint(); 79 }break; 80 81 case "左":{ 82 BlockX -= BlockWidth; 83 repaint(); 84 }break; 85 86 case "Enter":{ 87 System.out.println("現在X:" + BlockX); 88 System.out.println("現在Y:" + BlockY); 89 System.out.println("検索値X:" + CopyX.contains(BlockX)); 90 System.out.println("検索値Y:" + CopyY.contains(BlockY)); 91 if(!CopyX.contains(BlockX) || !CopyY.contains(BlockY)){ 92 CopyX.add(BlockX); 93 CopyY.add(BlockY); 94 Copy = true; 95 repaint(); 96 }else{ 97 System.out.println("その場所には既にブロックがあります"); 98 } 99 }break; 100 101 case "スペース":{ 102 try{ 103 CopyX.remove(CopyX.indexOf(BlockX)); 104 CopyY.remove(CopyY.indexOf(BlockY)); 105 repaint(); 106 }catch (IndexOutOfBoundsException ioobe){ 107 System.out.println("その場所にブロックはありません"); 108 } 109 }break; 110 111 case "Esc":{ 112 CopyX.clear(); 113 CopyY.clear(); 114 CopyX.trimToSize(); 115 CopyY.trimToSize(); 116 repaint(); 117 }break; 118 } 119 120 if(BlockY <= 31){ 121 BlockY = 32; 122 repaint(); 123 } 124 125 if(BlockY >= 483){ 126 BlockY = 482; 127 repaint(); 128 } 129 130 if(BlockX <= 8){ 131 BlockX = 9; 132 repaint(); 133 } 134 135 if(BlockX >= 483){ 136 BlockX = 482; 137 repaint(); 138 } 139 } 140 141 public void keyReleased(KeyEvent e) 142 { 143 144 } 145 146 public void keyTyped(KeyEvent e) 147 { 148 149 } 150 151}
試したこと
今の座標がブロックを設置した座標かどうか判定して
設置されていたらブロックを設置しないようにしました
補足情報(FW/ツールのバージョンなど)
javaのバージョン9.0.4
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/24 06:12
2018/02/25 00:08