🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

1回答

889閲覧

Ruby ゲーム作成

Nutsho

総合スコア4

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2021/01/01 05:25

編集2021/01/01 11:01

前提・実現したいこと

数あてゲーム作成

数当てゲームを作成中でゲームの仕組み自体はできましたが、最後にもう一度プレイするか確認し、yesならもう一度プログラムの先頭に戻ってゲームを開始するというプログラムを追加したいです。
それと結果をファイルに保存したいのですが、リストのようにどんどん新しい結果を追加するプログラムも追加したいです。

補足情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

次のコードを研究してみてください。

ruby

1SCORE_FILE = 'score.txt' 2 3def ask_replay? 4 answer = '' 5 puts 'もう一度プレイしますか?(y/n)' 6 loop do 7 answer = gets.chomp.downcase 8 break if answer == 'n' || answer == 'y' 9 end 10 answer == 'y' 11end 12 13def game(name) 14 random = Random.new 15 a = random.rand(1..100) # 乱数作成 16 17 puts '数当てゲームです。' 18 sleep 1 19 puts '1から100までのランダムな数値をコンピュータが生成します。当ててみてください' 20 sleep 1 21 puts 'それでは予想してみてください' 22 23 count = 0 # 正解まで何回かかるかのカウント 24 loop do 25 num = gets.to_i 26 count += 1 27 28 break if num == a 29 30 if num < a 31 puts("#{num}よりも大きい数値です") 32 elsif num > a 33 puts("#{num}よりも小さい数値です") 34 end 35 end 36 37 puts("#{name}さんは#{count}回で正解しました。") 38 count 39end 40 41puts '名前を入力してください' 42name = gets.chomp! 43 44score = [] 45loop do 46 score << game(name) 47 break unless ask_replay? 48end 49 50data = [] 51if File.exist?(SCORE_FILE) 52 data = IO.readlines(SCORE_FILE) 53end 54 55File.open(SCORE_FILE, 'w') do |f| 56 data.each do |line| 57 f.puts(line) 58 end 59 score.each do |v| 60 f.puts("#{name}, #{v}") 61 end 62end

実行例
イメージ説明

投稿2021/01/01 10:18

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nutsho

2021/01/01 10:43

ありがとうございます。教えて頂いたコードを調べて理解を深めてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問