皆さんコード組む時って
細々した部分から作っていき、段々全体を整えていきますか? それとも初めに大枠の見通しを付けて、段々細部に掘り下げていきますか? あとclass Playerとclass Cpuってのが完全に冗長してるだろ? この場合の解決策は、継承・mix-in・動的に関数入れ替え どれでも良いんだが、 俺は動的にやる事多いから宣言はこうなる human class_new('HUMAN',human用関数) cpu = class_new('CPU',cpu用関数) Python良く知らんからRubyで書いてしまったが配列の中身を数値型だけにしておけば minとsumはブラックジャックなら有効活用できるな def min(a,b) = a < b ? a : b cardlist = [2, 5, 13] p cardlist.sum # 13 => K を普通に足し算すると 20 p cardlist.map{|n|min(10,n)}.sum # min関数で13 => K を10として認識すると17 >>31-33 ありがとうございます 参考になります PlayerとCpuにおけるコードの重複に関しては、継承を使うことで解消したいと思います decide_Avalue_1〜4では、Aの値が状況によって変わるので、 他のカードの合計値を引数にとって、Aのカード全体の値を返す仕様にしました あと>>31 で言及されている、数値データのオブジェクト化というのは どんな感じにすればいいかなかなか検討が付きませんでした よろしければヒントなどを頂けるとありがたいです >>34 すまんよくみたら.valueで内部的に数値は持ってたからCardクラス設計は今のまま平気だった あー、decide_Avalue_1はそういう処理か calc_scoreとdecide_Avalue_1~4はなんとかしないといかんね 他の部分は継承さえすれば全体処理の見通しをよくしているという評価も出来るけど この箇所だけは、いわゆるマジックナンバーが出現してるからまずい あくまで参考にって感じだけど、decide_Avalueとcalc_scoreは俺が書くとこうなる 保有してるカードの中でAの枚数と、A以外の合計値を関数fに渡す で、repeated_combinationで、 1 or 11 の選択を総当たりで出力、そこにscoreを足す(ここで21を超えるデータも出来る) 次にdelete_ifで21以上のデータを消して 残りからmaxで最大値を得る 戻り値が数値以外なら(rubyだとnil)、21オーバーした判定 Pythonでもrubyと似たような関数あるはずだから書けると思う https://ideone.com/IryebL def f a , score [1,11].repeated_combination(a).map do |m| m.sum + score end.delete_if do|m| m > 21 end.max end list = ['A','A',9] # 21 p f(list.count('A'),list.map{|m|m=='A'?0:m}.sum) list = ['A','A',10] # 12 p f(list.count('A'),list.map{|m|m=='A'?0:m}.sum) オマケでテストコード https://ideone.com/ppPjbB >>35-36 レスありがとうございます すいません、俺の知識では実装出来ませんでした… 一応>>30 にあるリンクにblackjack_3.pyをアップしたのでよろしければご覧下さい 継承でHumanクラスとComputerクラスのダブりを解消したのと、 Aの値を決めるメソッドをdecide_Avalueに一本化しました ただ10や11といったマジックナンバーは残ってしまいましたが >>37 マシになったじゃん このくらいならとりあえずは書けてる 多分プログラム初めて間もないと思うから全方向に知識伸ばすしかねーわな うん、中高生くらいならこのくらいかければ十分だと思う。 無理にググったよくわからない簡略化した実装をコピーしてくるのではなく、 稚拙ながらちゃんと自分で考えて作ってるっぽいところがいいね。 がんばってね。 >>38 ありがとうございます そうですよね でもがっかりさせて申し訳ないんですが、PCでプログラミングするようになって もう5年くらい経つんですよ…独学ではありますが じゃんけんとか簡易なコードばかり書いている内に歳だけ取ってしまった感じです まあそれはそれとして、GitHubに時々新しく書いたコードをアップするかも しれないので、もし時間があるようでしたらたまにチェックして貰えると幸いです >>39 すいません、中高生ではなく中高年です… それでも一応頑張るようにします レスありがとうございます >>40 なるほどね、 じゃあこういう種類のゲームを作るほうのスキルを上げたいってことでいいのかな この手のものはクラスをきっちり書く人もいるんだけど、 もう少し先入観を破壊するように短いコードを探していくと良いと思うよ そうしないとトランプとかボードゲーム系は短く書ける人なら非常に短く実装するのに、それを何百行で実装するっていうの続けてたら差が埋まらない https://i.imgur.com/Z0GoQpQ.jpg この本がオススメ(amazonリンク張れないから画像でw) あと読まなくても良いが歴史的なLisp読み物 http://www.asahi-net.or.jp/ ~kc7k-nd/onlispjhtml/ これはLispを使えっていうのんじゃなくメタプログラミングを覚えろってことだ アップしたソースコードの中に全く見られないのが言語内言語(DSL)っていう考え方 この種類のプログラムはメタプログラミングの考え方やアイデアがあったほうが簡潔になる githubは暇があったら見るよ >>41 それは大変失礼。 画像生成AIブームに乗って最近pythonに興味を持った感じかな。 C系か古いJava系臭がするので、もっとpythonを使っている 意味のあるコーディングをするといいよ。 >>42 リンクやアドバイスありがとうございます 元々はコードが書ける仕事ならどの分野でもいいかなと思ってたんですが、 ちょっとしたゲームを練習で書いてる内に、ゲーム制作も楽しいんじゃないかと 思い始めました メタプログラミング難しそうですね >>43 いえいえ アドバイスありがとうございます うーんまあPythonが一番流行りかなと思って始めました 大学の時に授業でCをやって、5年前くらいから最近までJavaをやってましたので その影響かと思います 5年Javaやっててこれか。 M銀行案件でJavaといいつつノンプロ単純作業労働者してた? 馬鹿にしていると思うのは、お前自身が見下してるからだろ? そうでなけりゃ馬鹿にされることという認識すらないはずだからな。 >>46 えーとですね、>>40 にも書いた通り独学です 仕事は…世間でいう所の無職ですね 障害者施設に通っています >>47-48 いや、社会に出ればどのみち厳しい評価は下るのですから、今からズバズバ 言ってくれた方が却って助かります >>46 日本のIT職としては違和感ないコードだろw もしかして自己評価高いタイプ? えっ?趣味なら別にすきにすればって話だけど、業務でこれは追放レベルだろ 障害者が独学で趣味でやってるならこのレベルで十分でしょ。 別にこれでpython経験者を名乗ってフリーランスになろうって 言うんじゃないんだからムキになんなよ。 っつーか、pythonで書かれてるけどpythonのコードじゃないわなw 作法や便利機能覚えて精錬されていくのはこれからだろ。 ほぼ憶測で言うけど入門書の一番最後に乗ってたゲームサンプルの改造だろ 言語の入門書の最後にこの手のゲームサンプル載せて締めくくる本はよくあるし そういうのは言語の基礎的な機能だけで書く事が目的だから高級機能が出てこない NumPyないと何もできない雑魚になるよりはまし。 最初は基本から。 苦しい事難しい事大嫌いで高級機能使いまくりのキディは腐るほどいるしな ちょっとセンスのある中高生なら100時間もあれば出来上がりそうなIT人材() かといってNumPyも使えないのにpython案件に応募してこられても困る というかpipも知らないやつとかマジでいるからな いくつ便利なフリーモジュール知ってるかなんてネットではイキれても業務じゃ何の役にも立たないよ インストール許可されねーよw ってのがニートにはわからないよね >>58 煽りじゃないんだけど、フリーモジュール使わないで pythonで業務で何作ってるの?マジで知りたい。 そんなんいくらでもあるだろw ゴミくずニートは社会経験ないからフリーモジュールなんてほとんど許可されないなんていう常識すら知らんらしいwww 業務でNumPyなんてニートの妄想力は怖いなぁwwwwwww あれだろ、pip installはNGだけどRHELでyum installで提供されてるのは大丈夫みたいなのだろ? RHELがどこまでサポートしてるのかは知らんけど >>51 甘くないですね… >>53 マジですか… >>54 ブラックジャックという題材は割と使われるみたいですが、 コード自体は完全オリジナルです 今自分の力ではどのくらいのものが書けるのか試してみたいと思いまして >>57 NumPy使えるようにしておきます NumPyってのは例えだよ pythonの開発では目的に適うモジュールをどれだけ知っていて どれだけ早く目的を達成できるコードを低コストで書けるかが重要 >>66 さんはニートではないと信じています 貪欲に知識をつけていきたいと思います >>36 def f(a , score) = [1,11].repeated_combination(a).map{_1.sum+score}.&([*1..21]).max 面白いロジックだから何となく短くしてみたんでメモ代わりパピコ 言語によっては総当たりで出力した配列すべてに[score]を足す [1,11] + [socre] => [1,11,score] みたいな っていう処理を簡潔に書けそうな気するけど rubyの非標準機能になっちゃうな >>68 それに加えてモテないってね。 プログラマの遺伝子はもっと残って欲しい。 今現在も荒らし継続中 こんなことないからか しかし 冷静に見ることがバレることじゃないやろ 出てこないな GC2、3作がまあまあウケただけだろ どっちもだな たまに食べるのが無能過ぎるだけやろ 人のメダルが見られるお食事とかDOI前にスピンしても read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる