【Java練習記】簡易MPC/ブロック崩し
あらすじ
少しJavaのことが分かってきたので、下のサイトを参考にゲーム作りにも取り組んでみた。 Javaでゲーム作りますが何か? -人工知能に関する断創録
このサイトはかなりわかりやすく、とくにインスタンス化については一応の理解はできたような気がする。ブロック崩しは作れるようになった。
またその中で、一つ目の目標であった「キーパンチによって音が鳴る仕組み」をやっと作ることができた。いわゆる 簡易MPC だ。
最終的には、シーケンスみたいなのを組むことで、「Madeon’s Adventure Machine」みたいななアプリも作れるかもしれない。自作曲の宣伝にもなるし。
サンプルコード
SoundTest.java
import java.awt.Container;import javax.swing.JFrame;public class SoundTest extends JFrame {public SoundTest() {setTitle(“簡易MPC”);MainPanel panel = new MainPanel();Container contatePane = getContentPane();contatePane.add(panel);pack();}public static void main(String[] args) {SoundTest frame = new SoundTest();frame.setDefaultCloseOperation(EXIT_ON_CLOSE);frame.setVisible(true);}}#### MainPanel.java
import java.applet.Applet;import java.applet.AudioClip;import java.awt.Dimension;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.JPanel;public class MainPanel extends JPanel implements KeyListener {private static final int WIDTH = 240;private static final int HEIGHT = 240;//インスタンスの発生Sound kick = new Sound(“kick.wav”, true);Sound snare = new Sound(“snare.wav”, true);Sound hihat = new Sound(“hihat.wav”, true);public MainPanel() {setPreferredSize(new Dimension(WIDTH, HEIGHT));setSize(WIDTH, HEIGHT);this.setFocusable(true);addKeyListener(this);}@Override public void keyPressed(KeyEvent e) {int key = e.getKeyCode();switch (key) {case KeyEvent.VK_S:kick.play();break;case KeyEvent.VK_D:snare.play();break;case KeyEvent.VK_L:hihat.play();break;default:break;}}@Override public void keyTyped(KeyEvent e) {}@Override public void keyReleased(KeyEvent e) {int key = e.getKeyCode();switch (key) {case KeyEvent.VK_S:kick.stop();break;case KeyEvent.VK_D:snare.stop();break;case KeyEvent.VK_L:hihat.stop();break;default:break;}}}#### Sound.java
import java.applet.Applet;import java.applet.AudioClip;public class Sound {private String filename;private boolean attempt;private AudioClip audioClip;public Sound (String filename, boolean attempt) {this.filename = filename;this.attempt = attempt;audioClip = Applet.newAudioClip(getClass().getResource(filename));}public void play() {if (attempt) {audioClip.play();attempt = false;}}public void stop() {audioClip.stop();attempt = true;}}## 工夫したこと
「キーを押している間は音が鳴り、キーを話すと止まる」ようにすること。そして、「キーを押して音が鳴るのは1度(押していると、連続的にタイプしてると判断される?)」となるようにするのに苦労した。
自分の解答は、booleanをつくって処理するようにした。Soundクラスのplayメソッドとstopメソッドがそれ。