第 7 回 ゼミ紹介 レポート課題 氏名:菊池綾 学籍番号:c1100644 語学クラス:英語6 コース(系):政策マネジメント 11月22日の朝5時に一度提出したのですが、28日にMAILER-DAEMONから返信が来て いました。返って来たメールは内容が文字化けしていたのですが、原因が分から ないのでもう一度そのまま送ります。 もし可能なようでしたら提出のボーナス点をもらえると嬉しいのですが、難しい でしょうか。 採点よろしくお願いします。 A. http://roy/~c110064/advertise2/ a.仕様書 <仕様書> ●企画の意図 実際に手元に道具がない場合でも似たようなゲームが出来ないかと考え、このゲー ムを作成しました。 def関数の自作メソッドを用いて、自動でハズレの数字を設定できるような工夫 をしました。 ●プログラムの内容 「黒ひげ危機一髪!! 〜Ruby Ver.〜」 対象人数: 1 人〜 3 人 オリジナルは剣をたるに刺していって、黒ひげが飛びだしたら負け、というルー ルですが、このゲームは、剣を刺す代わりに2桁の数字を入力してもらいます。 ***遊び方*** 1.プレイ人数を選択(1,2,3)。 2.プレイヤーの名前を入力。 3.ハズレの数字を決めます。適当な2桁の数字を1つ入力。 実際にハズレとなる数字は、入力した数字をもとにプログラムがある計算をする ことで設定するため、プレイヤーはこの数字を知ることなく遊べます。 4.画面のメッセージに従い、順番どおりに数字を入力。 5.GAME OVER のメッセージが出たら負け。ゲーム終了。 ●今後の課題 オリジナルのゲームでは同じ場所に剣が刺せないため、このゲームも同じ数字を 入力した場合やり直させることが必要だと考えたが、配列を入れる等では処理で きず、今回は取り入れられなかった。方法を考え、改良したい。 また、視覚的にももっと楽しめるよう、ハズレを入力すると絵が出る、カウント ダウンの表示を楽しいものにする、等の改良の余地がある。 プログラム自体、順序を工夫する等によってより短く、同じ処理を書かなくてい いようにすることができるはずであるため、繰り返しを上手く使いこなせるよう にさらに勉強したい。 ●連絡先 プログラムに関して、意見・質問等ある方は、下記の連絡先までご連絡下さい。 ------------------------------------- 東北公益文科大学 2年 菊池綾 c1100644 E-mail:c110064@f.koeki-u.ac.jp ------------------------------------- ●ご注意 このプログラムの著作権は、東北公益文科大学 菊池綾が保有しています。 このプログラムの入手・実行・改変は自由に行うことができます。 取り扱うことで生じた問題に関して、著作権者は一切責任を負いませんので、 ご了承下さい。 b.プログラム i.考えた設定 本来は道具がなければ出来ない遊びを、プログラム内で遊べるようにする。 ・数字を剣の代わりにして、好きな2桁の数字を入力してもらう。 ・ハズレは自作メソッドのdef関数を用いて計算して自動的に作る。 ・ハズレが出るまで while true で繰り返す。 ・if を用いてプレイ人数、セーフかハズレか等条件分岐させる。 ii.作成したプログラム #!/usr/koeki/bin/ruby ##定義文## def secret(number) #自作メソッドの設定。関数名:secret 仮引数:number,k k = number / 2 #number を 2 で割ったものを k に代入 kiki = 100 - k.truncate #100 から k の小数部分(number が奇数のとき)を #truncateメソッドで切り捨てた値を #引いたものを、kiki に代入、kiki の値を返す。 end #自作メソッドのend ##プログラム## print"黒ひげ危機一髪ゲームへようこそ!\n\n" #ゲーム開始のメッセージを表示 sleep(1) #メッセージの間を空ける。(1)は1秒。 print"このゲームは 1〜3人向けのゲームです。遊びたい人数を選んでね!\n" #選択肢の表示 sleep(1) while true #繰り返しの while true print"プレイヤーの人数(数字のみ入力) :" #プレイヤー数選択を促すメッセージ表示 player = gets.to_i #変数playerに入力したデータを代入し、 #10進整数に変換して出力させる。 if player == 1 #変数pleyerに代入された数字が1のとき print"ひとりで遊ぶ を選択しました。\n" #このメッセージを表示させる。 sleep(1) print"あなたの名前を教えてね! :" #名前の入力を促すメッセージ name = gets.chomp!.to_s #変数name に入力したものを代入、 #chomp!はReturnキーの入力を取る働き、 #to_sは入力した文字列を文字として #出力する働きを持ったメソッド。 printf("%sさんですね。楽しんで行ってください!\n\n", name) #printfメソッドで表示するメッセージに #先程入力した名前を代入する。 #%sは文字を表示するメソッド。 sleep(1) print"*************************************\n" #区切り線の表示。 print"ハズレの数字を決めるよ! ハズレは自動で決まります。 元になる好きな2桁の数字を入力してね!\n" #ハズレの数を計算するための数字の #入力を促すメッセージ。 number = gets.to_i #変数numberに入力した値を代入。 #to_iで10進整数で出力するようにした。 print"*************************************\n\n"#区切り線の表示。 print"それではゲームスタート!!\n" #ゲームスタートの表示。 n = 1 #挑戦回数 n の初期値として1を代入。 while true #ここから条件に従って処理の繰り返しを行なう。 printf("挑戦回数:%d回目\n", n) #%dは整数を表示させるメソッド。nを代入。 print"剣を刺す番号を選んで入力!(2桁) :" #剣を刺す代わりに2桁の数字を #入力するよう促すメッセージ。 select = gets.to_i #変数selectに入力した値を代入。 #to_iで10進整数として出力する。 3.downto(1) do |bomb| #3秒前からカウントダウンをする。 #最初の数.downto(終わりの数) do |数字を代入する変数名| printf("%d … \n", bomb) #カウントダウンで1秒毎に表示させるメッセージ。 #%dは整数を出力。変数bombの中の値を代入して表示。 sleep(1) end #downtoのend # p secret(number) #最初に設定したハズレの数を表示(範囲内かどうか) if select == secret(number) #入力した数字がハズレと等しいとき system 'banner GAME OVER' #GAME OVERをsystemを使って大きく表示、 break #繰り返しから抜ける。 else #入力した数字がハズレと等しくないとき n += 1 #挑戦回数nに1を足す。 end #if の end end #while trueのend break #プログラムの終了。最後のメッセージへ。 elsif player == 2 #変数playerに代入された数字が2のとき print"ふたりで遊ぶ を選択しました!\n"#このメッセージを表示させる。 sleep(1) print"一人目のプレイヤーの名前を教えてね! :" #一人目の名前の入力を促す。 name1 = gets.chomp!.to_s #変数name1に文字を代入。 print"二人目のプレイヤーの名前も教えてね! :" #二人目の名前の入力を促す。 name2 = gets.chomp!.to_s #変数name2に文字を代入。 printf("プレイヤー1:%sさん、プレイヤー2:%sさんですね! 楽しんで行って下さい!\n", name1, name2) #printfにname1,name2の中身を #代入して表示。 sleep(1) print"*************************************\n" print"ハズレの数字を決めるよ! ハズレは自動で決まります。 元になる好きな2桁の数字を入力してね!\n" number = gets.to_i print"*************************************\n\n" print"それではゲームスタート!!\n" n = 1 #挑戦回数 n の初期値 while true printf("挑戦回数:%d回目\n", n) printf("%sさんの番です。\n", name1) #一人目の名前を代入して順番を表示。 print"剣を刺す番号を選んで入力!(2桁) :" select = gets.to_i 3.downto(1) do |bomb| printf("%d … \n", bomb) sleep(1) end if select == secret(number) system 'banner GAME OVER' break end printf("%sさんの番です。\n", name2) #二人目の名前を代入して順番を表示。 print"剣を刺す番号を選んで入力!(2桁) :" select = gets.to_i 3.downto(1) do |bomb| printf("%d … \n", bomb) sleep(1) end if select == secret(number) system 'banner GAME OVER' break else n += 1 end end break elsif player == 3 #変数playerに3を代入したとき print"三人で遊ぶ を選択しました!\n" sleep(1) print"一人目のプレイヤーの名前を教えてね! :"#一人目の名前の入力を促す。 name1 = gets.chomp!.to_s #入力した内容をname1に代入。 print"二人目のプレイヤーの名前を教えてね! :"#二人目の名前の入力を促す。 name2 = gets.chomp!.to_s #入力した名前をname2に代入。 print"三人目のプレイヤーの名前を教えてね! :"#三人目の名前の入力を促す。 name3 = gets.chomp!.to_s #入力した名前をname3に代入。 printf("プレイヤー1:%sさん、プレイヤー2:%sさん、プレイヤー3:%sさんですね! 楽しんで行って下さい!\n", name1, name2, name3) #名前を代入してメッセージを表示。 sleep(1) print"*************************************\n" print"ハズレの数字を決めるよ! ハズレは自動で決まります。 元になる好きな2桁の数字を入力してね!\n" number = gets.to_i print"*************************************\n\n" print"それではゲームスタート!!\n" n = 1 #挑戦回数 n の初期値 while true printf("挑戦回数:%d回目\n", n) printf("%sさんの番です。\n", name1) #一人目の名前を代入して順番を表示。 print"剣を刺す番号を選んで入力!(2桁) :" select = gets.to_i 3.downto(1) do |bomb| printf("%d … \n", bomb) sleep(1) end if select == secret(number) system 'banner GAME OVER' break end printf("%sさんの番です。\n", name2) #二人目の名前を代入して順番を表示。 print"剣を刺す番号を選んで入力!(2桁) :" select = gets.to_i 3.downto(1) do |bomb| printf("%d … \n", bomb) sleep(1) end if select == secret(number) system 'banner GAME OVER' break else end printf("%sさんの番です。\n", name3) #三人目の名前を代入して順番を表示。 print"剣を刺す番号を選んで入力!(2桁) :" select = gets.to_i 3.downto(1) do |bomb| printf("%d … \n", bomb) sleep(1) end if select == secret(number) system 'banner GAME OVER' break else n += 1 end end break else #playerに1,2,3以外を入力したとき print"入力ミスです!数字で入力し直してください。\n\n" #再入力を促すメッセージを表示。 redo #入力する箇所まで戻ってやりなおし。 end #playerに人数を入力した後のifのend end #全体のwhile true のend print"また遊びに来てね!\n" #ゲーム終了後のメッセージを表示。 iii.実行結果 (1)一人で遊ぶ を選ぶ pan{c110064}% ./kurohige.rb [~/public_html/advertise2] 黒ひげ危機一髪ゲームへようこそ! このゲームは 1〜3人向けのゲームです。遊びたい人数を選んでね! プレイヤーの人数(数字のみ入力) :1 ひとりで遊ぶ を選択しました。 あなたの名前を教えてね! :あや あやさんですね。楽しんで行ってください! ************************************* ハズレの数字を決めるよ! ハズレは自動で決まります。 元になる好きな2桁の数字を入力してね! 50 ************************************* それではゲームスタート!! 挑戦回数:1回目 剣を刺す番号を選んで入力!(2桁) :43 3 … 2 … 1 … 挑戦回数:2回目 剣を刺す番号を選んで入力!(2桁) :75 3 … 2 … 1 … ##### # # # ####### # # # # ## ## # # # # # # # # # # #### # # # # # ##### # # ####### # # # # # # # # # # ##### # # # # ####### ####### # # ####### ###### # # # # # # # # # # # # # # # # # # ##### ###### # # # # # # # # # # # # # # ####### # ####### # # また遊びに来てね! (2)ふたりで遊ぶ an{c110064}% ./kurohige.rb [~/public_html/advertise2] 黒ひげ危機一髪ゲームへようこそ! このゲームは 1〜3人向けのゲームです。遊びたい人数を選んでね! プレイヤーの人数(数字のみ入力) :2 ふたりで遊ぶ を選択しました! 一人目のプレイヤーの名前を教えてね! :はなこ 二人目のプレイヤーの名前も教えてね! :たろう プレイヤー1:はなこさん、プレイヤー2:たろうさんですね! 楽しんで行って下さい! ************************************* ハズレの数字を決めるよ! ハズレは自動で決まります。 元になる好きな2桁の数字を入力してね! 20 ************************************* それではゲームスタート!! 挑戦回数:1回目 はなこさんの番です。 剣を刺す番号を選んで入力!(2桁) :63 3 … 2 … 1 … たろうさんの番です。 剣を刺す番号を選んで入力!(2桁) :30 3 … 2 … 1 … 挑戦回数:2回目 はなこさんの番です。 剣を刺す番号を選んで入力!(2桁) :72 3 … 2 … 1 … たろうさんの番です。 剣を刺す番号を選んで入力!(2桁) :14 3 … 2 … 1 … 挑戦回数:3回目 はなこさんの番です。 剣を刺す番号を選んで入力!(2桁) :89 3 … 2 … 1 … たろうさんの番です。 剣を刺す番号を選んで入力!(2桁) :90 3 … 2 … 1 … ##### # # # ####### # # # # ## ## # # # # # # # # # # #### # # # # # ##### # # ####### # # # # # # # # # # ##### # # # # ####### ####### # # ####### ###### # # # # # # # # # # # # # # # # # # ##### ###### # # # # # # # # # # # # # # ####### # ####### # # また遊びに来てね! (3)三人で遊ぶ pan{c110064}% ./kurohige.rb [~/public_html/advertise2] 黒ひげ危機一髪ゲームへようこそ! このゲームは 1〜3人向けのゲームです。遊びたい人数を選んでね! プレイヤーの人数(数字のみ入力) :3 一人目のプレイヤーの名前を教えてね! :あい 二人目のプレイヤーの名前を教えてね! :ゆうき 三人目のプレイヤーの名前を教えてね! :えみ プレイヤー1:あいさん、プレイヤー2:ゆうきさん、プレイヤー3:えみさんですね! 楽しんで行って下さい! ************************************* ハズレの数字を決めるよ! ハズレは自動で決まります。 元になる好きな2桁の数字を入力してね! 88 ************************************* それではゲームスタート!! 挑戦回数:1回目 あいさんの番です。 剣を刺す番号を選んで入力!(2桁) :40 3 … 2 … 1 … ゆうきさんの番です。 剣を刺す番号を選んで入力!(2桁) :20 3 … 2 … 1 … えみさんの番です。 剣を刺す番号を選んで入力!(2桁) :48 3 … 2 … 1 … 挑戦回数:2回目 あいさんの番です。 剣を刺す番号を選んで入力!(2桁) :73 3 … 2 … 1 … ゆうきさんの番です。 剣を刺す番号を選んで入力!(2桁) :82 3 … 2 … 1 … えみさんの番です。 剣を刺す番号を選んで入力!(2桁) :66 3 … 2 … 1 … 挑戦回数:3回目 あいさんの番です。 剣を刺す番号を選んで入力!(2桁) :56 3 … 2 … 1 … ##### # # # ####### # # # # ## ## # # # # # # # # # # #### # # # # # ##### # # ####### # # # # # # # # # # ##### # # # # ####### ####### # # ####### ###### # # # # # # # # # # # # # # # # # # ##### ###### # # # # # # # # # # # # # # ####### # ####### # # また遊びに来てね! (4)人数を間違えた場合 pan{c110064}% ./kurohige.rb [~/public_html/advertise2] 黒ひげ危機一髪ゲームへようこそ! このゲームは 1〜3人向けのゲームです。遊びたい人数を選んでね! プレイヤーの人数(数字のみ入力) :4 入力ミスです!数字で入力し直してください。 プレイヤーの人数(数字のみ入力) :0 入力ミスです!数字で入力し直してください。 プレイヤーの人数(数字のみ入力) : 入力ミスです!数字で入力し直してください。 プレイヤーの人数(数字のみ入力) :1 ひとりで遊ぶ を選択しました。 あなたの名前を教えてね! :なみ なみさんですね。楽しんで行ってください! ************************************* ハズレの数字を決めるよ! ハズレは自動で決まります。 元になる好きな2桁の数字を入力してね! 10 ************************************* それではゲームスタート!! 挑戦回数:1回目 剣を刺す番号を選んで入力!(2桁) :90 3 … 2 … 1 … 挑戦回数:2回目 剣を刺す番号を選んで入力!(2桁) :95 3 … 2 … 1 … ##### # # # ####### # # # # ## ## # # # # # # # # # # #### # # # # # ##### # # ####### # # # # # # # # # # ##### # # # # ####### ####### # # ####### ###### # # # # # # # # # # # # # # # # # # ##### ###### # # # # # # # # # # # # # # ####### # ####### # # また遊びに来てね! (5)ハズレが2桁以外になる場合 ※計算式 : k = (入力した数)/2 kiki = 100 - k.truncare →100から、入力した数を2で割って小数点以下を切り捨てた値を引 く。 pan{c110064}% ./kurohige.rb [~/public_html/advertise2] 黒ひげ危機一髪ゲームへようこそ! このゲームは 1〜3人向けのゲームです。遊びたい人数を選んでね! プレイヤーの人数(数字のみ入力) :1 ひとりで遊ぶ を選択しました。 あなたの名前を教えてね! :aya ayaさんですね。楽しんで行ってください! ************************************* ハズレの数字を決めるよ! ハズレは自動で決まります。 元になる好きな2桁の数字を入力してね! 9 ************************************* それではゲームスタート!! 挑戦回数:1回目 剣を刺す番号を選んで入力!(2桁) :96 3 … 2 … 1 … ##### # # # ####### # # # # ## ## # # # # # # # # # # #### # # # # # ##### # # ####### # # # # # # # # # # ##### # # # # ####### ####### # # ####### ###### # # # # # # # # # # # # # # # # # # ##### ###### # # # # # # # # # # # # # # ####### # ####### # # また遊びに来てね! pan{c110064}% ./kurohige.rb [~/public_html/advertise2] 黒ひげ危機一髪ゲームへようこそ! このゲームは 1〜3人向けのゲームです。遊びたい人数を選んでね! プレイヤーの人数(数字のみ入力) :1 ひとりで遊ぶ を選択しました。 あなたの名前を教えてね! :あや あやさんですね。楽しんで行ってください! ************************************* ハズレの数字を決めるよ! ハズレは自動で決まります。 元になる好きな2桁の数字を入力してね! 1 ************************************* それではゲームスタート!! 挑戦回数:1回目 剣を刺す番号を選んで入力!(2桁) :100 3 … 2 … 1 … ##### # # # ####### # # # # ## ## # # # # # # # # # # #### # # # # # ##### # # ####### # # # # # # # # # # ##### # # # # ####### ####### # # ####### ###### # # # # # # # # # # # # # # # # # # ##### ###### # # # # # # # # # # # # # # ####### # ####### # # また遊びに来てね! iv.考察 人数入力をミスした場合にはプログラムどおりやり直しすることが出来た。 また、人数入力による分岐も正常に作動している。 ハズレの計算も正しく計算されているが、誤って1を入力した場合、 100 - (1 / 2 を切り捨てた値) = 100 となり、プレイヤーが2桁の数字を入力していくと終われなくなってしまうため、 if を使って条件を作るなど、さらに改良が必要なことが分かった。 v.感想 最高傑作と呼ぶにはまだまだ未完成な作品になってしまった。 後期に学んだ内容をあまり取り入れられなかったため、カウントダウンや文字を 大きく表示させるなど、小技を取り入れた。 実際にあるゲームの代替品としてプログラムを作ったので、本物だとどんな動作 が起こり、それをプログラム化するには何を使えばいいかを考えるところで時間 がかかったが、一通り形になってよかった。 Hash配列など、まだ使えるところまで理解できていないものがあると分かったの で、今後さらに勉強していきたいと思う。 vi.参考文献 Webページ作成の基礎 http://roy/web/index.html 第6回 基礎プログラミングII 「カウントダウン」 西村まどか http://roy/~madoka/2011/r2/06/r2_06_03_theme_02_countdown.html 第5回 基礎プログラミングII 「脱メタボリック計画」 西村まどか http://roy/~madoka/2011/r2/05/r2_05_01_theme_01_diet.html ------------------------------- 東北公益文科大学 公益学部 公益学科 2年 菊池綾 c110064@f.koeki-u.ac.jp