C言語でポーカーを作っているんですが その2

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
南瓜

Re:C言語でポーカーを作っているんですが その2

#101

投稿記事 by 南瓜 » 15年前

ookamiさん、わかりました

一応、判断する時の形らしきものは出来たのですが
同じ23456でも並びが異なる23456(35462とか)は
ストレートと判断されない凡庸性なしの書き方になってしまいました…

数字の記憶とは、int n = 2;みたいな(数字を宣言する)認識よりも
言葉通りに数字を(新たな変数とかに)記憶させるという認識が正しいのでしょうか?

たいちう

Re:C言語でポーカーを作っているんですが その2

#102

投稿記事 by たいちう » 15年前

> 一応、判断する時の形らしきものは出来たのですが
> 同じ23456でも並びが異なる23456(35462とか)は
> ストレートと判断されない凡庸性なしの書き方になってしまいました…

まず凡庸と汎用の意味を辞書で調べましょう。これでは話が通じません。

35462への対応はもちろん考えていますが、これは次のステップです。
次のステップに進む前に、今のステップをもう少しきれいにしましょう。
判定にforループを使えませんか?


たいちう

Re:C言語でポーカーを作っているんですが その2

#104

投稿記事 by たいちう » 15年前

> 国語力を鍛えねば(笑)…

笑いごとではなく、国語力はもちろん英語力も必要ですよ。
でも、その根底にあるのは論理的に思考する能力です。

で、添付されたプログラムは、ストレートを判定できるのですか?

南瓜

Re:C言語でポーカーを作っているんですが その2

#105

投稿記事 by 南瓜 » 15年前

あのままでは、判定できないのでこっちで出来るようにしました
判定基準はフラッシュと同じ仕組みです

たいちう

Re:C言語でポーカーを作っているんですが その2

#106

投稿記事 by たいちう » 15年前

次は、23456と34567のどちらでもストレートと判定できる
ようにしてください。

南瓜

Re:C言語でポーカーを作っているんですが その2

#107

投稿記事 by 南瓜 » 15年前

お待たせしました
順番がバラバラ(35246とか)かエースをまたぐ(10JQKA)以外の
ストレートなら判断出来るようになりました

たいちう

Re:C言語でポーカーを作っているんですが その2

#108

投稿記事 by たいちう » 15年前

頑張ってますね。
次は35246を判定しましょう。
No:52248を読み返してください。

南瓜

Re:C言語でポーカーを作っているんですが その2

#109

投稿記事 by 南瓜 » 15年前

ソートにも多くのやり方があり驚きましたが
今の自分でも理解できそうで、処理にも影響がでないであろう
バブルソートにしました。

順番がバラバラのパターンで、あとすることは
最小値をn_handの添字にどうすれば組み込めるか、
と考えていますが、解決するにはバブルソートを完全に
理解する必要があるのかな?

またゲーム作りでソートを利用する際、(ジャンルや規模によって違うでしょうが)
バブルソートはどこまで通用するものですか?

Ma

Re:C言語でポーカーを作っているんですが その2

#110

投稿記事 by Ma » 15年前

シューティングで毎フレームソートするっていうんじゃないなら、O(n^2) のソートでさえもOKです。
あるいは、推定の起動する環境がめちゃくちゃ古いPCでない限り。
今回のような、たまにソートする必要があるだけなら、どんなソートでもあまり気にする必要はないとおもいます。
でもこだわるなら早く処理できるコードのほうが好ましいでしょうが。 画像

たいちう

Re:C言語でポーカーを作っているんですが その2

#111

投稿記事 by たいちう » 15年前

ソート前後でカードを表示してください。
正しくソートできていますか?


> と考えていますが、解決するにはバブルソートを完全に
> 理解する必要があるのかな?

ライブラリを利用することにすれば、ライブラリの利用方法のみ
知っておけば、中身を理解する必要は必ずしもありません。
当然ですが、自分のプログラムでライブラリをどのように使うかは
完全に理解しておく必要があります。

ポーカーの役判定のプログラムと比較すれば、
バブルソートの方がよほど簡単なので、
手を抜かないことをお勧めします。
難しいようならば、ソートするだけのプログラムを作ってはどうですか?

南瓜

Re:C言語でポーカーを作っているんですが その2

#112

投稿記事 by 南瓜 » 15年前

ソートの前後を表示させたんですが、正しく出来てると思います
表示上は…
49行目のストレートの判断方法のn_hand == 1+i+k;
のn_handは、ソートされた後ではなくソート前の値を
参照してストレートを判断してるんだと判ったんですが
だったらn_handの添字に最小値を組み込むんじゃなくて
最小値自体を記憶させて、それを元に判定した方がいいのか?
書いてて分け判らなくなってきたな…

