スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Ruby勉強会@関西-14
Ruby勉強会@関西-14に行かせていただきました。

うん。行ってよかった。

「Ruby 初心者向けレッスン第11回」で じゃんけんプログラムを作りましたので載せます。

その前に、じゃんけんの勝敗を判定するアルゴリズムですが、
数学的にはおかしくなりますが


チョキ < グー < パー < チョキ < グー < パー
0 < 1 < 2 < 0 < 1 < 2


のように、グー・チョキ・パーを対応付けれることを大学1回生のとき習ったことを覚えていました。しかし、 どうやってif文に落とし込むか思いつかない・・・orz

ですが、グループ(I 班でした)でプログラミングということでしたから、天才的なお方に解答を思いついて頂きました(爆) まあ、どうなるのかはソースの方を見てもらうことにしましょう。

いやー まったく書けないと思ったんですが、TAの方が親切で ちゃんとじゃんけんプログラムを仕上げることができました(仕様に忠実ではないですがw)。ありがとうございます。 しかし、ちょっと長い間やりすぎてたかも(汗) うるさかったようでしたら ごめんなさい。


説明:
ruby janken.rb で起動

起動すると、
┌──────────────
│じゃんけんゲーム開始     
│>             
│               
└──────────────
とコマンドプロンプトのように 入力待ちになりますので、
G だと グー
H だと チョキ
P だと パー
を表しますので G H P のどれかを入力してください。
Q で 終了です。

なお 終了時点で勝率の計算をしていますが、一度も戦っていなかったりすると、0で割るのでエラーが発生したりしますが、そのあたりは考慮にいれておりません・・・

それでは ソースです。雰囲気だけでもつかんでください。って見本にしない方がいいと思いますが・・・・


require 'mathn'
puts 'じゃんけんゲーム開始'
win = 0
lose = 0

loop do
print "> "
human_hand = gets.chomp

if(human_hand == 'Q')
puts '終了します'
puts "あなたの勝率は#{win/(win+lose)*100}%です"
   puts 'さようなら'
break
end

computer = rand(3)
computer_hand={ 0 => 'H', 1 => 'G', 2 => 'P', }[computer]
puts "あなた#{human_hand} VS コンピュータ#{computer_hand}"
human={ 'H' => 0, 'G' => 1, 'P' => 2, }[human_hand]
puts '┌────────────────────────┐'


if((human+2)%3 == computer)
puts '│ v(^^)あなたの勝ちです(^^)v │'
win += 1
elsif ((human+1)%3 == computer)
puts '│ m(><)コンピュータの勝ちです(><)m │'
lose += 1
else
puts '│ !あいこ! │'
end

puts '└────────────────────────┘'

end




今回の開発で気づいたこと(教えていただいたこと)
●Rubyには ++ 演算子がない。 win++ とできないので win += 1
●print の中などで使われる #{ } の中にはRubyのコードが書ける
●ハッシュ{ 'H'=> 1 以下略 }[キー] という形でハッシュが使える(というか、ハッシュをよその言語でも使いこなせてなかったので使いどころがわかってうれしい)

とまあ こんなところでしょうか。
なお、今回は時間がなかったということからRubyの特徴であるオブジェクト指向は用いませんでした(ってソース見ればわかるか・・・)。
スポンサーサイト
かずひこ
%3を使うのなら、こう書けます。
case (computer - human) % 3
when 0
# 引き分け
when 1
# あなたの勝ち
when 2
# コンピュータの勝ち
end

さらにいうと、「要するにジャンケンって1/3で勝ち・負け・引き分けになるゲームだよね!」ということに思いを馳せると、コンピュータの手とか考えずに、
case rand(3)
when 0
# 引き分け
when 1
# あなたの勝ち
when 2
# コンピュータの勝ち
end
とするだけという超解になりますが、「夢が無い」と却下されました。(T T)
2007/02/18 (日) 01:47:51|URL |#-
かずひこ
あ、グーチョキパーと数字の関連がうちの班と違いました。when 1がコンピュータの勝ち、when 2があなたの勝ちに変更してください。
2007/02/18 (日) 01:49:15|URL |#-
ビンゴ中西
おお!
かずひこさん コメントありがとうございます。

そうですね。グ・チョキ・パーの数字の対応がわが班は変態的ですねw(←というか僕が、思いつきでチョキにしただけですので 班の人は悪くないですw)

あれ?数の対応違うと勝敗違うのかぁ とか、マイナスだと 余り計算どうなるんだろうと irb で確かめてたとこでしたw こんな風に求められるんですね。

しかし、1/3の確率で勝ち負け判定するのは、じゃんけんの手を入力した意味がないw

参考:
かずひこさん班
グー < チョキ < パー < グー < チョキ < パー
0 < 1 < 2 < 0 < 1 < 2

ビンゴ中西の案
チョキ < グー < パー < チョキ < グー < パー
0 < 1 < 2 < 0 < 1 < 2

グーから書き始めるのが自然ですねw
2007/02/18 (日) 02:11:27|URL |#-
ビンゴ中西
あ、
失礼間違いました。

かずひこさん班
グー > チョキ > パー > グー > チョキ > パー
 0      1     2      0     1     2

でないと グー・チョキ・パーの 不等号関係がおかしくなるか・・・ く~ ややこしいです。
2007/02/18 (日) 02:35:48|URL |#-
コメントを投稿する
Name:
URL:
Comment:

秘密:管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事にトラックバックする(FC2ブログユーザー)
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

ブロとも申請フォーム

この人とブロともになる

| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。