/** * A realization of Mozart's Dice Game * @author Andrew Troedson */import jm.JMC;import jm.music.data.*;import jm.music.tools.*;import jm.midi.*;import jm.util.*;public final class MozartDiceGame implements JMC {		public static void main(String[] args){					MozartPhraseList MPL = new MozartPhraseList(); //the class in which all the phrases are stored		//Create the data objects we want to use		Score score = new Score("MozartDiceGame");		score.setTempo(120.0);		//Parts can have a name, channel, and instrument.		Part piano = new Part("Piano", PIANO);			  for (int j=0; j<4; j++){ //repeates the full waltz twice (ie form ABAB)				for (int i=0; i<8; i++){ //create the first part of the waltz			int randNum = (int)rollDice(2); //roll the dice			System.out.println("roll " + (i+1) + ": " + randNum);			CPhrase nextBar = new CPhrase(0.0);			nextBar = MPL.barArray[i][randNum-2].copy(); //get the appropriate phrase			nextBar.setStartTime((float)((i*3)+(j*24))); //set the phrases start time	  		piano.addCPhrase(nextBar); //add it to the main part	  	}	  	j++; //required to set the correct start times in the second section of the waltz		  		  	for (int i=0; i<8; i++){ //create the second part of the waltz			int randNum = (int)rollDice(2);			System.out.println("roll " + (i+9) + ": " + randNum);			CPhrase nextBar = new CPhrase(0.0);			nextBar = MPL.barArray2[i][randNum-2].copy();//get the phrase from the second phrase table			nextBar.setStartTime((float)((i*3)+(j*24)));	  		piano.addCPhrase(nextBar);	  	}	  			  }	  							//add the main piano part (instrument) to the score		score.addPart(piano);		Mod.transpose(score, 12);				// create a MIDI file of the score		Write.midi(score, "mozart.mid");	}		//method which automates the rolling of a specified number of die	static int rollDice(int dieNum){		int roll = 0;		for (int i=0; i<dieNum; i++){			roll += ((int)(java.lang.Math.random()*6)) + 1;		}		return roll;	}}