Computer Science Canada Code modification.... |
Author: | WordLife619 [ Wed Jan 05, 2005 2:44 pm ] |
Post subject: | Code modification.... |
Hello everyone. My group is doing a computer engineering project where we have to create a Music Box. We're done the circuit work and report, the only thing left is....you guessed it, to complete the Turing coding. I would like to kindly request if anyone can modify the following program to replace the default "Mary Had a Little Lamb" song, and insert something more creative. Please note that there are LEDs on my group's circuit, and they respond to the different notes being played by the program. A parallel port is connected from the circuit to the computer. Here is the coding for the program, any help would be well appreicated. Thank you very much. % The "MusicBox" Program % % Here are the input and output values for a specific computer. % These change from machine to machine. % % letter button LED % (musical) (input) (output) % "C" 111 8 % "D" 95 1 % "E" 63 4 % "G" 255 2 % % This message was included so that if this program is altered % in the future, the new programmer has input and output % values for the LED and buttons. If you change the input and % output values be sure to change this comment. const w1 := 200 const w2 := 650 const w3 := 100 % These constants represent the parameters to parallelput that % light the LED for a particular note. const C_LED := 8 const D_LED := 1 const E_LED := 4 const G_LED := 2 const ALL_LED_DARK := 0 const ALL_LED_LIT := 255 % These constants represent the value returned from % parallelget for each of the buttons. const C_BUTTON := 111 const D_BUTTON := 95 const E_BUTTON := 63 const G_BUTTON := 255 % These are the lower-left and upper-right corners of each of % the four buttons. const BTN_X1 := 130 const BTN_Y1 := 130 const BTN_X2 := 200 const BTN_Y2 := 200 const BTN2_X1 := 230 const BTN2_Y1 := 130 const BTN2_X2 := 300 const BTN2_Y2 := 200 const BTN3_X1 := 330 const BTN3_Y1 := 130 const BTN3_X2 := 400 const BTN3_Y2 := 200 const BTN4_X1 := 430 const BTN4_Y1 := 130 const BTN4_X2 := 500 const BTN4_Y2 := 200 % Draws the four boxes corresponding to the notes. procedure DrawButtons drawbox (BTN_X1, BTN_Y1, BTN_X2, BTN_Y2, brightmagenta) drawbox (BTN2_X1, BTN2_Y1, BTN2_X2, BTN2_Y2, brightcyan) drawbox (BTN3_X1, BTN3_Y1, BTN3_X2, BTN3_Y2, brightred) drawbox (BTN4_X1, BTN4_Y1, BTN4_X2, BTN4_Y2, brightblue) drawfill (BTN_X1 + 1, BTN_Y1 + 1, brightmagenta, 0) locate (20, 21) colour (brightmagenta) put "C" .. locate (20, 34) colour (brightcyan) put "D" .. locate (20, 47) colour (brightred) put "E" .. locate (20, 60) colour (brightblue) put "G" .. end DrawButtons % Lights the LED and the on-screen button corresponding % to the C note. Plays the note. procedure PlayCNote parallelput (C_LED) drawfill (BTN_X1 + 1, BTN_Y1 + 1, brightmagenta, brightmagenta) play ("8c") delay (w3) drawfillbox (BTN_X1, BTN_Y1, BTN_X2, BTN_Y2, 0) DrawButtons end PlayCNote % Lights the LED and the on-screen button corresponding % to the D note. Plays the note. procedure PlayDNote parallelput (D_LED) drawfill (BTN2_X1 + 1, BTN2_Y1 + 1, brightcyan, brightcyan) play ("8d") delay (w3) drawfillbox (BTN2_X1, BTN2_Y1, BTN2_X2, BTN2_Y2, 0) DrawButtons end PlayDNote % Lights the LED and the on-screen button corresponding % to the E note. Plays the note. procedure PlayENote parallelput (E_LED) drawfill (BTN3_X1 + 1, BTN3_Y1 + 1, brightred, brightred) play ("8e") delay (w3) drawfillbox (BTN3_X1, BTN3_Y1, BTN3_X2, BTN3_Y2, 0) DrawButtons end PlayENote % Lights the LED and the on-screen button corresponding % to the G note. Plays the note. procedure PlayGNote parallelput (G_LED) play ("8g") drawfill (BTN4_X1 + 1, BTN4_Y1 + 1, brightblue, brightblue) delay (w3) drawfillbox (BTN4_X1, BTN4_Y1, BTN4_X2, BTN4_Y2, 0) DrawButtons end PlayGNote % Blinks the LEDs the specified number of times. procedure BlinkLEDs (numberOfBlinks : int) for i : 1 .. numberOfBlinks parallelput (ALL_LED_LIT) % Light all the LEDs. delay (200) parallelput (ALL_LED_DARK) % Darkens all the LEDs. delay (200) end for end BlinkLEDs % Plays the a demonstration piece of "Mary Had a Little Lamb". procedure Demo var xcount, ycount : int var character : string (1) xcount := 0 ycount := 0 parallelput (ALL_LED_DARK) % Darken all the LEDs. loop drawfilloval (2, 2, xcount, ycount, brightmagenta) xcount := xcount + 4 ycount := ycount + 4 exit when xcount >= 800 end loop drawfillbox (0, 95, 700, 350, white) locate (10, 20) colour (gray) put " This demo will play" colour (blue) put " " put " MARY HAD A LITTLE LAMB." put " " colour (red) put " A light will come on for each corresponding note." put " " put " (i.e. play-by-light-made-even-easier)" put " " put " " put " " put " " put " " put " " put "Press any keyboard key to start the demo, and watch " put "the magical light show!!" loop exit when hasch end loop getch (character) cls locate (10, 5) colour (green) put " YE GOOD OL' DEMO!!!!" DrawButtons PlayENote delay (w1) PlayDNote delay (w1) PlayCNote delay (w1) PlayDNote delay (w1) PlayENote parallelput (ALL_LED_DARK) % Darkens all the LEDs. delay (w1) PlayENote parallelput (ALL_LED_DARK) % Darkens all the LEDs. delay (w1) PlayENote delay (w2) PlayDNote parallelput (ALL_LED_DARK) % Darkens all the LEDs. delay (w1) PlayDNote parallelput (ALL_LED_DARK) % Darkens all the LEDs. delay (w1) PlayDNote delay (w2) PlayENote delay (w1) PlayGNote parallelput (ALL_LED_DARK) % Darkens all the LEDs. delay (w1) PlayGNote delay (w2) PlayENote delay (w1) PlayDNote delay (w1) PlayCNote delay (w1) PlayDNote delay (w1) PlayENote parallelput (ALL_LED_DARK) % Darkens all the LEDs. delay (w1) PlayENote parallelput (ALL_LED_DARK) % Darkens all the LEDs. delay (w1) PlayENote parallelput (ALL_LED_DARK) % Darkens all the LEDs. delay (w1) PlayENote delay (w1) PlayDNote parallelput (ALL_LED_DARK) % Darkens all the LEDs. delay (w1) PlayDNote delay (w1) PlayENote delay (w1) PlayDNote delay (w1) PlayCNote delay (w1) % Blinks all the LEDs on, then off five times. BlinkLEDs (5) end Demo % Allows the user to play with the notes until she or he is % ready to begin. procedure Test var note : int var character : string (1) parallelput (ALL_LED_DARK) % Darkens all the LEDs. locate (5, 10) put "Warm up your fingers on the buttons." put " They are labelled according to the correct pitches..." put " " colour (brightmagenta) put " " .. put "C " : 7 .. colour (brightcyan) put "D" : 7 .. colour (brightred) put "E" : 7 .. colour (brightblue) put "G" : 7 locate (24, 10) put " When you're ready to start, press any keyboard key..." DrawButtons loop note := parallelget delay (50) if note = C_BUTTON then PlayCNote elsif note = D_BUTTON then PlayDNote elsif note = E_BUTTON then PlayENote elsif note = G_BUTTON then PlayGNote end if exit when hasch end loop getch (character) end Test % This procedure is called when the user wins the game. procedure DrawYouWin % Blink all the LEDs on, then off 5 times BlinkLEDs (5) % Plays a tune, shows a message, and displays a graphic. colourback (white) locate (14, 30) put "DY-NO-MITE!!!!!" play ("gg8fe4e8de2e") play ("8de4e8de4ge16g2f2d") cls locate (9, 5) put " WOOOOOOOOOOOWWWWWWW!!!!!" put " " put " YOU DID IT!!!!!!!!!" for counter1 : 1 .. 20 * maxcolor by 20 for counter : 1 .. 50 drawline (counter1 + counter, counter1 + counter, maxx - counter1 - counter, maxy - counter1 - counter, counter1 div 20) end for end for locate (20, 60) put "Congratulations!" end DrawYouWin % Plays the difficult version of the game (no hints). procedure PlayHardDifficulty (var name : string) var last_note, counter, note : int var cnote, dnote, enote, gnote : int := 0 var character : string (1) counter := 0 last_note := -1 DrawButtons locate (5, 10) put " OK ", name, ", when the beep sounds, correctly play" colour (red) put " " put " MARY HAD A LITTLE LAMB" .. colour (brightblue) put " at your own speed on the buttons." parallelput (ALL_LED_DARK) % Darkens all the LEDs. delay (3000) play (">>2C<<") delay (w1) % Loop reads music box buttons until twenty-six different notes % have been played. loop % Loop until a different button in the music % box has been pressed. loop note := parallelget delay (50) exit when note not= last_note end loop last_note := note % Plays the note corresponding to the button pressed. if note = C_BUTTON then PlayCNote cnote := cnote + 1 counter := counter + 1 delay (w3) elsif note = D_BUTTON then PlayDNote dnote := dnote + 1 counter := counter + 1 delay (w3) elsif note = E_BUTTON then PlayENote enote := enote + 1 counter := counter + 1 delay (w3) elsif note = G_BUTTON then PlayGNote gnote := gnote + 1 counter := counter + 1 delay (w3) end if % Exits the loop after twenty-six notes have been played. exit when counter = 26 end loop parallelput (ALL_LED_DARK) % Darkens all the LEDs. if cnote = 3 and dnote = 10 and enote = 11 and gnote = 2 then DrawYouWin delay (1500) else for count : 1 .. 8 colour (count) colourback (count + 3) cls locate (10, 30) put "GAME OVER" delay (400) end for play ("8GGG2E-") delay (400) play ("8FFF2DD") cls locate (10, 13) colourback (white) colour (red) put "You were not successful. Actually, you stunk. " put "Try again." delay (2500) end if end PlayHardDifficulty % Lets the user enter her or his name. procedure EnterName (var name : string) colour (darkgray) locate (10, 10) put "Please enter your name, then press enter" put " " put " -->" .. get name : * put " Thank you" end EnterName % Lights the LED indicating which note to play. % Waits until the user presses the correct button % in the music box and then plays the note and delay. procedure WaitForButtonPress (ledToLight, buttonToWaitFor : int) var note : int parallelput (ledToLight) loop note := parallelget exit when note = buttonToWaitFor end loop if note = C_BUTTON then PlayCNote elsif note = D_BUTTON then PlayDNote elsif note = E_BUTTON then PlayENote elsif note = G_BUTTON then PlayGNote end if delay (w1) end WaitForButtonPress % Plays the easy version of the game. procedure PlayEasyDifficulty (var name : string) var note : int var xcount, ycount : int var character : string (1) parallelput (ALL_LED_DARK) % Darkens all the LEDs. % Draws some graphics. xcount := 0 ycount := 0 loop drawfilloval (2, 2, xcount, ycount, brightred) xcount := xcount + 4 ycount := ycount + 4 exit when xcount >= 800 end loop drawfillbox (0, 95, 700, 350, 0) locate (10, 20) colour (gray) put " EASY VERSION" put " " put " " put " Since we always want to help, here's an easier way " put " " put " a real success in this game. You can " put " " put " PLAY-BY LIGHTS!!!!! When you're ready, press " put " " put " a keyboard key. After each beep, press the button" put " " put " that matches the light that just flashed." put " " % Waits until the user presses a key. loop exit when hasch end loop getch (character) cls locate (10, 5) colour (green) put " PLAY-BY-LIGHT" DrawButtons delay (w2 + w1) % For each note, lights the LED indicating which note to play. % Then waits until the user presses the correct button % in the music box and plays the note. WaitForButtonPress (E_LED, E_BUTTON) WaitForButtonPress (D_LED, D_BUTTON) WaitForButtonPress (C_LED, C_BUTTON) WaitForButtonPress (D_LED, D_BUTTON) WaitForButtonPress (E_LED, E_BUTTON) WaitForButtonPress (E_LED, E_BUTTON) WaitForButtonPress (E_LED, E_BUTTON) WaitForButtonPress (D_LED, D_BUTTON) WaitForButtonPress (D_LED, D_BUTTON) WaitForButtonPress (D_LED, D_BUTTON) WaitForButtonPress (E_LED, E_BUTTON) WaitForButtonPress (G_LED, G_BUTTON) WaitForButtonPress (G_LED, G_BUTTON) WaitForButtonPress (E_LED, E_BUTTON) WaitForButtonPress (D_LED, D_BUTTON) WaitForButtonPress (C_LED, C_BUTTON) WaitForButtonPress (D_LED, D_BUTTON) WaitForButtonPress (E_LED, E_BUTTON) WaitForButtonPress (E_LED, E_BUTTON) WaitForButtonPress (E_LED, E_BUTTON) WaitForButtonPress (E_LED, E_BUTTON) WaitForButtonPress (D_LED, D_BUTTON) WaitForButtonPress (D_LED, D_BUTTON) WaitForButtonPress (E_LED, E_BUTTON) WaitForButtonPress (D_LED, D_BUTTON) WaitForButtonPress (C_LED, C_BUTTON) cls locate (15, 36) put " DONE" locate (17, 30) put "Now try the real thing." BlinkLEDs (3) delay (1000) end PlayEasyDifficulty % Introduces the game by blinking LEDs and playing music. procedure StartGame (var name : string) play ("16CEG8>C<16E>2C") BlinkLEDs (3) locate (15, 30) put "Welcome ", name, "!!!!!!!!!!!!" play ("16CEG8>C<16E>2C<<") BlinkLEDs (3) delay (1000) end StartGame % Draws a button onscreen to let the user continue the game. % Loops until the user presses the button. procedure ContinueGame var xmouse, ymouse, button : int drawbox (44, 14, 61, 31, brightmagenta) colour (green) locate (24, 10) put "Click to continue " loop mousewhere (xmouse, ymouse, button) exit when button = 1 and 44 <= xmouse and xmouse <= 61 and 14 <= ymouse and ymouse <= 31 end loop end ContinueGame % Lets the user choose whether to play the demo, play an % easy game, or play a difficult game. procedure GetSelection (var selection : int) var xmouse, ymouse, button : int cls locate (3, 1) colour (green) put " In this nifty little program, you can try " put " to correctly play" colour (gray) put " " put " MARY had a LITTLE LAMB" locate (7, 20) put " Menu" put " " put " " put " " put " Please use the mouse to click on your selection " locate (15, 19) colour (brightmagenta) put "DEMO" .. colour (brightcyan) put " EASY" .. colour (brightred) put " HARD" .. colour (brightblue) put " QUIT" DrawButtons drawfillbox (0, 75, 700, 110, white) loop mouseshow selection := 0 mousewhere (xmouse, ymouse, button) if button = 1 and xmouse >= BTN_X1 and xmouse <= BTN_X2 and ymouse >= BTN_Y1 and ymouse <= BTN_Y2 then selection := 1 end if if button = 1 and xmouse >= BTN2_X1 and xmouse <= BTN2_X2 and ymouse >= BTN2_Y1 and ymouse <= BTN2_Y2 then selection := 2 end if if button = 1 and xmouse >= BTN3_X1 and xmouse <= BTN3_X2 and ymouse >= BTN3_Y1 and ymouse <= BTN3_Y2 then selection := 3 end if if button = 1 and xmouse >= BTN4_X1 and xmouse <= BTN4_X2 and ymouse >= BTN4_Y1 and ymouse <= BTN4_Y2 then selection := 4 end if exit when selection = 1 or selection = 2 or selection = 3 or selection = 4 end loop end GetSelection % Outputs some graphics when the user quits. procedure QuitProgram locate (10, 10) colour (gray) put " Goodbye!!!!!!!" put " " put " Hope you had a swell time!" delay (2500) cls end QuitProgram % Main program setscreen ("graphics") setscreen ("nocursor") var name : string var selection : int parallelput (ALL_LED_DARK) % Darkens all the LEDs. cls EnterName (name) StartGame (name) ContinueGame % Each time through the loop, gets the user's selection and % plays the demo, the easy game, the hard game, or quit. loop cls GetSelection (selection) cls if selection = 1 then Demo delay (500) elsif selection = 2 then PlayEasyDifficulty (name) elsif selection = 3 then Test cls PlayHardDifficulty (name) end if exit when selection = 4 end loop QuitProgram parallelput (ALL_LED_DARK) % Darkens all the LEDs. |