program test { #include #include #include #include var hi_score = 0 var input = 0 var num_tones = 0 var status_of_game = 0 var tone_1 = 0 var tone_2 = 0 var tone_3 = 0 var tone_4 = 0 var tone_5 = 0 var current_tone = 0 var my_score = 0 var set_tone_flag = 0 var start_flag = 0 sensor touch1 on 1 touch1 is switch as boolean event tRelease_touch1EventRelease when touch1.released sensor light2 on 2 light2 is light as percent event lRange_light2EventRange when light2 is 45..100 sensor touch3 on 3 touch3 is switch as boolean event tRelease_touch3EventRelease when touch3.released event equal_status_of_gameEventEqual when status_of_game = 10 event equal_set_tone_flagEventEqual when set_tone_flag = 10 event equal_set_tone_flagEventEqual0 when set_tone_flag = 30 event equal_start_flagEventEqual when start_flag = 10 event greater_inputEventHigh when input > 0 event equal_set_tone_flagEventEqual1 when set_tone_flag = 20 macro START_GAME_TUNE { tone 587 for 10 tone 740 for 10 tone 880 for 10 tone 1175 for 30 wait 200 } macro SELECT_TONES { set_tone_flag = 10 wait until equal_set_tone_flagEventEqual1 tone_1 = current_tone if num_tones > 10{ set_tone_flag = 10 wait until equal_set_tone_flagEventEqual1 tone_2 = current_tone if num_tones > 20{ set_tone_flag = 10 wait until equal_set_tone_flagEventEqual1 tone_3 = current_tone if num_tones > 30{ set_tone_flag = 10 wait until equal_set_tone_flagEventEqual1 tone_4 = current_tone if num_tones > 40{ set_tone_flag = 10 wait until equal_set_tone_flagEventEqual1 tone_5 = current_tone } else { } } else { } } else { } } else { } } macro WIN_TUNE { tone 740 for 10 tone 880 for 10 tone 1175 for 30 wait 100 } macro LOSE_TUNE { tone 147 for 30 tone 104 for 50 wait 100 } macro HI_SCORE_TUNE { tone 587 for 10 tone 740 for 10 tone 880 for 10 tone 1175 for 10 tone 880 for 10 tone 740 for 10 tone 587 for 20 tone 1175 for 30 wait 150 } macro SET_PLAY_TONE { comment (0, 0 ) "randomly choose a tone (1#c2 or 3) and play it" current_tone = ( Random 10 to 40 ) if current_tone is 10..20{ tone 587 for 30 current_tone = 10 } else { if current_tone is 20..30{ tone 740 for 30 current_tone = 20 } else { tone 880 for 30 current_tone = 30 } } } event greater_status_of_gameEventHigh when status_of_game > 0 main { ext InterfaceType "kFreestyle" rcx_ClearTimers bbs_GlobalReset([A B C]) trigger equal_start_flagEventEqual trigger greater_inputEventHigh trigger equal_set_tone_flagEventEqual1 start TouchWatcher0 start LightWatcher1 start TouchWatcher2 start variableWatcher3 start variableWatcher4 start variableWatcher5 rcx_Priority( 8) trigger tRelease_touch1EventRelease trigger lRange_light2EventRange trigger tRelease_touch3EventRelease trigger equal_status_of_gameEventEqual trigger equal_set_tone_flagEventEqual trigger equal_set_tone_flagEventEqual0 try { comment (0, 0 ) "infinite loop:\rinside represents one game" display hi_score:1 } retry on fail try { forever { comment (0, 0 ) "tap of one key starts the game" wait until equal_start_flagEventEqual wait 50 START_GAME_TUNE num_tones = 10 repeat { comment (0, 0 ) "inside this loop represents one round with num_tones tones being played#k\r\rif status_of_game = 1#c\rgame is lost\r\r if status_of_game = 2#c\rround is won" SELECT_TONES counter1 = 10 while status_of_game = 0 { input = 0 comment (0, 0 ) "select which input is required next" set_tone_flag = 30 comment (0, 0 ) "wait for user input" wait until greater_inputEventHigh wait 50 if input = current_tone{ counter1 += 10 WIN_TUNE if counter1 > num_tones{ status_of_game = 20 hi_score += num_tones if num_tones < 50{ num_tones += 10 } else { } } else { } } else { LOSE_TUNE status_of_game = 10 } } } until equal_status_of_gameEventEqual } } retry on fail } watcher TouchWatcher0 monitor tRelease_touch1EventRelease { rcx_Priority( 3 ) try { tone 587 for 30 input = 10 start_flag = 10 } restart on fail } restart on event watcher LightWatcher1 monitor lRange_light2EventRange { rcx_Priority( 4 ) try { tone 740 for 30 input = 20 start_flag = 10 } restart on fail } restart on event watcher TouchWatcher2 monitor tRelease_touch3EventRelease { rcx_Priority( 3 ) try { tone 880 for 30 input = 30 start_flag = 10 } restart on fail } restart on event watcher variableWatcher3 monitor equal_status_of_gameEventEqual { rcx_Priority( 2 ) try { comment (0, 0 ) "player loses; end of game#c but check high score first." if my_score > hi_score{ HI_SCORE_TUNE hi_score = my_score } else { if my_score = hi_score{ HI_SCORE_TUNE } else { } } } restart on fail } restart on event watcher variableWatcher4 monitor equal_set_tone_flagEventEqual { rcx_Priority( 2 ) try { comment (0, 0 ) "randomly select a tone and play it" SET_PLAY_TONE set_tone_flag = 20 } restart on fail } restart on event watcher variableWatcher5 monitor equal_set_tone_flagEventEqual0 { rcx_Priority( 2 ) try { comment (0, 0 ) "set current_tone to the tone we expect the player to input next" if counter1 = 10{ current_tone = tone_1 } else { if counter1 = 20{ current_tone = tone_2 } else { if counter1 = 30{ current_tone = tone_3 } else { if counter1 = 40{ current_tone = tone_4 } else { current_tone = tone_5 } } } } } restart on fail } restart on event fragment ( 388,955 ) { repeat { } until greater_status_of_gameEventHigh } }