/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * JavaWorld Library, Copyright 2011 Bryan Chadwick * * * * FILE: ./world/sound/test/Mario.java * * * * This file is part of JavaWorld. * * * * JavaWorld is free software: you can redistribute it and/or * * modify it under the terms of the GNU General Public License * * as published by the Free Software Foundation, either version * * 3 of the License, or (at your option) any later version. * * * * JavaWorld is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with JavaWorld. If not, see <http://www.gnu.org/licenses/>. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package world.sound.test; import image.*; import world.sound.*; import world.sound.tunes.*; import java.util.*; /** Simple class that demonstrates playing a melody... a simpler * version of the classic Nintendo soundtrack */ public class Mario extends SoundWorld{ /** When created... reset the iterator */ Mario(){ for(int p : this.themeInts){ this.theme.add(new Note(p, 1)); } this.reset(); } /** Medium tick-rate */ public double tickRate(){ return 0.2; } /** Draw the beat number in the center of the Scene */ public Scene onDraw(){ return new EmptyScene(100, 100) .placeImage(new Text(""+num, 20, "black"), 50, 60); } /** Loop if needed, move to the next note, and increase the number. */ public void onTick(){ if(!this.notes.hasNext()) this.reset(); this.num++; Note n = this.notes.next(); if(n.getPitch() != 0) this.tickTunes.addNote(ORGAN, n); } /** Reset the iterator to the beginning of the Notes */ void reset(){ this.notes = this.theme.iterator(); } /** Counting the beats... */ int num; /** The rest of the notes to be played */ Iterator<Note> notes; /** The underlying notes. We use the Chord constructor to generate a * list of notes from a list of integers (0 means no note, others * come from the {@link world.sound.tunes.SoundConstants SoundConstants} * interface. */ ArrayList<Note> theme = new ArrayList<Note>(); List<Integer> themeInts = Arrays.asList( 0,0,0,0, NoteE, NoteE,0, NoteE,0, NoteC, NoteE,0, NoteG,0,0,0, NoteDownG,0,0,0, NoteC,0,0, NoteDownG,0,0, NoteDownE,0,0, NoteDownA,0, NoteDownB,0, NoteDownAp,0, NoteDownA, NoteDownG, NoteE,0, NoteG, NoteA,0, NoteF, NoteG,0, NoteE,0, NoteC,0, NoteD, NoteDownB,0, NoteC,0,0, NoteDownG,0,0, NoteDownE,0,0, NoteDownA,0, NoteDownB,0, NoteDownAp,0, NoteDownA, NoteDownG, NoteE,0, NoteG, NoteA,0, NoteF, NoteG,0, NoteE,0, NoteC,0, NoteD, NoteDownB,0,0,0,0,0); /** Simple Main method (that Java runs) to start the animation/sound */ public static void main(String[] argv){ // Create the world and start the animation new Mario().bigBang(); } }