define osc 4 input portd.1 input portd.2 output portb.7 output portb.6 output portb.5 output portb.4 ' output portb.3 'port 3 is skipped over because 'the breadboard has a space at the 'ground/power strip here. ' output portb.2 'port 2 skipped for same reason output portb.1 output portd.6 output portd.5 output portd.3 ' the red led led1 var portb.7 led2 var portb.6 led3 var portb.5 led4 var portb.4 led5 var portb.1 led6 var portd.6 led7 var portd.5 ledred var portd.3 lednum1 var byte lednum2 var byte lednum3 var byte lednum4 var byte lednum5 var byte lednum6 var byte lednum7 var byte randomvar var word ' used to generate random number i var byte ' counter variable blinknum var byte ' random variable to hold number of blinks gamestate var byte ' loading, playing, winning, resetting, etc. currentled var byte ' current led being tested in gameplay blinks var byte ' number of times user has blinked the led main: while portd.2 = 0 gamestate = 0 'gamestate 0 = waiting to play wend gosub loadgame 'loading the game -- showing the blinks while gamestate = 2 'gamestate 2 = playing the game if currentled = 1 then gosub level1 endif if currentled = 2 then gosub level2 endif if currentled = 3 then gosub level3 endif if currentled = 4 then gosub level4 endif if currentled = 5 then gosub level5 endif if currentled = 6 then gosub level6 endif if currentled = 7 then gosub level7 endif wend if gamestate = 3 then 'lost high ledred while gamestate = 3 if portd.2 = 1 then ' reset, start playing again gamestate = 1 low ledred endif wend endif if gamestate = 4 then 'won! gosub won endif goto main won: gosub ripple gosub ripple return level1: while portd.2 = 0 if portd.1 = 1 then blinks = blinks + 1 gosub blinkled1 endif if blinks > lednum1 then gamestate = 3 currentled = 0 return endif wend gosub blinkred if blinks = lednum1 then blinks = 0 currentled = 2 return endif if blinks != lednum1 then currentled = 0 blinks = 0 gamestate = 3 return endif return level2: ' need to change while portd.2 = 0 if portd.1 = 1 then blinks = blinks + 1 gosub blinkled2 ' need to change endif if blinks > lednum2 then 'need to change gamestate = 3 currentled = 0 return endif wend gosub blinkred if blinks = lednum2 then 'need to change blinks = 0 currentled = 3 'need to change return endif if blinks != lednum2 then ' need to change currentled = 0 blinks = 0 gamestate = 3 return endif return level3: while portd.2 = 0 if portd.1 = 1 then blinks = blinks + 1 gosub blinkled3 endif if blinks > lednum3 then gamestate = 3 currentled = 0 return endif wend gosub blinkred if blinks = lednum3 then blinks = 0 currentled = 4 return endif if blinks != lednum3 then currentled = 0 blinks = 0 gamestate = 3 return endif return level4: while portd.2 = 0 if portd.1 = 1 then blinks = blinks + 1 gosub blinkled4 endif if blinks > lednum4 then gamestate = 3 currentled = 0 return endif wend gosub blinkred if blinks = lednum4 then blinks = 0 currentled = 5 return endif if blinks != lednum4 then currentled = 0 blinks = 0 gamestate = 3 return endif return level5: while portd.2 = 0 if portd.1 = 1 then blinks = blinks + 1 gosub blinkled5 endif if blinks > lednum5 then gamestate = 3 currentled = 0 return endif wend gosub blinkred if blinks = lednum5 then blinks = 0 currentled = 6 return endif if blinks != lednum5 then currentled = 0 blinks = 0 gamestate = 3 return endif return level6: while portd.2 = 0 if portd.1 = 1 then blinks = blinks + 1 gosub blinkled6 endif if blinks > lednum6 then gamestate = 3 currentled = 0 return endif wend gosub blinkred if blinks = lednum6 then blinks = 0 currentled = 7 return endif if blinks != lednum6 then currentled = 0 blinks = 0 gamestate = 3 return endif return level7: while portd.2 = 0 if portd.1 = 1 then blinks = blinks + 1 gosub blinkled7 endif if blinks > lednum7 then gamestate = 3 currentled = 0 return endif wend gosub blinkred if blinks = lednum7 then blinks = 0 currentled = 0 gamestate = 4 'won!! return endif if blinks != lednum7 then currentled = 0 blinks = 0 gamestate = 3 return endif return loadgame: gosub randomize ' sets random values for each led gosub blinkall pause 200 gosub blinkall pause 800 for i=1 to lednum1 step 1 gosub blinkled1 next i pause 500 for i=1 to lednum2 step 1 gosub blinkled2 next i pause 500 for i=1 to lednum3 step 1 gosub blinkled3 next i pause 500 for i=1 to lednum4 step 1 gosub blinkled4 next i pause 500 for i=1 to lednum5 step 1 gosub blinkled5 next i pause 500 for i=1 to lednum6 step 1 gosub blinkled6 next i pause 500 for i=1 to lednum7 step 1 gosub blinkled7 next i pause 500 blinks = 0 currentled = 1 gamestate = 2 return ripple: high led1 pause 50 low led1 pause 50 high led2 pause 50 low led2 high led3 pause 50 low led3 high led4 pause 50 low led4 pause 50 high led5 pause 50 low led5 pause 50 high led6 pause 50 low led6 pause 50 high led7 pause 50 low led7 pause 50 high led6 pause 50 low led6 pause 50 high led5 pause 50 low led5 pause 50 high led4 pause 50 low led4 pause 50 high led3 pause 50 low led3 pause 50 high led2 pause 50 low led2 pause 50 high led1 pause 50 low led1 return randomize random randomvar blinknum = randomvar // 3 ' makes randomvar between 0,2 blinknum = blinknum + 1 ' makes randomvar between 1,3 lednum1 = blinknum random randomvar blinknum = randomvar // 3 ' makes randomvar between 0,2 blinknum = blinknum + 1 ' makes randomvar between 1,3 lednum2 = blinknum random randomvar blinknum = randomvar // 3 ' makes randomvar between 0,2 blinknum = blinknum + 1 ' makes randomvar between 1,3 lednum3 = blinknum random randomvar blinknum = randomvar // 3 ' makes randomvar between 0,2 blinknum = blinknum + 1 ' makes randomvar between 1,3 lednum4 = blinknum random randomvar blinknum = randomvar // 3 ' makes randomvar between 0,2 blinknum = blinknum + 1 ' makes randomvar between 1,3 lednum5 = blinknum random randomvar blinknum = randomvar // 3 ' makes randomvar between 0,2 blinknum = blinknum + 1 ' makes randomvar between 1,3 lednum6 = blinknum random randomvar blinknum = randomvar // 3 ' makes randomvar between 0,2 blinknum = blinknum + 1 ' makes randomvar between 1,3 lednum7 = blinknum return blinkall: high led1 high led2 high led3 high led4 high led5 high led6 high led7 pause 200 low led1 low led2 low led3 low led4 low led5 low led6 low led7 return blinkled1: high led1 pause 200 low led1 pause 200 return blinkled2: high led2 pause 200 low led2 pause 200 return blinkled3: high led3 pause 200 low led3 pause 200 return blinkled4: high led4 pause 200 low led4 pause 200 return blinkled5: high led5 pause 200 low led5 pause 200 return blinkled6: high led6 pause 200 low led6 pause 200 return blinkled7: high led7 pause 200 low led7 pause 200 return blinkred: high ledred pause 200 low ledred pause 200 return