【Java練習記<5>】簡易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メソッドがそれ。

プロフィール画像
コボリアキラ / kobori akira

ラッパー、トラックメイカー、DJ。
1989年1月6日の「最後の昭和生まれ、最初の平成生まれ」。

[プロフィール] [ディスコグラフィ]

お問い合わせ

ブログのご感想などお気軽にご連絡ください。