From 4712607c7b917d71a056dd39f7da80a2e5790652 Mon Sep 17 00:00:00 2001 From: John Lloyd Serrano Date: Tue, 22 Mar 2022 15:36:54 +0800 Subject: [PATCH] ruby version for Pizza game --- 69_Pizza/ruby/pizza.rb | 159 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 69_Pizza/ruby/pizza.rb diff --git a/69_Pizza/ruby/pizza.rb b/69_Pizza/ruby/pizza.rb new file mode 100644 index 00000000..e392239c --- /dev/null +++ b/69_Pizza/ruby/pizza.rb @@ -0,0 +1,159 @@ +class Pizza + STREET_NAMES = ['1', '2', '3', '4'] + CUSTOMER_NAMES = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P'] + def start + player_name = print_instructions + more_directions = yes_no_prompt("DO YOU NEED MORE DIRECTIONS?") + + if more_directions + print_more_directions(player_name) + + understand = yes_no_prompt("UNDERSTAND?") + + if not understand + print("\nTHIS JOB IS DEFINITELY TOO DIFFICULT FOR YOU. THANKS ANYWAY") + return + end + + puts "\n\nGOOD. YOU ARE NOW READY TO START TAKING ORDERS. \n" + puts "GOOD LUCK!!" + end + + while true + num_turns = 5 + play_game(num_turns, player_name) + + more = yes_no_prompt("DO YOU WANT TO DELIVER MORE PIZZAS?") + if not more + puts "\nO.K. #{player_name}, SEE YOU LATER!" + return + end + end + end + + private + def print_street index + street_number = 3 - index + + street_name = STREET_NAMES[street_number] + line = street_name + + space = " " * 5 + for customer_index in (0...4) + line += space + customer_name = CUSTOMER_NAMES[4 * street_number + customer_index] + line += customer_name + end + line += space + line += street_name + puts "#{line}" + end + + def print_map + puts "MAP OF THE CITY OF HYATTSVILLE\n\n" + print(" -----1-----2-----3-----4-----") + for i in (0...4) + for _ in (0...4) + puts "-" + end + print_street(i) + end + print(" -----1-----2-----3-----4-----") + end + + def print_instructions + puts "PIZZA DELIVERY GAME \n\n" + print "WHAT IS YOUR FIRST NAME? " + player_name = gets.chomp! + puts "\nHi, #{player_name}. IN THIS GAME YOU ARE TO TAKE ORDERS" + puts "FOR PIZZAS. THEN YOU ARE TO TELL A DELIVERY BOY" + puts "WHERE TO DELIVER THE ORDERED PIZZAS. \n\n" + + print_map + + puts "\n\nTHE OUTPUT IS A MAP OF THE HOMES WHERE" + puts "YOU ARE TO SEND PIZZAS." + puts "YOUR JOB IS TO GIVE A TRUCK DRIVER" + puts "THE LOCATION OR COORDINATES OF THE" + puts "HOME ORDERING THE PIZZA." + + return player_name + end + + def yes_no_prompt msg + puts + while true + print "#{msg} " + + response = gets.chomp + + if response == response.upcase + if response == "YES" + return true + elsif response == "NO" + return false + end + else + print "'YES' OR 'NO' PLEASE, NOW THEN, " + end + + end + end + + def print_more_directions player_name + puts "\nSOMEBODY WILL ASK FOR A PIZZA TO BE" + puts "DELIVERED. THEN A DELIVERY BOY WILL" + puts "ASK YOU FOR THE LOCATION." + puts "\nEXAMPLE:" + puts "THIS IS J. PLEASE SEND A PIZZA." + puts "DRIVER TO #{player_name}. WHERE DOES J LIVE?" + puts "YOUR ANSWER WOULD BE 2,3" + end + + def calculate_customer_index x,y + return 4 * (y - 1) + x - 1 + end + + def deliver_to customer_index, customer_name, player_name + print " DRIVER TO #{player_name}: WHERE DOES #{customer_name} LIVE? " + + coords = gets.chomp! + xc, yc = coords.split(/,/).map(&:to_i) + + puts "#{xc}, #{yc}" + delivery_index = calculate_customer_index(xc, yc) + if delivery_index == customer_index + puts "HELLO #{player_name}. THIS IS #{customer_name}, THANKS FOR THE PIZZA." + return true + else + delivery_name = CUSTOMER_NAMES[delivery_index] + puts "THIS IS #{defined?(delivery_name.to_i) ? "Undefined" : delivery_name.to_i}. I DID NOT ORDER A PIZZA." + puts "I LIVE AT #{xc},#{yc}" + return false + end + end + + def play_game num_turns, player_name + for _turn in (1..num_turns) + x = rand(1..4) + y = rand(1..4) + customer_index = calculate_customer_index(x, y) + customer_name = CUSTOMER_NAMES[customer_index] + + puts "\nHELLO #{player_name}'S PIZZA. THIS IS #{customer_name}. \n PLEASE SEND A PIZZA." + + while true + success = deliver_to(customer_index, customer_name, player_name) + if success + break + end + end + end + end +end + +if __FILE__ == $0 + pizza = Pizza.new + pizza.start() +end + \ No newline at end of file