所以这是关于我的秘密号码游戏的问题的跟进。
现在我试图将其分解为多个类/文件:
主 播放机 secret_number 游戏
现在我试图将游戏分成几段,而不是在一个文件中执行所有操作。
以下是每个班级的代码。我不能为我的生活弄清楚如何将课程联系起来(而且它让我疯狂......)
非常感谢你们。
main.rb的
class Main
# Ask player for their name, and instantiate the game class
$:.unshift (File.dirname(__FILE__))
require 'lib/game'
# put code here print a welcome message for your user
puts "Welcome to the Secret Number Game!"
# put code here ask the user for their name, and save it
puts "What is your name?"
name = gets.strip
newPlayer = Player.new
puts newPlayer.name
# put code here to create a new game, and start it
end
player.rb
require "main.rb"
class Player
# this class will likely be simple, and just remember its name
attr_accessor :name
def initialize( name )
@name = name
end
end
secret_number.rb
class SecretNumber
# this class will generate our secret number for us
# This class should initiate an array of numbers that range between 1 - 10.
# Use a method from the array class to select a random element from that array. This random number will be the secret number.
# This way the secret number is also a secret to you.
attr_accessor :secret_number
def initialize( secret_number )
@secret_number = 1 + rand(10)
end
end
game.rb
# This class holds most of the game logic and should:
# Welcome players and inform them of the game rules.
# Initialize the Player class.
# Initialize the Secret Number class.
# Prompt the user to choose a number, verify if the user guessed correctly.
# If the user guesses incorrectly let them know if they were too high or too low.
# Monitor how many guesses the player has before the game is over.
# this class will be complex
# we need to write logic to initialize a new game, and run the game loop
# we'll want to write a few separate methods for unique tasks so that our
# code is structured properly
require "lib/player"
require "lib/secret_number"
class Game
attr_accessor :name, :secret_number
def intialize ( name )
@name = Player.new
@secret_number = SecretNumber.new
end
restart = true
def guess_check( playerInput, secret_number, attempts )
if playerInput == @secret_number
puts "Congratulations, you guessed the secret number! [#{@secret_number}]"
elsif
attempts == 0
puts "Sorry, you're out of guesses, the secret number is [#{@secret_number}]"
elsif playerInput > @secret_number
puts "Too high! try again!"
elsif playerInput < @secret_number
puts "Too low! try again!"
else
puts @secret_number
end
end
while restart
guesses = []
attempts = 3
while attempts
attempts = attempts - 1
puts "Guess the secret number, you have #{attempts} tries left"
playerInput = gets.to_i
guesses.push( playerInput )
guess_check( playerInput, secret_number, attempts )
puts "You've guessed #{guesses}"
break if playerInput == @secret_number || attempts == 0
end
puts "Do you want to play again? (y/n)"
answer = gets.strip
restart = false if answer == "n"
end
end