第 7 回 ゼミ紹介 レポート課題 氏名:樋口貴士 学籍番号:C1101715 語学クラス:中国語3 コース(系):地域共創コース A.最高傑作について a.仕様書 <企画の意図> スポーツのような熱戦をゲームの形でプログラムにして作成したら どのような形になるかと興味を持ったので作成しました。 <遊び方> このゲームの遊び方は、 Save Link AS... でプログラムのファイルを ダウンロードして普段プログラムを保存しているディレクトリに保存します。 ◎使用方法 Kterm で % chmod +x boxing.rb と入力します。 次に % ./boxig.rb と入力すると起動します。 すると 今日、ボクシング会の世界チャンピオンが誕生する! お互いの hp は 30 ! スポーツマンシップにのって闘ってくれ!! あなたの名前は?: となるので名前を入力してゲームを始めて下さい。 <連絡先> このプログラムに対しての意見・助言・感想などは下記のアドレスまでお願いします。 c110171@f.koeki-u.ac.jp b.プログラム問題 b-1.考えた設定 対戦ゲームをボクシングに例え、プログラムを作成してみた。 b-2.作成したプログラム #!/usr/koeki/bin/ruby hp = 30 #自分のライフポイント。 hp1 = 30 #相手のライフポイント。 time = 1 # sleep の時間。 print"今日、ボクシング会の世界チャンピオンが誕生する!\n" sleep(time) print"お互いの hp は 30 ! スポーツマンシップにのって闘ってくれ!!\n" sleep(time) print"あなたの名前は?:" name = gets.chomp!.to_s #値の型を文字列に変換する。 if name == "" #もし名前を入力しなかった場合 るびお になる。 name = "るびお" end # if の終わり。 print"対戦相手の名前は?:" name1 = gets.chomp!.to_s #値の型を文字列に変換する。 if name1 == "" #もし名前を入力しなかった場合 るびこ になる。 name1 = "るびこ" end # if の終わり。 def waza() #メソッドの設定。 sound = ["アッパー", "ジャブ", "フック", "クロスカウンター", "ガゼルパンチ", "ジョルトブロー", "コークスクリュー・ブロー", "ボディーブロー", "ワンツーパンチ", "デンプシー・ロール", ] srand x = rand(10) # 10 個の技からランダムで表示させる。 return sound[x] # rand で呼び出したものを元に返す。 end # def の終わり。 def damage() #メソッドの設定。 srand # waza メソッドで選ばれた技を呼び出す。 a = rand(10)+1 # 1 〜 10 がランダムに選ばれ a に代入。 printf(" %s激しい殴り合いだーー!!\n",waza,a) return a # 1 〜 10 のダメージ (a) を呼び出し元に返す。 end # def の終わり。 def hantei(a,b) #メソッドの設定。 if a > 0 && b <= 0 #相手のライフが先に 0 を下まわった場合。 print" K・O!やりましたね!世界チャンピオンです。\n" return 1 elsif a <= 0 && b > 0 #自分のライフが先に 0 を下まわった場合。 print"敗けてしまいました。また挑戦してください。\n" return 1 elsif a <= 0 && b <= 0 #お互いのライフが 0 になった場合。 print"両者ともにダウンです。健闘をたたえましょう!\n" return 1 else return 0 end end while true #繰り返し。 printf("\n%sが繰り出した技は…\n",name) sleep(time) hp1 -= damage #相手のライフからダメージを引く。 sleep(time) printf("\n%sが繰り出した技は…\n",name1) sleep(time) hp -= damage #自分のライフからダメージを引く sleep(time) printf("\n 【%sの体力:%dポイント %sの体力:%dポイント】\n",name,hp,name1,hp1) if hantei(hp,hp1)==1 exit() end sleep(time) end b-3.もとにしたプログラム 前期・後期と今までに習ってきたことを いかして作成した。 b-4.実行結果 ◎対戦に勝った場合 pan{HIGUCHI Takashi}% ./boxing.rb [~/public_html/advertise2] 今日、ボクシング会の世界チャンピオンが誕生する! お互いの hp は 30 ! スポーツマンシップにのって闘ってくれ!! あなたの名前は?:るびおっち 対戦相手の名前は?:るびこっち るびおっちが繰り出した技は… ボディーブロー激しい殴り合いだーー!! るびこっちが繰り出した技は… フック激しい殴り合いだーー!! 【るびおっちの体力:25ポイント るびこっちの体力:21ポイント】 るびおっちが繰り出した技は… ワンツーパンチ激しい殴り合いだーー!! るびこっちが繰り出した技は… ガゼルパンチ激しい殴り合いだーー!! 【るびおっちの体力:21ポイント るびこっちの体力:12ポイント】 るびおっちが繰り出した技は… ジョルトブロー激しい殴り合いだーー!! るびこっちが繰り出した技は… コークスクリュー・ブロー激しい殴り合いだーー!! 【るびおっちの体力:14ポイント るびこっちの体力:10ポイント】 るびおっちが繰り出した技は… ワンツーパンチ激しい殴り合いだーー!! るびこっちが繰り出した技は… ジャブ激しい殴り合いだーー!! 【るびおっちの体力:13ポイント るびこっちの体力:1ポイント】 るびおっちが繰り出した技は… アッパー激しい殴り合いだーー!! るびこっちが繰り出した技は… デンプシー・ロール激しい殴り合いだーー!! 【るびおっちの体力:11ポイント るびこっちの体力:-7ポイント】 K・O!やりましたね!世界チャンピオンです。 ◎敗けた場合 pan{c110171}% ./boxing.rb 以下省略 【るびおっちの体力:-1ポイント るびこの体力:9ポイント】 敗けてしまいました。また挑戦してください。 ◎引き分けの場合 pan{c110171}% ./boxing.rb 以下省略 【るびおっちの体力:-8ポイント るびこっちの体力:-1ポイント】 両者ともにダウンです。健闘をたたえましょう! ◎名前を入力しなかった場合 pan{c110171}% ./boxing.rb 以下省略 あなたの名前は?: 対戦相手の名前は?: るびおが繰り出した技は… デンプシー・ロール激しい殴り合いだーー!! るびこが繰り出した技は… ボディーブロー激しい殴り合いだーー!! b-5.考察 以上の結果から、対戦に勝った場合、敗けた場合、引き分けの場合、 名前を入力しなかった場合と、どれも結果が正しいのでこのプログラムは 正しいといえる。 ◎広告ページ http://roy/~c110171/advertise2/ B. a.自分のトップページへのリンク http://roy/~c110171/ b.仕様書へのリンク http://roy/~c110171/advertise2/shiyousyo.txt c.最高傑作のプログラムへのリンク http://roy/~c110171/advertise2/boxing.rbx 2.感想 今回プログラムだけでなく、ホームページも作成する必要があったので 苦労した。今回作成したプログラムは名前を入力すると自動で開始されて しまうので、対戦の途中でも自分で技などを選択できるように工夫して行きたい。 ホームページ作成では作成の仕方を忘れてしまったので、時間がかかったが 無事に出来て良かった。 3.参考文献 著者 神田直弥 基礎プログラミングI プログラムの公開 http://roy/~naoya/ruby/10.html 基礎プログラミングII メソッド http://roy/~naoya/rubyII/6.html 著者 西村まどか 前期の復習 http://roy/~madoka/2011/r2/01/ なになにといえばこれこれ http://roy/~madoka/2011/r2/02/ 情報の構造を分析しよう http://roy/~madoka/2011/r2/03/ 繰り返しは引っ張りだそう http://roy/~madoka/2011/r2/04/ 何度も呼び出そう http://roy/~madoka/2011/r2/05/ 目的に応じて使ってみよう http://roy/~madoka/2011/r2/06/