2016-07-13 9 views
0

に期待して使用して、このコードは、ちょうど私の全体のプログラムを実行し、私はなぜわかりません。私は含まれています:せて、現時点ではRSpecの

if __FILE__ == $0 
    game = Game.new("Harry", "Nick") 
end 

私のスクリプトでは、まだ全体のプログラムの実行を開始します。私の目標は#playersというインスタンスメソッドを使ってプレーヤーの名前を表示することです。私が今までに一番近かったのはlet(:game)を使っていますが、それはすべて、プレイヤーの名前の代わりにゲームを印刷したというテストには失敗しました。今はスクリプトを実行しているだけなので、失敗することさえできません。ここに含まれて実行されます

require "tictactoe" 

describe Game do 
    describe "#players" do 
     let(:game) do 
      new_game = Game.new("Harry", "Nick") 
      new_game.players 
     end 

     it "displays player names" do 
      expect(game).to eq("Player 1: #{@player1}\nPlayer 2: #{@player2}") 
     end 
    end 
end 

ゲームクラス:

class Game 

    def initialize(player1, player2) 
     @player1 = player1 
     @player2 = player2 
     @rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

     @wins = [1, 2, 3], [4, 5, 6], [7, 8, 9], 
     [1, 4, 7], [2, 5, 8], [3, 6, 9], 
     [1, 5, 9], [3, 5, 7] 

     @selected_numbers = [] 
     @counter = 0 

    game_board 
    start_player1 
end 

    def players 
     puts "Player 1: #{@player1}" 
     puts "Player 2: #{@player2}" 
    end 

    def game_board 
     @rows.each do |r| 
     puts r.each { |c| c }.join(" ") 
    end 
    end 

    def start_player1 
     puts "#{@player1}: Please enter a number for your X to go" 
     player1_input = STDIN.gets.chomp 


     locate_player1_input(player1_input) 
    end 
+0

私たちは占い師ではないので、実際に実行されるコードは、何が起こっているか理解するために私たちを助けるかもしれません。 'tictactoe.rb'を投稿してください。 – mudasobwa

答えて

0

は、すべての関数への呼び出しを取り除く:あなたのコンストラクタから

game_board 
start_player1 

。現在あなたがしていることは、実際には:

  1. インスタンス化Game; (順番にボードをプリントアウト)
  2. コールgame_board。驚くべきことに、player1の移動を開始し
  3. コールstart_player1、。

しかし、これはあなたのテストを修正されません。テストでは、文字列をputsの呼び出し結果と比較します。作る方法はない印刷、それらを値を返す、またはto_stdout RSpecのマッチャーを使用し

+0

ありがとう!私はそれを働かせました。私はコンストラクタからこれらのメソッドを削除する方法を理解していないし、私のプログラムの仕事をまだ持っています。同様に、テストに合格すると、プログラムは動作せず、その逆もあります。これと戦う方法はありますか? –

+0

ボードを表示するには、 'game = game.new'、' game.board'のように、作成した 'Game'インスタンスのメソッドを引き続き呼び出す必要があります。 'game.start_player1'はゲーム自体を開始します。それは実装されるべき通常の制御フローです:' if __FILE__ == $ 0; game = Game.new( "Harry"、 "Nick");ゲームボード ; game.start_player1; ...;終わり – mudasobwa

関連する問題