たいちう

Re:C言語でポーカーを作っているんですが その2

#113

投稿記事 by たいちう » 15年前

ソートの前後に↓を入れて確認してください。
for(i = 0; i < 5;  i++) {
    printf("%s - %s ", mark[m_hand], number[n_hand]);/* 五枚のカードを表示 */ 
}

南瓜

Re:C言語でポーカーを作っているんですが その2

#114

投稿記事 by 南瓜 » 15年前

確認した結果、ソートはうまくいってました
となると判断基準ですが、最小値の(位置?)判断の仕方がわかりません

たいちう

Re:C言語でポーカーを作っているんですが その2

#115

投稿記事 by たいちう » 15年前

> 確認した結果、ソートはうまくいってました

ソートの前後に表示された結果をここに貼ってください。
何でしつこく確認を求めていると思いますか?

南瓜

Re:C言語でポーカーを作っているんですが その2

#116

投稿記事 by 南瓜 » 15年前

あなたの手札は
42531
&#9829; - 5 &#9830; - 3 &#9824; - 6 &#9827; - 4 &#9827; - 2 
12345
&#9829; - 2 &#9830; - 3 &#9824; - 4 &#9827; - 5 &#9827; - 6 
&#9829; - 2 &#9830; - 3 &#9824; - 4 &#9827; - 5 &#9827; - 6 
error
error
error
error
error
他の役
実はうまくいってなかったのか?

南瓜

Re:C言語でポーカーを作っているんですが その2

#117

投稿記事 by 南瓜 » 15年前

ソートの自力での解決が困難なため
ペア系の判定で出来る所までやりました

ドラ

Re:C言語でポーカーを作っているんですが その2

#118

投稿記事 by ドラ » 15年前

>ソートの自力での解決が困難なため
ソートのロジックが間違っているのではなくn_hand配列のみソートしてしまったので、
n_hand配列とm_hand配列の同じ添字の要素には同一カードの数字とマークの情報が
分割して格納されているという大前提が崩れているのですよ。
そのため手札の表示でバグっているのですが、気付かないのですか?


>for(i = 0; i < 5; i++) {
> if(n_hand[0] == n_hand){
> flag_p++;
> }
>}
flag_p は n_hand[0]と同じ数字のカードを何枚持っているかでしょう?
この情報だけで役判定できますか?


>for(i = 0; i < 5; i++) {
> if((n_hand[2] == n_hand[3]) || (n_hand[3] == n_hand[4])) {
> flag_two++;
> }
>}
for文内でiを使っていないのに5回繰り返す意味が分からない・・・


役判定は同じ数字のカードを何枚ずつ持っているかという情報を作ってから
やった方が簡単になると思いますがどうでしょうか?

後、処理を機能ごとに関数に切り分けていくという事を覚えた方がよさそうです。
 

南瓜

Re:C言語でポーカーを作っているんですが その2

#119

投稿記事 by 南瓜 » 15年前

言われて気づけば、マークがまったく変わってなかったorz
書き直したので、表示はまともになりました

ツーペアの所は意味が無い事に気づいて書き直したんですが、投稿したやつは
直す前の方でした

>役判定は同じ数字のカードを何枚ずつ持っているかという情報を作ってから

とは例えばフォーカードなら for文を書かないで
if(((n_hand[0]==n_hand[1])&&(n_hand[0]==n_hand[2])&&(n_hand[0]==n_hand[3]))||
        ((n_hand[1]==n_hand[2])&&(n_hand[1]==n_hand[3])&&(n_hand[1]==n_hand[4])))
という風に書けばいいんでしょうか?

ヘッダーファイルを使いこなせれば、すっきりして判りやすくなりますよね
役の判断が出来てからヘッダーファイルを使って分割しようと思います

たいちう

Re:C言語でポーカーを作っているんですが その2

#120

投稿記事 by たいちう » 15年前

> とは例えばフォーカードなら for 文を書かないで

例えば int buf[13]; という配列を用意して、
2, 3, 4, 4, 5 のワンペアの場合、

buf[1] = 1;
buf[2] = 1;
buf[3] = 2;
buf[4] = 1;
(後は全部0)

となるように数えておく、ということでしょう。
その後に判定です。
(フルハウスの判定は先にした後で、)2が1つみつかったらワンペア。


> ヘッダーファイルを使いこなせれば、すっきりして判りやすくなりますよね

まず使うべきなのは関数です。
ヘッダーファイルを使わなくても関数は使えます。

閉鎖

“C言語何でも質問掲示板” へ戻る