Skip to content

Instantly share code, notes, and snippets.

@igmarin
Last active August 29, 2015 14:12
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save igmarin/1be80fb7221613aad0c9 to your computer and use it in GitHub Desktop.
Save igmarin/1be80fb7221613aad0c9 to your computer and use it in GitHub Desktop.
This a Guess Game in Ruby just for fun and taking the Chap1 in Head First Ruby as a reference :)
class GuessGame
GUESS = 10
def initialize(player_name)
@player_name = player_name
@number = generate_number
@attempts = 1
play
end
def try_to_guess
puts "This is your attempt number #{@attempts}"
puts "Please enter number:"
@guess_number = gets.chomp.to_i
@attempts += 1
end
def check_guess?
@guess_number == @number
end
def check_if_less_or_greater
@guess_number < @number ? puts("Ooops is less than") : puts("Is bigger than")
end
def you_win
puts "Congrats! #{@player_name} you won!!!"
@attempts = 11
end
def exceded_attempts?
@attempts >= GUESS
end
def generate_number
rand(100)
end
def play
begin
try_to_guess
check_guess? ? you_win : check_if_less_or_greater
end while not exceded_attempts?
end
end
@igmarin
Copy link
Author

igmarin commented Jan 7, 2015

Se me olvido comentar, tienes 10 intentos para adivinar el number que es aleatorio del 1 al 100, en el cual si el num es mayor al aleatorio te da un mensaje de ser mayor o de igual forma si es menor a.

@bhserna
Copy link

bhserna commented Jan 8, 2015

Tal vez puedes intentar algo más como functional core imperative shell de forma que lo imperativo sea el método play y ahí describas el algoritmo. Lo demás solo serían funciones que te regresan la información necesaria.

play podría ser algo así.

def self.play(game = Game.start)
  game.ask_number
  game = game.number_received(gets)

  if game.has_winner?
    puts game.announce_winner
  else
    if game.has_more_attempts?
      puts game.give_clue and play(game)
    else
      puts game.is_over
    end
  end
end

Esta no es necesariamente la mejor forma pero creo que serviría como ejercicio

@igmarin
Copy link
Author

igmarin commented Jan 8, 2015

si acaso no soy muy fan de los if anidados pero en general me late tu idea @bhserna creo que ese método sería el punto clave para tener algo mejor

@e3matheus
Copy link

Esta cool lo que puso Benito. Lo único es que le quitaría los puts. Es decir, que los métodos usen el puts internamente.

Del que pusiste tú, tengo ciertos nitpicks:

  • ¿Por qué llamaste la variable de instancia @Number? Number puede significar muchas cosas.
  • El método de you_win está un poco raro que setee el número de attempts como si el usuario hubiese hecho más intentos de los que hizo. ¿Se te ocurre algo para no hacer eso?
  • El 100 creo que podría ser una constante.
  • ¿Qué nombre de método se te ocurre que describa que hace check_if_less_or_greater? Benji puso uno ahí que es muy parecido a lo que hiciste.
  • Siempre es bueno aclarar cual es la interfaz del objeto. Para eso, aclarar los métodos privados.

PD: El juego no dice nada cuando se acaban los intentos y no adivinaste jejeje. Este juego no tiene tacto.

@alan-andrade
Copy link

Pienso que GUESS puede ser reemplazado por MAX_ATTEMPTS ya que esa es su finalidad.

https://gist.github.com/igmarin/1be80fb7221613aad0c9#file-guess_game-rb-L27 puede utilizar la constante MAX_ATTEMPTS en lugar del 11 que sale de la nada.

Cosas quisquillozas:
Quiza el metodo play no deba ser invocado en el constructor. Pienso que si no ayuda a "construir" una instancia de Game, debe ir en otro lado.

Probablemente @attempts_counter sea mejor nombre que @attempts ya que leyendo "counter" sabes que esta lidiando con un numbero.

De ahi en fuera, :shipit: !

@bhserna
Copy link

bhserna commented Jan 8, 2015

Tal vez tomando en cuenta lo de los puts y los if's nesteados ... se puede hacer algo así:

def self.play(game = Game.start)
  game.ask_number
  game = game.number_received(gets)
  return game.announce_winner if game.has_winner?
  return game.announce_is_over if game.is_over?
  game.give_clue and play(game)
end

creo que algo así sí está más bueno =)

@igmarin
Copy link
Author

igmarin commented Jan 14, 2015

Cierto, no se por que puse tantos puts "fuchi" me encantan los comentarios mil gracias

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment