0
get '/blackjack/*' do
  if params[:splat] == "/hit" and defined? session[:bj_game]
    erb :blackjack
  elsif params[:splat] == "/fold" and defined? session[:bj_game]
    session[:bj_hum].fold = true
    erb :blackjack
  else
    if defined? session[:bj_game]
      new_session_check
      score_check
      erb :blackjack
    else
      session[:bj_game] = false
      session[:score] = 0
      new_session_check
      score_check
      erb :blackjack
    end
  end
end

def new_session_check
  if session[:bj_game] == false
    session[:bj_hum] = Blackjack.new
    session[:bj_com] = Blackjack.new
    session[:bj_game] = true
  end
end

def score_check
  if session[:bj_hum].game_loop == false
    if session[:bj_hum].score.to_i > 0
      session[:score] += session[:bj_hum].score.to_i
      check_save(session[:score])
    else
      session[:score] = 0
    end
    session[:bj_game] = false
    session[:bj_hum] = Blackjack.new
    session[:bj_com] = Blackjack.new
  end
end

スコア チェックになるたびに、NoMethodError - Undefined method 'game_loop' for NilClass. が発生します。

ただし、メインページから開始した場合:

get '/' do
  session[:bj_game] = false
  session[:score] = 0
  erb :home
end

ホーム erb から /blackjack へのリンクをクリックすると、new_session_check が変数が false であることを確認し、Blackjack クラス (game_loop の attr_accessor を持つ) の新しいインスタンスを作成したため、機能します。

get '/blackjack' バージョンに登録されないのはなぜですか?

http://pastebin.com/6EFpp5gh - これは、これを確認するために実行できるモックアップ バージョンです。最初に localhost:4567/blackjack にアクセスすると、内部サービス エラーが発生します。サーバーを再起動し、最初に localhost:4567 に移動し、次に localhost:4567/blackjack に移動すると、機能することがわかります。

4

1 に答える 1