第12回 基礎プログラミング II レポート課題 氏名: 横山広樹 学籍番号: c109149A 語学クラス: 英語 1 コース(系): 環境サイエンス チーム名: ドクダミ草 チームホームページアドレス: http://roy.e.koeki-u.ac.jp/~c109067/dokudamisou/ プロジェクト名: べんカロ フルハウス 1. チーム全体では後画像と、プログラムを完成させること。 2. プロジェクトは、後画像を作っていけば完成する。 3. 自分が担当している部分は、プログラムとポスターである。プログラムは一応 完成したので後はメンバーの意見を聞きながら、直せる場所は直していこうと 考えている。 4. トランプに弁当の要素を取り入れて統一性を持たせたいと言われた。 5. 指摘に対してカードのマークを弁当のおかずにして、統一性を持たせることにし た。その進み具合はマークを「めだまやき」「ハンバーグ」「チーズカツコロッ ケ」「キャベツ」にし、カードを全て書き変えたので完了した。 6. プログラムの解説 #!/usr/koeki/bin/ruby def make(card) for a in ["めだまやき","チーズカツコロッケ","ハンバーグ","キャベツ"] 1.upto(13) do |b| card << {"suto" => a, "a" => b.to_i} end end shahul(card) end def shahul(d) srand 0.upto(d.length-1) do |e| f = rand(d.length) g = d[e] d[e] = d[f] d[f] = g end end def yaku(card) h = Array.new h[0] = card[0]["a"] h[1] = card[1]["a"] h[2] = card[2]["a"] h[3] = card[3]["a"] h[4] = card[4]["a"] h.sort! if h[0] == 1 && h[1] == 10 && h[2] == 11 && h[3] == 12 && h[4] == 13 && card[0]["suto"] == card[1]["suto"] && card[1]["suto"] == card[2]["suto"] && card[2]["suto"] == card[3]["suto"] && card[3]["suto"] == card[4]["suto"] keka = "ロイヤルストレートフラッシュ" elsif h[0]+1 == h[1] && h[0]+2 == h[2] && h[0]+3 == h[3] && h[0]+4 == h[4] && card[0]["suto"] == card[2]["suto"] && card[2]["suto"] == card[3]["suto"] &&card[3]["suto"] == card[4]["suto"] || h[0] == 1 && h[1] == 10 && h[2] == 11 && h[3] == 12 && h[4] == 13 && card[0]["suto"] == card[2]["suto"] && card[2]["suto"] == card[3]["suto"] && card[3]["suto"] == card[4]["suto"] keka = "ストレートフラッシュ" elsif h[0] == h[1] && h[1] == h[2] && h[2] == h[3] || h[1] == h[2] && h[2] == h[3] && h[3] == h[4] keka = "フォーカード" elsif h[0] == h[1] && h[2] == h[3] && h[3] == h[4] || h[3] == h[4] && h[0] == h[1] && h[1] == h[2] keka = "フルハウス" elsif card[0]["suto"] == card[1]["suto"] && card[1]["suto"] == card[2]["suto"] && card[2]["suto"] == card[3]["suto"] && card[3]["suto"] == card[4]["suto"] keka = "フラッシュ" elsif h[0]+1 == h[1] && h[0]+2 == h[2] && h[0]+3 == h[3] && h[0]+4 == h[4] || h[0] == 1 && h[1] == 10 && h[2] == 11 && h[3] == 12 && h[4] == 13 keka = "ストレート" elsif h[0] == h[1] && h[1] == h[2] || h[1] == h[2] && h[2] == h[3] || h[2] == h[3] && h[3] == h[4] keka = "スリーカード" elsif h[0] == h[1] && h[2] == h[3] || h[0] == h[1] && h[3] == h[4] || h[1] == h[2] && h[3] == h[4] keka = "ツーペア" elsif h[0] == h[1] || h[1] == h[2] || h[2] == h[3] || h[3] == h[4] keka = "ワンペア" else keka = "ノーペア" end end def hyouji(card) y = 0 t = 180 j = 0 while j < card.length a = card[j]["suto"] b = card[j]["a"] if a == "キャベツ" system"display -geometry +#{y}+#{t} http://roy/~c109149/spade#{b}.png&" elsif a == "めだまやき" system"display -geometry +#{y}+#{t} http://roy/~c109149/club#{b}.png&" elsif a == "ハンバーグ" system"display -geometry +#{y}+#{t} http://roy/~c109149/heart#{b}.png&" else a == "チーズカツコロッケ" system"display -geometry +#{y}+#{t} http://roy/~c109149/diamond#{b}.png&" end y += 226 j += 1 sleep(0.5) end end def kake(yaku,q) kake = q.to_i if yaku == "ノーペア" kae = kake * 0 elsif yaku == "ワンペア" kae = kake * 1 elsif yaku == "ツーペア" kae = kake * 2 elsif yaku == "スリーカード" kae = kake * 3 elsif yaku == "ストレート" kae = kake * 5 elsif yaku == "フラッシュ" kae = kake * 7 elsif yaku == "フルハウス" kae = kake * 10 elsif yaku == "フォーカード" kae = kake * 40 elsif yaku == "ストレートフラッシュ" kae = kake * 100 elsif yaku == "ロイヤルストレートフラッシュ" kae = kake * 500 end kae.to_i end cards = Array.new make(cards) shahul(cards) tip = 0 open("point.txt" , "r") do |w| while sss = w.gets if /(\d+)/ =~ sss tip = $1.to_i end end end STDERR.print("これからポーカーを始めます\n") STDERR.print("ルールはポーカーのルールとあまり変わりません\n") STDERR.print("使うカードはJokerを抜いた52枚のカードです\n") STDERR.print("同じ数または、同じ種類を集め役を作ります\n") STDERR.print("例をあげます。○○の中はカードの種類が入ります\n") sleep(1) STDERR.print("○○の2、○○の3、○○の7、○○の3、○○の10\n") STDERR.print("これはワンペアです\n") sleep(1) STDERR.print("○○のA、○○の3、○○のK、○○の3、○○のK\n") STDERR.print("これはツーペアです\n") sleep(1) STDERR.print("○○の7、○○の3、○○の7、○○のQ、○○の7\n") STDERR.print("これはスリーカードです\n") sleep(1) STDERR.print("○○の4、○○の5、○○の6、○○の7、○○の8\n") STDERR.print("これはストレートです\n") STDERR.print("KからAは可\n") sleep(2) STDERR.print("ハンバーグの○、ハンバーグの○、ハンバーグの○、ハンバーグの○、\nハンバーグの○\n") STDERR.print("これは○の中に数字が入ります。フラッシュです\n") sleep(1) STDERR.print("○○のK、○○のK、○○の6、○○の6、○○の6\n") STDERR.print("これはフルハウスです\n") sleep(1) STDERR.print("○○のK、○○のK、○○のK、○○のK、○○のA\n") STDERR.print("これはフォーカードです\n") sleep(1) STDERR.print("チーズカツコロッケの4、チーズカツコロッケの5、チーズカツコロッケの6、\nチーズカツコロッケの7、チーズカツコロッケの8\n") STDERR.print("これはストレートフラッシュです\n") sleep(1) STDERR.print("めだまやきの10、めだまやきのJ、めだまやきのQ、めだまやきのK、めだまやきのA\n") STDERR.print("これはロイヤルストレートフラッシュです\n") sleep(1) STDERR.print("下にいくほど難しい役になります\n") sleep(3) printf("現在あなたは%d枚チップを持っています\n",tip) while true STDERR.print("チップを賭けてください(500枚まで)\n") kakeru = gets.to_i if tip < kakeru STDERR.printf("%d枚までにしてください\n",tip) redo elsif 500 < kakeru STDERR.print("500枚までにしてください\n") redo else break end end tip = tip - kakeru while true play = Array.new for i in 0 .. 4 play[i] = cards[i] end STDERR.print("あなたに配られたカード\n") system("display -geometry +400+0 http://roy/~c109149/hyoji.png&") hyouji(play) sleep(3) printf("今の役は%sです\n",yaku(play)) sleep(2) print("左から1番目になります\n") print("交換しますか?(yかnで)\n") ans = gets.chomp if ans == "y" l = 0 k = 5 while true print("交換したいカードはなんですか?\n") print("1枚ずつ入力して下さい\n") koukan = gets.to_i if koukan > 5 print("5以内でお願いします\n") sleep(1) redo end koukan = koukan - 1 play.delete_at(koukan) play << cards[k] if l == 4 break end STDERR.print("もう1枚交換しますか?(yかnで)\n") ans_2 = gets.chomp if ans_2 == "n" break end l += 1 k += 1 end end system('pkill display -U `whoami`') print("交換した結果\n") system("display -geometry +400+0 http://roy/~c109149/hyoji.png&") hyouji(play) sleep(3) printf("%sです\n",yaku(play)) # プレイヤーの役の表示 kane = kake(yaku(play),kakeru) tip = tip + kane printf("%dチップ返します\n",kane) system('pkill display -U `whoami`') STDERR.print("もう一度しますか?(終わるならn)\n") ans_3 = gets.chomp if ans_3 == "n" break end printf("あなたは今%d枚チップを持っています\n",tip) while true STDERR.print("チップを賭けてください(500枚まで)\n") k = gets.to_i if tip < kakeru STDERR.printf("%d枚までにしてください\n",tip) redo elsif 500 < k STDERR.print("500枚までにしてください\n") redo else break end end tip = tip - k make(cards) shahul(cards) end open("point.txt" , "w") do |write| write.printf("%d\n",tip) end テキストファイルの中身 point.txt 2000 プログラムは前と比べて、def hyouji(card)、def hyouji(card)、テキストファ イルの変更をしました。新しく加えたことは、相手にカードを選んでもらい選ば れたカードの消去と山札からプレイヤーへの追加、def kake(yaku,q)を加えまし た。 def kake(yaku,q)ではできた役に応じて、かけられたチップに×◯◯をして出て きた数字を返すメソッドです。 このプログラムは一応完成したものの、まだ直すところがあると思うのでこれか ら直して行こうと考えている。 A. ポスターを作るに当たって決めたことは、チームの名前がドクダミ草なので植物 に関る色を使いポスターを作成しました。 感想 今回は何とかプログラムを完成させることができた。しかし、まだ改良点がある と思うのでチームの意見を聞きながら改良して行きたい。