增加方法中的变量?

时间:2016-08-27 14:43:18

标签: ruby

我正在尝试建造一个摇滚,纸张,剪刀游戏。有人可以告诉我或指出我在这个代码出错的地方正确的方向吗?

我希望players_scorecpu_score变量每增加一轮就增加1

choice = ["rock", "paper", "Scissors"]

 players_score = 0 
 cpu_score = 0


def win_lose(a,b,c,d)

    if a == "rock" && b == "scissors"
        c+=1
        puts "YOU WIN!!"

    elsif a == "scissors" && b == "rock"
        d+=1
        puts "YOU LOSE!!"

    elsif a =="paper" && b == "rock"
        c+=1
        puts "YOU WIN!!"

    elsif a =="rock" && b == "paper"
        d+=1
        puts "YOU LOSE!!"

    elsif a == "scissors" && b == "paper"
         c+=1
        puts "YOU WIN!!"

    elsif a == "paper" && b == "scissors"
        d+=1
        puts "YOU LOSE!!"

    else a == b
        puts "Its a Draw this time!!"
    end

end

while players_score < 2 && cpu_score < 2


    print "Lets play. Plese choose rock, paper or scissors: "
    players = gets.chomp.downcase
    puts "You have #{players}"

    cpu = choice.sample.downcase
    puts "Computer has #{cpu}"

    win_lose(players, cpu, players_score, cpu_score)
    puts "scores are player #{players_score} , cpu #{cpu_score}"
end

1 个答案:

答案 0 :(得分:0)

win_lose返回一个值,并使用它来确定变量的增量,例如:

def win_lose(a,b,c,d)
    if a == "rock" && b == "scissors"
        c+=1
        winner = 'player'
    elsif a == "scissors" && b == "rock"
        d+=1
        winner = 'computer'
    # [.. etc ..]
    else a == b
        winner = 'draw'
    end

    return winner
end

player_score = 0
cpu_score = 0
choice = ["rock", "paper", "Scissors"]

while players_score < 2 && cpu_score < 2
    print "Lets play. Plese choose rock, paper or scissors: "
    players = gets.chomp.downcase
    puts "You have #{players}"

    cpu = choice.sample.downcase
    puts "Computer has #{cpu}"

    winner = win_lose(players, cpu, players_score, cpu_score)
    if winner == 'player'
        player_score += 1
        puts "YOU WIN!!"
    elsif winner == 'computer'
        cpu_score += 1
        puts "YOU LOSE!!"
    else
        puts "It's a draw"
    end

    puts "scores are player #{players_score} , cpu #{cpu_score}"
end

正如你所看到的,这也让你不再重复同样的事情了!#WIN WIN !!&#34;句一遍又一遍。我把它移到win_lose函数之外,这样这个函数只做一个的事情:确定赢家或输家,而不是两个的东西:确定赢家或输家,告知他们。

这种区别对于这么小的程序来说可能并不重要,但随着程序的增长,保持程序可以理解至关重要。