ARRAYSIZE = 9 $digitArray = Array.new(ARRAYSIZE) $winningArray = Array.new(ARRAYSIZE) # Method to print the rules def displayTheRules puts "This is the game of 'Reverse'. to win, all you have" puts "to do is arrange a list of numbers (1 through " + ARRAYSIZE.to_s + ")" puts "in numerical order from left to right. to move, you" puts "tell me how many numbers (counting from the left) to" puts "reverse. For example, if the current list is:" puts "2 3 4 5 1 6 7 8 9" puts "and you reverse 4, the result will be:" puts "5 4 3 2 1 6 7 8 9" puts "Now if you reverse 5, you win!" puts "1 2 3 4 5 6 7 8 9" puts "No doubt you will like this game, but" puts "if you want to quit, reverse 0 (zero)." end # Method to print the list def printList puts "\n" + $digitArray.join(" ") + "\n\n" end # Zero-based arrays contain digits 1-9 # Make a random array and an ordered winning answer array A[0] to A[N] def makeRandomList for kIndex in 0..ARRAYSIZE-1 do $digitArray[kIndex] = kIndex+1 $winningArray[kIndex] = kIndex+1 end # now randomize the digit array order $digitArray.shuffle! end def checkForWin? (triesSoFar) # Check for a win (all array elements in order) if $digitArray == $winningArray then puts "You won it in " + triesSoFar.to_s + " moves!!!\n\n" puts "try again (yes or no)?" tryAgain = gets.strip.upcase if tryAgain == "YES" then return true end puts "\nO.K. Hope you had fun!!" exit end return false end def reverseIt (howManyToReverse, triesSoFar) # REVERSE R NUMBERS AND PRINT NEW LIST # extract and reverse the first howManyToReverse elements of the array subArray = $digitArray.take(howManyToReverse) subArray.reverse! # get the remaining elements of the original array endArray = $digitArray.slice(howManyToReverse, ARRAYSIZE) # append those elements to the reversed elements $digitArray = subArray.concat(endArray) # if we got all in order, randomize again isWinner = checkForWin?(triesSoFar) if isWinner == true then makeRandomList end printList # always print the newly ordered list return isWinner end def askHowManyToReverse puts "How many shall I reverse?"; rNumber = gets.to_i if rNumber > 0 then if rNumber > ARRAYSIZE then puts "Oops! Too many! I can reverse at most " + ARRAYSIZE.to_s end else rNumber = 0 # zero or negative values end the game end return rNumber end puts "REVERSE" puts "Creative Computing Morristown, New Jersey\n\n\n" puts "REVERSE -- A game of skill\n\n" puts "Do you want the rules?" wantRules = gets.strip.upcase if wantRules == "YES" then displayTheRules end makeRandomList howManyTries = 0 puts "\nHere we go ... the list is:" printList # display the initial list # start the game loop r = askHowManyToReverse while r != 0 do # zero will end the game if r <= ARRAYSIZE then howManyTries = howManyTries+1 if reverseIt(r, howManyTries) then howManyTries = 0 end end r = askHowManyToReverse end