前提・実現したいこと
現在Javaで動画を見ながらShootinggameを作っています。
参考 :https://www.bing.com/videos/search?q=java+shooting+game&&view=detail&mid=D3214E5636C97CC297A8D3214E5636C97CC297A8&&FORM=VRDGAR&ru=%2Fvideos%2Fsearch%3Fq%3Djava%2520shooting%2520game%26qs%3DAS%26form%3DQBVR%26sp%3D2%26pq%3Djava%2520shooting%26sk%3DHS1%26sc%3D4-13%26cvid%3D8D08CDB4127745DEB8494211FE7F8385
一通り完成したので、自分なりに変えたいと思っています。
ゲームスタート画面に画像を挿入したいです
参考 :https://www.bing.com/videos/search?q=java+%e7%94%bb%e5%83%8f&&view=detail&mid=6DB1C742992D3236CCEE6DB1C742992D3236CCEE&&FORM=VRDGAR&ru=%2Fvideos%2Fsearch%3Fq%3Djava%2520%25E7%2594%25BB%25E5%2583%258F%26qs%3Dn%26form%3DQBVR%26sp%3D-1%26pq%3Djava%2520%25E7%2594%25BB%25E5%2583%258F%26sc%3D8-7%26sk%3D%26cvid%3D8D7F28E3208F4622976BD5684F5CC2CD
発生している問題・エラーメッセージ
エラーは出ていませんが、画像は出ません
該当のソースコード
JAVA
1 2Shooting 3package game; 4 5import java.awt.BorderLayout; 6import java.awt.Color; 7import java.awt.Container; 8import java.awt.Font; 9import java.awt.FontMetrics; 10import java.awt.Graphics; 11import java.awt.event.KeyEvent; 12import java.util.ArrayList; 13import java.util.Random; 14 15import javax.swing.*; 16 17public class Shooting { 18 19 public static ShootingFrame shootingFrame; //変数の設定(どこからでも使えるように) 20 public static boolean loop; //変数でループを終われるように 21 22 public static void main(String[] args) { 23 24 shootingFrame = new ShootingFrame(); //フレーム生成 タイトルとか大きさとか設定したやつ 25 loop = true; 26 27 //ゲームの開始 28 Graphics gra = shootingFrame.panel.image.getGraphics(); 29 30 //FPS 31 long startTime = 0; 32 long fpsTime = 0; 33 int fps = 30; 34 int FPS = 0; 35 int FPSCount = 0; 36 37 EnumShootingScreen screen = EnumShootingScreen.START; 38 39 //GAME 40 int playerX = 0; 41 int playerY = 0; 42 int score = 0; 43 int level = 0; 44 long levelTimer = 0; 45 int bulletInterval = 0; //玉を遅くする 46 ArrayList<Bullet> bullets_player = new ArrayList<>(); 47 ArrayList<Bullet> bullets_enemy = new ArrayList<>(); 48 ArrayList<Enemy> enemies = new ArrayList<>(); 49 Random random = new Random(); 50 51 while (loop) { 52 if ((System.currentTimeMillis() - fpsTime) >= 1000) { 53 54 fpsTime = System.currentTimeMillis(); 55 FPS = FPSCount; 56 FPSCount = 0; 57 58 } 59 FPSCount++; 60 61 startTime = System.currentTimeMillis(); 62 63 gra.setColor(Color.WHITE); //背景色 64 gra.fillRect(0, 0, 500, 500); 65 66 switch (screen) { 67 case START: 68 69 gra.setColor(Color.BLACK); //描画色 70 71 Font font = new Font("SansSerif", Font.PLAIN, 50); 72 gra.setFont(font); 73 FontMetrics metrics = gra.getFontMetrics(font); //フォント描画をカプセル化する 74 gra.drawString("Shooting", 250 - (metrics.stringWidth("Shooting") / 2), 100); 75 76 font = new Font("SansSerif", Font.PLAIN, 20); 77 gra.setFont(font); 78 metrics = gra.getFontMetrics(font); 79 gra.drawString("スペース押したら始まる", 250 - (metrics.stringWidth("Press SPACE to Start") / 2), 160); 80 81 //画像挿入 82 83 //JFrame frame = new JFrame("テスト"); 84 85 Container contentPane = shootingFrame.getContentPane(); 86 87 JLabel label = new JLabel("にゃんこ"); 88 label.setHorizontalAlignment(JLabel.CENTER); 89 ImageIcon icon = new ImageIcon( 90 "C:省略"); 91 JLabel picture = new JLabel(icon); 92 93 contentPane.add(picture, BorderLayout.CENTER); 94 contentPane.add(label, BorderLayout.NORTH); 95 shootingFrame.setVisible(true); 96 97 //*/ 98 99 if (Keyboard.isKeyPressed(KeyEvent.VK_SPACE)) { 100 screen = EnumShootingScreen.GAME; //画面遷移 101 bullets_player = new ArrayList<>(); //ゲーム開始時に初期化 102 enemies = new ArrayList<>(); 103 playerX = 235; 104 playerY = 430; 105 score = 0; 106 level = 0; 107 } 108 109 break; 110 111 case GAME: 112 113 if (System.currentTimeMillis() - levelTimer > 10 * 1000) { 114 levelTimer = System.currentTimeMillis(); 115 level++; 116 } 117 118 //味方 119 gra.setColor(Color.BLUE); 120 gra.fillRect(playerX + 10, playerY, 10, 10); 121 gra.fillRect(playerX, playerY + 10, 30, 10); 122 123 for (int i = 0; i < bullets_player.size(); i++) { 124 Bullet bullet = bullets_player.get(i); 125 gra.setColor(Color.BLUE); 126 gra.fillRect(bullet.x, bullet.y, 5, 5); 127 bullet.y -= 10; 128 129 if (bullet.y < 0) { 130 bullets_player.remove(i); 131 i--; 132 } 133 134 for (int l = 0; l < enemies.size(); l++) { 135 Enemy enemy = enemies.get(l); 136 if (bullet.x >= enemy.x && bullet.x <= enemy.x + 30 && 137 bullet.y >= enemy.y && bullet.y <= enemy.y + 20) { 138 enemies.remove(l); 139 140 score += 10; 141 } 142 } 143 } 144 145 //敵キャラ 146 gra.setColor(Color.RED); 147 148 for (int i = 0; i < enemies.size(); i++) { 149 Enemy enemy = enemies.get(i); 150 gra.fillRect(enemy.x, enemy.y, 30, 10); 151 gra.fillRect(enemy.x + 10, enemy.y + 10, 10, 10); 152 enemy.y += 3; 153 if (enemy.y > 500) { 154 enemies.remove(i); 155 i--; 156 } 157 158 if (random.nextInt(level < 50 ? 80 - level : 30) == 1) 159 bullets_enemy.add(new Bullet(enemy.x, enemy.y)); 160 if ((enemy.x >= playerX && enemy.x <= playerX + 30 && 161 enemy.y >= playerY && enemy.y <= playerY + 20) || 162 (enemy.x + 30 >= playerX && enemy.x + 30 <= playerX + 30 && 163 enemy.y + 20 >= playerY && enemy.y + 20 <= playerY + 20)) { 164 165 screen = EnumShootingScreen.GAME_OVER; 166 score += (level - 1) * 100; 167 } 168 } 169 170 if (random.nextInt(level < 10 ? 30 - level : 10) == 1) 171 enemies.add(new Enemy(random.nextInt(470), 0)); 172 173 for (int i = 0; i < bullets_enemy.size(); i++) { 174 Bullet bullet = bullets_enemy.get(i); 175 gra.fillRect(bullet.x, bullet.y, 5, 5); 176 bullet.y += 10; 177 178 if (bullet.y > 500) { 179 bullets_enemy.remove(i); 180 i--; 181 } 182 183 if (bullet.x >= playerX && bullet.x <= playerX + 30 && 184 bullet.y >= playerY && bullet.y <= playerY + 20) { 185 screen = EnumShootingScreen.GAME_OVER; 186 score += (level - 1) * 100; 187 } 188 } 189 190 if (Keyboard.isKeyPressed(KeyEvent.VK_LEFT) && playerX > 0) //左に移動 191 playerX -= 8; //左矢印キーを押したあとにマイナスに移動 192 if (Keyboard.isKeyPressed(KeyEvent.VK_RIGHT) && playerX < 470) //右に移動 193 playerX += 8; //左矢印キーを押したあとにマイナスに移動 194 if (Keyboard.isKeyPressed(KeyEvent.VK_UP) && playerY > 30) //上に移動 195 playerY -= 8; //左矢印キーを押したあとにマイナスに移動 196 if (Keyboard.isKeyPressed(KeyEvent.VK_DOWN) && playerY < 450) //下に移動 197 playerY += 8; //左矢印キーを押したあとにマイナスに移動 198 199 if (Keyboard.isKeyPressed(KeyEvent.VK_SPACE) && bulletInterval == 0) { //spaceで発射 200 bullets_player.add(new Bullet(playerX + 12, playerY)); //玉のインスタンスで発射が出来る 201 bulletInterval = 8; 202 } 203 204 if (bulletInterval > 0) 205 bulletInterval--; 206 207 gra.setColor(Color.BLACK); 208 font = new Font("SansSerif", Font.PLAIN, 20); 209 metrics = gra.getFontMetrics(font); 210 gra.setFont(font); 211 gra.drawString("SCORE:" + score, 470 - metrics.stringWidth("SCORE:" + score), 430); 212 gra.drawString("LEVEL:" + level, 470 - metrics.stringWidth("LEVEL:" + level), 450); 213 214 break; 215 216 case GAME_OVER: 217 gra.setColor(Color.BLACK); 218 font = new Font("SansSerif", Font.PLAIN, 30); 219 gra.setFont(font); 220 metrics = gra.getFontMetrics(font); 221 gra.drawString("GAME OVER", 250 - (metrics.stringWidth("Score:" + score) / 2), 150); 222 gra.drawString("Press ESC to Return Start Screen", 223 250 - (metrics.stringWidth("Press ESC to Return Start Screen") / 2), 200); 224 if (Keyboard.isKeyPressed(KeyEvent.VK_ESCAPE)) { 225 screen = EnumShootingScreen.START; 226 } 227 break; 228 229 } 230 231 gra.setColor(Color.BLACK); 232 gra.setFont(new Font("SansSerif", Font.PLAIN, 10)); 233 gra.drawString(FPS + "FPS", 0, 470); 234 235 shootingFrame.panel.draw(); //ブァッフアした結果を表示する関数の呼び出し 236 237 try { 238 long runTime = System.currentTimeMillis() - startTime; 239 if (runTime < (1000 / fps)) { 240 Thread.sleep((1000 / fps) - (runTime)); 241 } 242 243 } catch (InterruptedException e) { 244 e.printStackTrace(); 245 } 246 } 247 } 248} 249 250ShootingFrame 251package game; 252 253import java.awt.event.WindowAdapter; 254import java.awt.event.WindowEvent; 255 256import javax.swing.*; 257 258public class ShootingFrame extends JFrame { 259 260 //drawを変数に 261 public ShootingPanel panel; 262 263 public ShootingFrame() { 264 265 //インスタンス生成 266 panel = new ShootingPanel(); 267 this.add(panel); 268 269 this.addWindowListener(new WindowAdapter() { 270 @Override 271 public void windowClosed(WindowEvent e) { 272 super.windowClosed(e); 273 Shooting.loop = true; 274 } 275 }); 276 277 this.addKeyListener(new Keyboard()); //インスタンス生成 キーボード入力が受け取れる 278 this.setDefaultCloseOperation(EXIT_ON_CLOSE); //×を押したときの処理 279 this.setTitle("Shooting"); //タイトル設定 280 this.setSize(500, 500); // ウィンドウの大きさ 281 this.setLocationRelativeTo(null); //nullで中央に出現 282 this.setResizable(false); //リサイズを不可能に 283 this.setVisible(true); //ウィンドウの表示・非表示 284 285 } 286} 287 288 289
試したこと
Contrainer型の変数をShootingFrameから
取得したのですが、ここが間違っているのでしょうか?
補足情報(FW/ツールのバージョンなど)
eclipse
Version: 2021-03 (4.19.0)
場違いな質問をしているかもしれませんが、
どなたか教えて頂けると幸いです。
回答1件
あなたの回答
tips
プレビュー