1

Ruby の学習に役立つ簡単なゲームを Ruby で作成しました。現在、Sinatra で実装しようとしていますが、テキスト入力を「while」ループとやり取りすることはできません。誰かが私が間違っていることを理解するのを手伝ってくれますか?

require 'rubygems'
require 'sinatra'
require 'sinatra/reloader'
require 'haml'
#use Rack::Session::Pool

module HotColdApp
  def initialize
    guesses = 1
    i = rand(10)
  end

  def play
    "Guess a number from 1 to 10"
    "You have 5 tries"
    "----------"
    guess = gets.to_i
    while guess != i and guesses < 5
      guesses = guesses + 1
      if guess < i
        "too cold"
        guess = gets.to_i
      else guess > i
        "too hot"
        guess = gets.to_i
      end
    end
    if guess == i
       "just right"
    else
       "try again next time"
    end
  end
end

include HotColdApp
  get '/' do
    p initialize
    haml :index
  end

  post '/' do
    guess = params[:guess]
    haml :index, :locals => {:name => guess}
  end

__END__

@@ index
!!!!
%html
  %head
    %title Hot/Cold
  %body
    %h1 hOt/cOld
    %p
    Guess a number from 1 to 10. You have 5 tries.
    %form{:action => "/", :method => "POST"}
    %p
    %input{:type => "textbox", :name => "guess", :class => "text"}
    %p
    %input{:type => "submit", :value => "GUESS!", :class => "button"}
    %p
4

1 に答える 1

1

これがあなたが探しているものを正確に実行するかどうかはわかりませんが、ゲームをプレイします。注意点:再生方法を変更しました。whileループとgetsを使用しても、あまり意味がありません。代わりに、私はパラメーターを取得し、推測のカウントを維持しながらプレイに渡しました。フォーム内に送信またはテキストフィールドをネストしていないため、フォームをインデントしました。hamlで生成した後、ページのソースを確認することをお勧めします。あなたが何が起こっているのかを完全に理解しているのを見ていませんでした。これにより、先に進むためのいくつかのステップ以上が得られるはずです。

require 'sinatra'
require 'sinatra/reloader'
require 'haml'
#use Rack::Session::Pool

module HotColdApp
  def initialize
    @guesses = 5 
    @i = rand(10)
  end 

  def play(guess)
    guess = guess.to_i
    if(@i != guess && @guesses > 1)
      @guesses -= 1
      if guess < @i
        return "#{@guesses} left. Too cold"
      else guess > @i
        return "#{@guesses} left. Too hot"
      end 
    elsif(@i != guess && @guesses == 1)
      return "You lose!"
    elsif(@i == guess)
      return "You win!"
    end 
  end 
end

include HotColdApp
  get '/' do
    p initialize
    haml :index
  end 

  post '/' do
    guess = params[:guess]
    @result = play(guess)
    haml :index, :locals => {:name => guess}
  end 

__END__

@@ index
!!!!
%html
  %head
    %title Hot/Cold
  %body
    %h1 hOt/cOld
    %p
    Guess a number from 1 to 10. You get 5 tries.
    %form{:action => "/", :method => "POST"}
      %p
      %input{:type => "textbox", :name => "guess", :class => "text"}
      %p
      %input{:type => "submit", :value => "GUESS!", :class => "button"}
    %p
    %p= @result
于 2012-09-28T19:20:07.210 に答える