第7回のレポート課題です。 エラーで返ってきたので再送します。 氏名: 時田佳穂 学籍番号: C1101603 語学クラス: 中国語3 コース(系): 環境サイエンスコース 1-A a. これは4種類のゲームが遊べるプログラムです。 ゲームを作る場合関数が使いやすいので、こうしました。 ◎遊び方 sentou.rb quiz.txt typing.txt anki.txt これら全てをダウンロードして、同じフォルダに入れてください。 また、テキストファイルについては名前を変えないでください。 それから、ktermでそのフォルダに移動し chmod +x sentou.rb[return] その後 ./sentou.rb[return] とするとゲームが始まります。 ◎連絡先 不具合、質問意見などは下記アドレスまでお願いします。 c110160@f.koeki-u.ac.jp b. ◯作成したプログラム、説明 #!/usr/koeki/bin/ruby ################ 関数 ############################################# def quiz(mondai,sentaku1,sentaku2,sentaku3,sentaku4,kotae) q = 1 seikai = 0 while q <= 5 srand i = rand(7) printf("第%d問 %s\n",q,mondai[i]) printf("1: %s\n",sentaku1[i]) printf("2: %s\n",sentaku2[i]) printf("3: %s\n",sentaku3[i]) printf("4: %s\n",sentaku4[i]) print"答えの番号を入力しろ!: " answer = STDIN.gets.chomp!.to_i print"\n" if answer == kotae[i] print"...正解だ!\n\n" seikai += 1 else print"残念、不正解だ!\n\n" end q += 1 sleep(1) end print" \e[1m〜クイズ終了〜\e[m\n\n" sleep(2) printf("成績発表! %d/5問だ!\n",seikai) if seikai >= 3 print"やるな! 俺の負けだ!\n\n" else print"残念!お前の冒険はここで終わってしまった!\n" print"じゃあな〜!\n" print" ...ゲームオーバー...\n" exit end end def typing(mondai) seikai = 0 while true print"スタート と入力した時点で始まるよ。\n" a = gets.chomp! if a == "スタート" break else print"もう一度入力してくれ。\n" redo end end a = Time.now while true srand i = rand(10) print"\n" printf(" %s\n",mondai[i]) print"\n" answer = gets.chomp! if answer == mondai[i] seikai += 1 end if seikai == 5 break end end print" \e[1m〜タイピング終了〜\e[m\n\n" sleep(2) seigen = Time.now - a printf("結果発表。 所要時間 %d秒だよ\n",seigen) if seigen > 200 print"残念だったね。私の勝ちだ\n" print" ...ゲームオーバー...\n" exit else print"私が負けるとは...降参だ。\n" end end def anki(mondai) print"暗記時間は60秒。\n" while true print"スタート と入力すると始まるわよ。\n" a = gets.chomp! if a == "スタート" break else print"もう一度入力して頂戴。\n" redo end end t = 1 tango = [] i = 0 while t <= 4 srand tango1 = rand(44) tango2 = rand(44) tango3 = rand(44) printf(" %s %s %s\n",mondai[tango1],mondai[tango2],mondai[tango3]) tango[i] = mondai[tango1] i += 1 tango[i] = mondai[tango2] i += 1 tango[i] = mondai[tango3] i += 1 t += 1 end sleep(60) #p tango print"暗記時間は終わりよ。\n" print"100秒以内に、覚えた単語をできるだけ入力して頂戴。\n" print"単語は一つずつお願いね。\n" print"入力が終わってもし暇になったら、適当な頃合をみて\n" print"return でも押していなさいな。\n" a = Time.now answer = [] i = 0 while true seigen = Time.now - a if seigen >= 100 break end answer[i] = gets.chomp! i += 1 seigen = Time.now - a if seigen >= 100 break end end sleep(1) print" \e[1m〜暗記クイズ終了〜\e[m\n\n" match = tango & answer #p match #p match.length sleep(2) printf("結果発表ね。 %d/12問よ。\n",match.length) if match.length >= 8 print"あらあら。負けちゃったわ。\n" else print"うふふ、私の勝ちね。\n" print" ...ゲームオーバー...\n" exit end end def highlow() seikai = 0 t = 1 print"数字は0〜9まで、同じ数字の場合は高い方に含めるとするよ。\n" while t <= 5 printf("\n %d 回目:\n",t) srand now = rand(10) nex = rand(10) printf("今の数字は %d だ。",now) print"次の数字はこれよりも高いか?低いか?\n" print" high / low\n" answer = gets.chomp!.to_s printf("...次の数字は %d だ。つまり...\n",nex) sleep(2) if answer == "high" if now <= nex print"見事正解だ。\n\n" seikai += 1 else print"残念だが不正解だ。\n\n" end elsif answer == "low" if now <= nex print"残念だが不正解だ。\n\n" else print"見事正解だ。\n\n" seikai += 1 end end t += 1 end print" \e[1m〜ハイ&ロウ終了〜\e[m\n\n" sleep(1) printf("結果発表に移ろう。 %d/5回だ。\n",seikai) if seikai >= 3 print"君の勝ちだ。見事だったよ。\n" else print"私の勝ちだね。楽しかったよ。\n" print" ...ゲームオーバー...\n" exit end end ################################################################## print"\n ! 説明 ! \n" print"\e[4m\n なんか頑張って魔王直属の四天王を倒すゲームです。\n" print" 魔王は放っとけば気の良いオッサンなので倒さなくていいです。\n" print" 四天王それぞれで対戦方法が違うのでなんか頑張ってください!\n" print"\e[m\n" sleep(2) print"-"*60 print"\n\n" print"説明は読みましたか? 要はなんか頑張ってほしいということです。\n" print"頑張ってくれますか?\n" print" はい / いいえ\n" while true a = gets.chomp.to_s if ! (a == "はい" || a == "いいえ") print"\n優柔不断ですねー。どちらかを入力してください。\n" redo elsif a == "いいえ" print"\nそれは仕方ないですね。\n" exit else print"\nありがとうございます。\n" print"んではいってらっしゃい!\n\n" break end end sleep(1) print"\e[1m一人目: 緑の四天王があらわれた!\e[m\n" print"-"*60 print"\n はじめまして一般人!\n" print" 俺とは 公益大についての4択クイズ で勝負してもらう!\n" print" 5問出すうち3問以上正解で俺に勝てるぞ!\n" print" 心の準備はできたか? いくぞ!\n" print"-"*60 print"\n" n = 0 mondai = [] sentaku1 = [] sentaku2 = [] sentaku3 = [] sentaku4 = [] kotae = [] open("quiz.txt","r") do |quiz| while line = quiz.gets if /(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\d)/ =~ line mondai[n] = $1 sentaku1[n] = $2 sentaku2[n] = $3 sentaku3[n] = $4 sentaku4[n] = $5 kotae[n] = $6.to_i n += 1 end end end seikai = 0 sleep(2) quiz(mondai,sentaku1,sentaku2,sentaku3,sentaku4,kotae) print"-"*40 print"\n \e[1m緑の四天王 に勝った!\e[m\n" print"-"*40 print"\n\n" sleep(1) print"台詞全部に「!」がついてうるさいヤツでしたね。\n" print"次に進みましょう。\n" sleep(2) print"\n\n\e[1m二人目: 青の四天王があらわれた!\e[m\n" print"-"*60 print"\n 緑を倒したか。だがヤツは四天王の中では一番の小物。 \n" print" 僕とは タイピング で勝負してもらうよ。\n" print" 時間内に5問正解すれば僕に勝てる。\n" print" 間違えてもやり直しにはならないよ。\n" print" 問題文のはじめのスペースは入力不要だ。\n" print" 心の準備はいいかな?\n" print"-"*60 print"\n" n = 0 mondai = [] open("typing.txt","r") do |typing| while line = typing.gets if /(\S+)/ =~ line mondai[n] = $1 n += 1 end end end typing(mondai) print"-"*40 print"\n \e[1m青の四天王 に勝った!\e[m\n" print"-"*40 print"\n\n" sleep(1) print"男だか女だかよくわからない人でしたね。\n" print"次に進みましょう。\n" sleep(2) print"\n\n\e[1m三人目: 黄の四天王があらわれた!\e[m\n" print"-"*60 print"\n あら、もう二人も倒しちゃったのね。\n" print" 私とは 暗記クイズ で勝負して頂戴な。\n" print" 時間内に単語をできるだけ暗記するのよ。\n" print" 12問中8問正解したら負けを認めてあげるわよ?\n" print" 心の準備はいいかしら。\n" print"-"*60 print"\n" n = 0 mondai = [] open("anki.txt","r") do |anki| while line = anki.gets if /(\S+)/ =~ line mondai[n] = $1 n += 1 end end end anki(mondai) print"-"*40 print"\n \e[1m黄の四天王 に勝った!\e[m\n" print"-"*40 print"\n\n" sleep(1) print"なんかオバサンくさい喋り方でしたね。\n" print"次に進みましょう。\n" sleep(2) print"\n\n\e[1m四人目: 赤の四天王があらわれた!\e[m\n" print"-"*60 print"\n 四天王最後のひとりは私だ。\n" print" 私とは ハイ&ロウ で勝負していただこう。\n" print" 次の数字が現在の数字より大きいか小さいかを当てるゲームだ。\n" print" 5回中3回正解したら君の勝ちだ。\n" print" 心の準備はいいか?\n" print"-"*60 print"\n" n = 0 highlow() print"-"*40 print"\n \e[1m赤の四天王 に勝った!\e[m\n" print"-"*40 print"\n\n" sleep(2) print"すごいですね! 全員倒しちゃいましたよ!\n" print"これで世界は救われます!\n" sleep(1) print"お疲れさまでした。\n" print"ていうかみんな普通にいい人でしたよね...\n" ◯実行結果 pan{c110160}% ./sentou.rb [~/Ruby] ! 説明 ! なんか頑張って魔王直属の四天王を倒すゲームです。 魔王は放っとけば気の良いオッサンなので倒さなくていいです。 四天王それぞれで対戦方法が違うのでなんか頑張ってください! ------------------------------------------------------------ 説明は読みましたか? 要はなんか頑張ってほしいということです。 頑張ってくれますか? はい / いいえ はい ありがとうございます。 んではいってらっしゃい! 一人目: 緑の四天王があらわれた! ------------------------------------------------------------ はじめまして一般人! 俺とは 公益大についての4択クイズ で勝負してもらう! 5問出すうち3問以上正解で俺に勝てるぞ! 心の準備はできたか? いくぞ! ------------------------------------------------------------ 第1問 工藤教和副学長の専攻でないものは? 1: 経営史 2: 産業史 3: 経済史 4: 近代史 答えの番号を入力しろ!: 4 ...正解だ! 第2問 学生専用サーバに教員ページを持っていないのは? 1: 武市先生 2: 西口先生 3: 竹村先生 4: 山本先生 答えの番号を入力しろ!: 1 ...正解だ! 第3問 大学が認める海外短期語学留学の行き先にない国は? 1: インドネシア 2: ロシア 3: ニュージー 4: 中国 答えの番号を入力しろ!: 1 ...正解だ! 第4問 公益ホール前の広場を何広場という? 1: 公益 2: ケヤキ 3: ホワイエ 4: 芝生 答えの番号を入力しろ!: 2 ...正解だ! 第5問 大学が認める海外短期語学留学の行き先にない国は? 1: インドネシア 2: ロシア 3: ニュージー 4: 中国 答えの番号を入力しろ!: 1 ...正解だ! 〜クイズ終了〜 成績発表! 5/5問だ! やるな! 俺の負けだ! ---------------------------------------- 緑の四天王 に勝った! ---------------------------------------- 台詞全部に「!」がついてうるさいヤツでしたね。 次に進みましょう。 二人目: 青の四天王があらわれた! ------------------------------------------------------------ 緑を倒したか。だがヤツは四天王の中では一番の小物。 僕とは タイピング で勝負してもらうよ。 時間内に5問正解すれば僕に勝てる。 間違えてもやり直しにはならないよ。 問題文のはじめのスペースは入力不要だ。 心の準備はいいかな? ------------------------------------------------------------ スタート と入力した時点で始まるよ。 スタート じゆうなひとはすべてのきょうせいをにくむ じゆうなひとはすべてのきょうせいをにくむ ひつようはろうばにとぶことをおしえる ひつようはろうばにとぶことをおしえる ひつようはろうばにとぶことをおしえる ひつようはろうばにとぶことをおしえる どうにもならないことはわすれることがこうふくだ どうにもならないことはわすれることがこうふくだ じゆうなひとはすべてのきょうせいをにくむ じゆうなひとはすべてのきょうせいをにくむ 〜タイピング終了〜 結果発表。 所要時間 34秒だよ 私が負けるとは...降参だ。 ---------------------------------------- 青の四天王 に勝った! ---------------------------------------- 男だか女だかよくわからない人でしたね。 次に進みましょう。 三人目: 黄の四天王があらわれた! ------------------------------------------------------------ あら、もう二人も倒しちゃったのね。 私とは 暗記クイズ で勝負して頂戴な。 時間内に単語をできるだけ暗記するのよ。 12問中8問正解したら負けを認めてあげるわよ? 心の準備はいいかしら。 ------------------------------------------------------------ 暗記時間は60秒。 スタート と入力すると始まるわよ。 スタート いんかん しんよう ちかごろ かりあげ ちかごろ すいぎん ぬきうち つうがく ぬきうち せつめい にんげん いんかん 暗記時間は終わりよ。 100秒以内に、覚えた単語をできるだけ入力して頂戴。 単語は一つずつお願いね。 入力が終わってもし暇になったら、適当な頃合をみて return でも押していなさいな。 いんかん しんよう ちかごろ かりあげ ちかごろ すいぎん ぬきうち つうがく ぬきうち せつめい にんげん いんかん 〜暗記クイズ終了〜 結果発表ね。 9/12問よ。 あらあら。負けちゃったわ。 ---------------------------------------- 黄の四天王 に勝った! ---------------------------------------- なんかオバサンくさい喋り方でしたね。 次に進みましょう。 四人目: 赤の四天王があらわれた! ------------------------------------------------------------ 四天王最後のひとりは私だ。 私とは ハイ&ロウ で勝負していただこう。 次の数字が現在の数字より大きいか小さいかを当てるゲームだ。 5回中3回正解したら君の勝ちだ。 心の準備はいいか? ------------------------------------------------------------ 数字は0〜9まで、同じ数字の場合は高い方に含めるとするよ。 1 回目: 今の数字は 6 だ。次の数字はこれよりも高いか?低いか? high / low low ...次の数字は 3 だ。つまり... 見事正解だ。 2 回目: 今の数字は 0 だ。次の数字はこれよりも高いか?低いか? high / low high ...次の数字は 4 だ。つまり... 見事正解だ。 3 回目: 今の数字は 3 だ。次の数字はこれよりも高いか?低いか? high / low high ...次の数字は 1 だ。つまり... 残念だが不正解だ。 4 回目: 今の数字は 7 だ。次の数字はこれよりも高いか?低いか? high / low low ...次の数字は 8 だ。つまり... 残念だが不正解だ。 5 回目: 今の数字は 3 だ。次の数字はこれよりも高いか?低いか? high / low high ...次の数字は 2 だ。つまり... 残念だが不正解だ。 〜ハイ&ロウ終了〜 結果発表に移ろう。 2/5回だ。 私の勝ちだね。楽しかったよ。 ...ゲームオーバー... ◯考察 配列の扱いが所どころ上手くいっていないので、 予想外の動きをされると変な動作をしている。 1-B a. http://roy/~c110160/advertise2/ b. http://roy/~c110160/advertise2/plan.txt c. http://roy/~c110160/advertise2/sentou.rb 2. 申し訳ありませんが、中途半端で提出します。 自由課題は久し振りだったので楽しかったです。 前期よりは技能が身に付いていると思いますが、 もう少し簡易にこういうものが作れる気がするので いろいろ試行錯誤していきたいです。 3. 参考URL: 名言集.com 管理人: KATAMUKI http://www.meigensyu.com/