C言語でトランプゲー ..
511:デフォルトの名無しさん
07/10/08 00:14:26
>>510
そこで得られた確率を、>>281の思考ルーチンに突っ込むの。
要するに、>>500は認知、>>281で判断。
>他のプレーヤーの持ち枚数とかは何か考慮している?
当然。相手が一枚しかないなら、階段出せば相手は嫌でもスルーだし。
512:デフォルトの名無しさん
07/10/08 00:54:04
>281
404 Not Found
513:デフォルトの名無しさん
07/10/08 13:07:10
今度こそ誰もいないな
514:デフォルトの名無しさん
07/10/08 13:10:33
うむ
515:127
07/10/08 20:52:17
誰もいないようなのでしばらく独り言をば
まずケースに入ったトランプを用意しよう。
ケースの中にはトランプが順番に入っている。
A,2,3,…Q,Kのランク順でスペード,ハート,ダイヤ,クラブのスート順だ。
誤解のないように例を出すと,スペードのKの次はハートのAになる。
またクラブのKの次にはJOKERが二枚入っている。
この計54枚のカードを使ってゲームをするわけだ。
516:デフォルトの名無しさん
07/10/08 20:55:29
ほほう、それで
517:デフォルトの名無しさん
07/10/08 21:34:11
構造体で作ったらあと楽じゃない?
518:127
07/10/08 21:40:59
私以外まだ誰もいないようだが話を続けよう。
さて,大富豪というゲームを君たちは知っているかな?
1970年代に日本のトーキョーで生まれたとされ,かつては大貧民と呼ばれたゲームだ。
プレイヤーは複数で,ゲームの最初に彼らに等しくカードを全て配る。
等しくと言ってもプレイヤーの数によって端数が出る。
端数の処理の方法はいろいろあるが,今回は端数を気にせず最後まで順に配り終えることにしよう。
おっと,言い忘れたが,今回シャッフルはしない。
519:デフォルトの名無しさん
07/10/08 21:53:09
まだ君以外誰一人とここにはいないので、
そのまま話を続けましょう
520:127
07/10/08 22:43:16
各プレイヤーは自分に配られたカードの中から
役―1枚,2枚以上の同位札,もしくは3枚以上の同一スートによるシーケンス(※注:連番)―を作り,順次場に出していく。
持っているカードが無くなれば,あがりとなってプレイの輪から抜けることができる。
残りのプレイヤーが一人となった時点で1ゲーム終了となり,あがりとなった順に順位が決定する。
最後に残ったプレイヤーは最下位だ。
場とは役を出す場所であり通常1ゲームに複数の場が作られるが同時に複数の場は存在できない。
場が破棄されることを場が流れると言い,場が流れたあとは新しい場が1つ作成される。
ゲーム開始時に最初の場が1つ作成される。
場に最初に役を出すプレイヤーを親と呼び,その場に出すことの出来る役の種類を決定できる。
最初の場の親を決定する方法は,これも様々な方法があるが,今回はダイヤの3を配られたプレイヤーとする。
カードは3が最も弱く,続いて4,5,…,Q,K,ときてA,2の順に強くなる。
そしてJOKERは2より強く,またワイルドカードとしても使用できる。
カードの強さに遵って役の強さが決まり,場に出す役は場の役―最後に場に出された役―より強くなければならない。
出せる役がない場合はそのプレイヤーはパスとなり次のプレイヤーの番となる。
場のプレイヤー―場の役を出したプレイヤー―以外のプレイヤーが全てパスとなったとき,
その場は流れ,そのプレイヤーが次の場の親となる。
場のプレイヤーがあがりとなり,かつ残りのプレイヤーが全てパスとなったとき,
その場は流れ,そのプレイヤーの前に場のプレイヤーであってまだあがりでないプレイヤーが次の場の親となる。
基本的なルールはこんなところだ。
何か質問は?
では次回。
521:デフォルトの名無しさん
07/10/09 01:24:26
革命ルールはござらんのか!
CPUの人間的思考の実装方法はまだか!
522:デフォルトの名無しさん
07/10/10 01:12:11
基本戦術
既に場に出ているカードを覚える
Q以上のペアは強い
2はペアで使うよりも1枚ずつで2回使った方が有利
崩すときはなるべく強いペアをくずす
特に、弱いペアは絶対崩してはいけない
シークエンスは、原則として弱い(10以下)ものの方が使いやすい
4枚以上のシークエンスは強い
3枚組とシークエンスが複合している場合は、シークエンス+ペアが鉄則
強いもので、特にペアと複合している場合(例:K、A,A,2)は、むしろばらした方が強い
シークエンスとペアが複合している場合は、状況に応じて、使い分ける
ペアが一組(例:6,7,7,8)ならば、シークエンス優先
ペアが二組(例:6,6,7,8,8)ならば、微妙
ペア3組(例:6,6,7,7,8,8)ならば、ペア優先
523:127
07/10/13 18:56:32
ここにはもう誰もいないのだ
524:デフォルトの名無しさん
07/10/13 18:56:53
阻止
525:127
07/10/13 22:52:16
そして誰もいなくなった
526:デフォルトの名無しさん
07/10/13 22:52:48
阻止
527:127
07/10/13 23:00:25
プログラマーには精神病を患う者が多いと言われるが
その病状の一つに自分が誰かに監視されているといった妄想がある
そうここには
誰もいない
誰もいない
誰もいない
528:デフォルトの名無しさん
07/10/13 23:09:56
ものすごく寒いことになってるね
529:127
07/10/13 23:45:04
自分の内には誰もいない
従って自分の外にも誰もいない
誰かがいるという幻想こそが
不幸の根源なのだ
530:デフォルトの名無しさん
07/10/13 23:46:18
みょん
531:デフォルトの名無しさん
07/10/14 00:26:02
リアルタイムで中二病患者を見たのは久しぶりだわ
532:127
07/10/14 09:51:02
このスレに誰もいませんよ
533:127
07/10/14 22:38:02
誰もいないことを確信した
534:デフォルトの名無しさん
07/10/14 22:55:39
これが噂の、かまってちゃんか
535:127
07/10/14 23:08:35
誰もいないということを疑う余地はない
536:127
07/10/14 23:22:38
誰も居なかった
537:デフォルトの名無しさん
07/10/15 12:56:27
そんなことより、大富豪作りやがれ
538:127
07/10/15 19:47:08
何故誰もいないのか
実は疑問がないわけではない
539:デフォルトの名無しさん
07/10/16 01:33:22
ほほう、それで
540:127
07/10/16 03:00:00
さて誰もいなくなったところでそろそろ本編をば
最初はシンプルに行こう。
ややこしいことは無しだ。
プレイヤーの数は5人とし,全て同じAIを使用する。
カードは1デッキとジョーカー2枚の計54枚とし,毎回ゲームのはじめにシャッフルする。
初回は最初に登録されたプレイヤーからディールする。
そしてダイヤの3を持ったプレイヤーを最初の場の親としてゲームを開始する。
初回以降は前回最下位のプレイヤーの次のプレイヤーからディールする。
そして前回最下位のプレイヤーを最初の場の親としてゲームを開始する。
役はシーケンスが3から5枚,同位札が2から5枚,そして1枚札,とする。
AIが場の親のとき,シーケンス,同位札,1枚札,の順に,枚数のより多い役のうち,弱い役から出していく。
AIが場の親でないとき,場の役と同種でより強く,かつ手持ちのカードで作れる最も弱い役から出していく。
またジョーカーをワイルドカードとして使用可能なときは使用する。
同様にジョーカーを同位札,または一枚札として使用可能なときは使用する。
541:デフォルトの名無しさん
07/10/16 15:47:13
最初でシンプルに行くなら、
・人数は2人でジョーカーは無しで52枚
・始める人も固定、順番も同じ
・カードのシャッフルなんてしない
辺りが適切では無いか?
流れをまず作って、他は後から付け加えると楽ジャマイカ?
542:127
07/10/16 18:11:36
仮に誰かがいたとしても
誰であるかも分からないのに
誰かがいるという認識が間違いでないと
どうして言えよう
543:デフォルトの名無しさん
07/10/16 19:11:11
その微妙なコテハンはなんだい?
544:127
07/10/16 20:35:00
ここで面白いのは自己と他者の区別は
(厳密にはそうではないが実用上)
自己の認識に委ねられているということだ
すなわちそれが自分の書いたものであるという記憶によってのみ
自己の他者との境界を認識しうるのである
加えてそれが自分の書いたものであるという証明が自助努力の範囲内において不可能であるが故に
誰もその存在を主張する以上のことはできず
したがってここには誰もいないという認識を誰も否定することは出来ないのである
「匿名非同期コミュニケーションの真実(非売)」より引用
545:127
07/10/16 20:39:27
じゃあ俺も
546:127
07/10/17 21:12:19
そうこうしているうちに
本当に誰もいなくなってしまった
547:デフォルトの名無しさん
07/10/18 02:56:09
文字列に強さを持たせるのがわkらん
548:127
07/10/18 03:04:03
さてそろそろ続きをば
シンプルという点に疑問の余地ありとの意見だが,
たしかに上記のルールでは各ゲームごとの独立性が不十分であり,
出発点とするには不適切かもしれない。
そこで,ディールの開始プレイヤーと最初の場の親に関するルールについて検証してみよう。
まず以下のことについて確認しておく。
全てのプレイヤーが同一のアルゴリズムに従ってプレイするとき,
その結果は各プレイヤーの持ち札と最初の場の親によって一意に決定される。
ここで,各プレイヤーの持ち札と最初の場の親が完全にランダムに決定されるとき,
任意のプレイヤーが任意のランクになる確率は等しくなる。
549:デフォルトの名無しさん
07/10/18 03:07:49
こんな大袈裟に気持ち悪いレスで熱弁してるくらいだから、さぞ素晴らしいものを作ってくれるんだろうな
550:デフォルトの名無しさん
07/10/18 03:21:54
口だけ野郎の典型的パターンに何を期待してるんだよ
551:127
07/10/18 04:11:40
私は私が常に不真面目であることを知っている
故に私は私の言葉を全く信用していない
今回は,ゲーム回数を一万回とし,各ゲームでの各プレイヤーのランクを記録した。
プレイヤーをTestA,TestB,TestC,TestD,TestEの順に登録した。
ランクは0から4までの値であり,値のより大きいランクを上位とする。
1.
各ゲームのディールの開始プレイヤーをローテーション制に
各ゲームの最初の場の親をダイヤの3を持つプレイヤーにした場合
結果を以下に示す。
行を各ゲームのランク,列をそのゲームの次のランクとし,該当するゲームの回数を計測した。
また各ランクとなったゲームの回数を計測し,これを列Totalに示す。
括弧内の数値は各行の各計測値を各行のTotalの値で割った値である。
これは現在のランクが決定しているとき次回のランクへ遷移する統計的確率を表す。
********************** Players Record (PlayCount=10000) ***********************
___________________________ Player TestA Record ___________________________
(省略されました・・全てを読むことはできません)
___________________________ Player TestE Record ___________________________
[0](-----) [1](-----) [2](-----) [3](-----) [4](-----) Total
[0] : 398(0.201) 389(0.196) 398(0.201) 409(0.206) 390(0.197) 1984
[1] : 387(0.195) 401(0.202) 357(0.180) 430(0.217) 406(0.205) 1981
[2] : 406(0.199) 425(0.208) 426(0.209) 391(0.191) 394(0.193) 2042
[3] : 418(0.209) 339(0.169) 460(0.230) 379(0.189) 408(0.204) 2004
[4] : 374(0.188) 428(0.215) 401(0.202) 395(0.199) 391(0.197) 1989
552:127
07/10/18 19:43:52
自分が本当に理解しているのは過去の自分だけである
おっと言い忘れたが,最初のゲーム開始時のプレイヤーのランクは全て0だ。
それから連番は1.ではなく(1)に訂正する。
さて上記の結果からは,Totalの値が全て2000付近であることが分かる。
ゲーム回数は10000であるから各ランクになる確率は等しく1/5ということになる。
つまり,勝負は完全に時の運ということだ。
更に,各ランクから各ランクへの遷移確率も全て0.2付近である。
つまり,現在のランクと次のゲームのランクとの相関はないということを意味する。
大富豪がゲームとして成立するには
人間の感情的な部分を考慮し,それをある程度実現するルールが必要である。
(a)誰も最下位にはなりたくない。最下位になったとしたら出来るだけ早く最下位を脱したい。
(b)誰もが一番になりたい。一番になったとしたら出来るだけ長く一番であり続けたい。
この二つを実現するルールは既に存在する。
それらについて統計的確率の側面から検証してみよう。
553:127
07/10/19 20:37:11
誰もいないか
554:デフォルトの名無しさん
07/10/19 23:59:32
いるけど
555:デフォルトの名無しさん
07/10/20 00:17:55
いないか
556:127
07/10/20 00:18:51
誰もいないと言ったのだ
557:127
07/10/20 00:46:36
さてと
Totalの各値をゲーム回数10000で割った値をランク率,カッコ内の値をランク遷移率と呼ぶことにする。
(2)
各ゲームのディールの開始プレイヤーを最初に登録されたプレイヤーに固定し
各ゲームの最初の場の親をダイヤの3を持つプレイヤーにした場合
結果を以下に示す。
********************** Players Record (PlayCount=10000) ***********************
___________________________ Player TestA Record ___________________________
(省略されました・・全てを読むことはできません)
___________________________ Player TestE Record ___________________________
[0](-----) [1](-----) [2](-----) [3](-----) [4](-----) Total
[0] : 411(0.206) 407(0.204) 416(0.209) 368(0.185) 389(0.195) 1991
[1] : 377(0.193) 380(0.195) 363(0.186) 400(0.205) 432(0.221) 1952
[2] : 385(0.196) 374(0.190) 401(0.204) 407(0.207) 402(0.204) 1969
[3] : 399(0.199) 408(0.204) 362(0.181) 421(0.210) 411(0.205) 2001
[4] : 418(0.200) 383(0.184) 428(0.205) 405(0.194) 453(0.217) 2087
ディールの開始プレイヤーを最初に登録されたプレイヤーに固定した場合,
54 = 11 * 4 + 10
より最後に登録されたプレイヤーの持ち札が常に他のプレイヤーの持ち札より一枚少なくなる。
もしディールの開始プレイヤーがゲームの勝敗に影響するならば,
(1)の場合と比べてプレイヤーTestEの勝敗に偏りが生じると予想される。
この結果からはプレイヤーTestEのランク率及びランク遷移率に顕著な変化は認められない。
よってディールの開始プレイヤーの決定に偏りが生じてもゲームの勝敗に影響しないと言える。
558:127
07/10/20 15:21:54
今日も誰もいない
当たり前か
559:デフォルトの名無しさん
07/10/20 19:00:08
具体的なコードを出したまへ
560:127
07/10/20 20:22:05
誰かがいるということがそれほど重要だろうか
(3)
初回ゲームのディールの開始プレイヤーを最初に登録されたプレイヤーに
初回ゲームの最初の場の親をダイヤの3を持つプレイヤーに
初回以降のゲームのディールの開始プレイヤーを前回のゲームの最下位プレイヤーの次のプレイヤーに
初回以降のゲームの最初の場の親を前回のゲームの最下位プレイヤーにした場合
結果を以下に示す。
********************** Players Record (PlayCount=10000) ***********************
___________________________ Player TestA Record ___________________________
(省略されました・・全てを読むことはできません)
___________________________ Player TestE Record ___________________________
[0](-----) [1](-----) [2](-----) [3](-----) [4](-----) Total
[0] : 129(0.064) 264(0.131) 429(0.214) 550(0.274) 637(0.317) 2009
[1] : 509(0.255) 433(0.217) 365(0.183) 381(0.191) 307(0.154) 1995
[2] : 458(0.232) 433(0.220) 371(0.188) 391(0.198) 319(0.162) 1972
[3] : 473(0.229) 439(0.212) 417(0.202) 373(0.180) 365(0.177) 2067
[4] : 439(0.224) 426(0.218) 390(0.199) 373(0.191) 329(0.168) 1957
この結果からはランク遷移率に明らかな偏りが認められる。
ランク0のランク遷移率は遷移先のランクと正の相関がある。
その他のランクのランク遷移率は遷移先のランクと負の相関がある。
ランク0はより高いランクへ遷移しやすくその他のランクはより低いランクへ遷移しやすいと言える。
ランク0からランク0へのランク遷移率は最も低い。
(2)の結果よりディール開始プレイヤーは結果に影響しないことが分かっている。
よって「初回以降のゲームの最初の場の親を前回のゲームの最下位プレイヤーにする」というルールが
ランク遷移率に偏りが生じた原因であると考えられる。
561:デフォルトの名無しさん
07/10/21 00:27:12
わっふるわっふる
562:デフォルトの名無しさん
07/10/22 20:57:59
わっふるわっふる
563:デフォルトの名無しさん
07/10/23 00:00:41
わっふるわっふる
564:デフォルトの名無しさん
07/10/23 17:33:02
わっふるわっふる
565:127
07/10/24 01:17:00
よし誰もいないな
566:デフォルトの名無しさん
07/10/24 01:32:17
みたいだな!
567:127
07/10/24 01:44:54
>>561-564
俺のスレ荒らすなボケ
568:127
07/10/24 02:05:51
誰もいないというのに誰に話しかけようというのだろうか
大富豪ではゲーム開始時に下位ランクのプレイヤーと上位ランクのプレイヤーとの間でカード交換を行うというルールがポピュラーである。
一般的に,下位ランクのプレイヤーを不利に,上位ランクのプレイヤーを有利にするルールであり,交換の方法にも様々な種類があるが,
ここでは,ランク0がランク4に手持ちの札のうち最強の札2枚を,ランク4がランク0に手持ちの札のうち最弱の札2枚を,
ランク1がランク3に手持ちの札のうち最強の札1枚を,ランク3がランク1に手持ちの札のうち最弱の札1枚を与えることにしよう。
(4)
各ゲームのディールの開始プレイヤーをローテーション制に
各ゲームの最初の場の親をダイヤの3を持つプレイヤーに
初回以降のゲーム開始時にカード交換を行った場合
結果を以下に示す。
********************** Players Record (PlayCount=10000) ***********************
___________________________ Player TestA Record ___________________________
(省略されました・・全てを読むことはできません)
___________________________ Player TestE Record ___________________________
[0](-----) [1](-----) [2](-----) [3](-----) [4](-----) Total
[0] : 377(0.190) 522(0.263) 612(0.308) 338(0.170) 135(0.068) 1984
[1] : 285(0.140) 508(0.250) 558(0.275) 431(0.212) 247(0.122) 2029
[2] : 400(0.197) 434(0.214) 440(0.217) 434(0.214) 322(0.159) 2030
[3] : 509(0.261) 332(0.170) 263(0.135) 399(0.205) 448(0.230) 1951
[4] : 412(0.205) 233(0.116) 158(0.079) 349(0.174) 854(0.426) 2006
この結果からはランク遷移率に明らかな偏りが認められる。
ランク0とランク1とランク2ではランク4への遷移率が最も低く,ランク3とランク4ではランク2への遷移率が最も低い。
ランク0とランク1とランク2ではランク2への遷移率が最も高く,ランク3ではランク0への遷移率が最も高く,
ランク4ではランク4への遷移率が最も高い。
(1)の結果よりカード交換がランク遷移率に偏りが生じた原因であると考えられる。
569:デフォルトの名無しさん
07/10/24 06:42:27
>>788
これがエラーメッセージです。
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
at java.util.LinkedList$ListItr.next(Unknown Source)
at $2.actionPerformed(Unknown Source)
at javax.swing.Timer.fireActionPerformed(Unknown Source)
at javax.swing.Timer$DoPostEvent.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
570:デフォルトの名無しさん
07/10/24 11:52:18
誤爆の上にjavaのスタックトレース全貼りか
571:デフォルトの名無しさん
07/10/24 18:19:19
良スレあげ
572:デフォルトの名無しさん
07/10/25 01:30:07
カードを構造体でメンバをマークと数字の二つを作って数字だけ比較するってやり方でいこうかと思ったら構造体
を理解してない俺には無理だった
573:デフォルトの名無しさん
07/10/25 03:46:40
構造体を理解していないのにどうして構造体で実装しようと思い立ったんだ?
574:デフォルトの名無しさん
07/10/25 07:54:27
「構造体という素敵なものがあるらしい」
という程度の認識はあったからじゃね?
放射線とかよく分からないけど原発は欲しいよね、素敵だね、みたいな。
575:デフォルトの名無しさん
07/10/25 08:51:55
そうだねプロテインだね
576:127
07/10/25 11:32:34
うんこー
577:127
07/10/31 20:01:52
誰もいない
それが真実であり現実だと認めたくない心が私の甘さの元凶だ
夢で終わると分かっている夢は語る価値を持たない
目的は果たされるべきだ
578:127
07/10/31 20:04:46
うんこ
579:デフォルトの名無しさん
07/10/31 20:07:32
オナニーしたい
580:127
07/10/31 20:09:14
おっとコテ忘れ
581:579
07/10/31 20:21:21
去ね
582:579
07/10/31 20:22:01
アンカー忘れた
>>880
去ね
583:579
07/10/31 21:24:01
アンカー間違えたw
>>580
去ね
584:579
07/10/31 21:53:13
>>581-583
おめー誰だよ
585:579
07/10/31 22:16:52
>>584
>>127乙
人の名を語るな去ね
586:127
07/10/31 22:25:53
と、自演してみた。
587:579
07/10/31 22:40:30
>>586
頭大丈夫かまじで
588:127
07/10/31 22:45:43
心配ありがとう^^
589:デフォルトの名無しさん
07/10/31 22:54:40
アホが来て一気に糞スレになったな
590:127
07/10/31 22:55:37
これからもがんばります^^
591:デフォルトの名無しさん
07/10/31 22:56:02
林先生に診てもらったら良いかもね
592:127
07/10/31 22:57:28
それはいい考えですね
593:579
07/10/31 23:08:53
まああれだ、正直すまんかった
594:デフォルトの名無しさん
07/11/01 23:10:21
大富豪のコンピュータで強いカードから出す、弱いカードから出す、ランダムに出す、
他に何か戦略ってある?
595:デフォルトの名無しさん
07/11/01 23:10:52
ゲーム製作板で聞いたら教えてあげるよ
596:デフォルトの名無しさん
07/11/01 23:50:36
>>594
誰にも負けない
597:デフォルトの名無しさん
07/11/02 00:48:15
大富豪は詰め将棋に近い感覚があると思う。
相手のカードが見えないので、もちろん運頼みの側面もあるのだが。
例えば手持ちカードが「899J22」とあって、今場のカードが6とかだったら、
8で切る
-> 9のペアを出す
-> 2のペアはまず他から出ないので自分で切る
-> Jを捨てて和了り
となるわけだ。
この状態の手持ちカードを、まあ「必至」と呼ぼうか。
もちろん相手の手札との絡みもあるので、確率的なものになると思う。
上の例で言えば、2のペアを持っている敵がいて、自分より先に出されてしまう場合もある。
自分以外のプレイヤーが4人いれば1/4の確率で2のペアを持っている奴がいるので、「75%の必至」みたいに自分の手札を評価できることになる。
まあジョーカーとか、ゲーム開始前のカード移譲とか色々あるのでややこしいとは思うが。
で、この考え方で行くと、プレイヤーのすべきことは、より高確率な必至を作れるカードの残し方を考えながら捨てていく、ということになる。
ということで、AIを作る場合には、残すカードを評価する評価関数を組み立ててやれば良いんじゃないかな。と酔っ払いの俺が思った。
598:デフォルトの名無しさん
07/11/05 12:41:24
ブーン
599:デフォルトの名無しさん
07/11/06 23:45:42
Java房の俺がちょっとずつC言語を勉強しながら書いてみる。
#define CARD_SUIT_SPADE 1
#define CARD_SUIT_HEART 2
#define CARD_SUIT_CLUB 3
#define CARD_SUIT_DIAMOND 4
typedef struct {
unsigned int suit;
unsigned int num;
} Card;
Card *newCard(unsigned int suit, unsigned int num) {
Card *card;
if(suit<1 || 4<suit) return NULL;
if(num<1 || 13<num) return NULL;
card = (Card *)malloc( sizeof(Card) );
card->suit = suit;
card->num = num;
return card;
}
疲れた。続きは明日。
600:デフォルトの名無しさん
07/11/07 00:53:27
日付が変わった。
this は C++ コンパイラで怖いか? self 借りとこ。
char CARD_NUM_SYMS[] = " A234567890JQK";
char CARD_SUIT_SYMS[] = " shcd";
char getCardNumSym(Card *self) {
unsigned int num;
if(self==NULL) return '\0';
num = self->num;
if(num<1 || 13<num) return '\0';
return CARD_NUM_SYMS[num];
}
getCardSuitSym(Card *self) {
unsigned int suit;
if(self==NULL) return '\0';
suit = self->suit;
if(suit<1 || 4<suit) return '\0';
return CARD_SUIT_SYM[suit];
}
601:デフォルトの名無しさん
07/11/07 01:02:42
戻り値の型書き忘れ。charだ。
602:デフォルトの名無しさん
07/11/08 21:35:22
SuitとNumをtypedefしとこ。先にやっときゃ良かった…
typedef unsigned int Suit;
typedef unsigned int Num;
void putCard(Card *self) {
printf( "%c%c", getCardSuitSym(self), getCardNumSym(self) );
}
char *getCardSym(Card *self, char buffer[], size_t bufsize) {
unsigned int i;
if(self == NULL) return NULL;
if(bufsize < 2) return NULL;
buffer[0] = getCardSuitSym(self);
buffer[1] = getCardNumSym(self);
for(i=2; i<bufsize; i++) buffer[i] = '\0';
return buffer;
}
603:127
07/11/09 19:49:53
結局誰もいない
(5)
初回ゲームのディールの開始プレイヤーを最初に登録されたプレイヤーに
初回ゲームの最初の場の親をダイヤの3を持つプレイヤーに
初回以降のゲームのディールの開始プレイヤーを前回のゲームの最下位プレイヤーの次のプレイヤーに
初回以降のゲームの最初の場の親を前回のゲームの最下位プレイヤーに
初回以降のゲーム開始時にカード交換を行った場合
結果を以下に示す。
********************** Players Record (PlayCount=10000) ***********************
___________________________ Player TestA Record ___________________________
(省略されました・・全てを読むことはできません)
___________________________ Player TestE Record ___________________________
[0](-----) [1](-----) [2](-----) [3](-----) [4](-----) Total
[0] : 236(0.121) 401(0.205) 640(0.327) 461(0.236) 217(0.111) 1955
[1] : 173(0.087) 427(0.214) 665(0.333) 481(0.241) 253(0.127) 1999
[2] : 407(0.201) 450(0.222) 404(0.199) 408(0.201) 357(0.176) 2026
[3] : 578(0.294) 405(0.206) 194(0.099) 328(0.167) 463(0.235) 1968
[4] : 560(0.273) 317(0.154) 123(0.060) 290(0.141) 762(0.371) 2052
(以下略)
604:127
07/11/09 21:19:35
(5)の結果から何が分かるだろう。
下位ランクは中間ランクまでは容易に上がれ,そこから先は運次第。
上位ランクは上位であり続けるか下位に落ちるかのギャンブル。
そこで思い出して欲しい。
このゲームが生まれた1970年代の日本を。
当時は高度経済成長期から安定成長期への移行時期で,
終身雇用制度に基づく一億総中流といった考えが強かった時代だ。
成果主義も格差社会もまだ一般には登場していない。
これまでの実験結果によって明らかになった,
たった2種類のルールによってもたらされるゲーム性は,
そうした時代背景を反映しているとは言えないだろうか。
605:デフォルトの名無しさん
07/11/10 07:09:51
うだうだ独り言はキモイ
多くの新しい知を混ぜるためにage
606:127
07/11/10 07:24:54
誰もいなければ誰と戦おう
誰もいなければ誰を傷つけよう
誰もいなければ誰を滅ぼそう
607:599
07/11/10 07:31:43
>>604
プログラマならコードで語るもんだぜ。
と言うわけで 599 からコードを貼りつづける Java房な俺。
typedef struct {
size_t length;
Card *cards[256];
} Deck;
Deck *freeDeck(Deck *deck) {
unsigned int i;
for(i=0; i<256; i++) freeCard(deck->cards[i]);
free(deck);
return NULL;
}
Deck *newDeck() {
unsigned int i;
Deck *deck;
deck = (Deck *)malloc( sizeof(Deck) );
if(deck == NULL) return NULL;
deck->length = 0;
for(i=0; i<256; i++) deck->cards[i] = NULL;
return deck;
}
この後は Player と Game も構造体にする予定。
そーいや、1ゲームを Game にするとして、大貧民全体としての
何ゲームかセットにしたものは何て呼べば良いんだろ。
608:デフォルトの名無しさん
07/11/10 09:21:42
while( true ) {
printf(" ∩_\n");
printf(" 〈〈〈 ヽ\n");
printf(" 〈⊃ }\n");
printf(" ∩___∩ | |\n");
printf(" | ノ ヽ ! !\n");
printf(" / ● ● | /\n");
printf(" | ( _●_) ミ/ <こいつ最高にアホ\n");
printf(" 彡、 |∪| /\n");
printf("/ __ ヽノ /\n");
printf("(___) /\n\n"),
}
609:デフォルトの名無しさん
07/11/10 12:12:49
>608
オーケー、その案採用するぜ。まだ先だけど。
Card *pushCardToDeck(Deck *self, Card *card) {
if(self->length > 255) return NULL;
self->cards[self->length] = card;
self->length++;
return card;
}
Card *popCardFromDeck(Deck *self) {
Card *card;
if(self->length < 1) return NULL;
self->length--;
self->cards[self->length] = NULL;
return card;
}
Deck *makeDeck() {
Suit s;
Num n;
Deck *deck;
deck = newDeck();
if(deck == NULL) return NULL;
for(s=1; s<=4; s++) {
for(n=1; n<=13; n++) {
Card *c = newCard(s,n);
if(c == NULL) return freeDeck(deck);
if(pushCardToDeck(deck, c) == NULL) return freeDeck(deck);
}
}
return deck;
}
610:デフォルトの名無しさん
08/03/14 10:33:40
あ
611:デフォルトの名無しさん
08/03/14 10:54:17
空気読めない中二病のせいで誰も居なくなったスレだ
612: ◆PyIJyOzha6
08/04/27 00:50:45
test
613:デフォルトの名無しさん
08/05/12 06:48:03
あれ?終わり?どうせなら、ババ抜き、ポーカー、ブラックジャック、スピード、
7ならべ、大富豪(大貧民)、フリーセル、ソリティアくらい作ろうぜ?
614:デフォルトの名無しさん
08/05/12 15:10:52
>>613
ガンバレ!
615:デフォルトの名無しさん
08/05/12 17:23:56
JSでコマンドプロンプト用ソリティアとピラミッドならやったことある。
でもオブジェクト作りまくってるから
C言語には移植しづらいだろうなあ。
616:デフォルトの名無しさん
08/05/12 17:39:10
>>613
大富豪はやってみたい。まずは最後に2人になった時点の読み切りを考えると面白そう。
617:デフォルトの名無しさん
08/05/12 18:58:19
大富豪を作るのか
大富豪の思考ルーチンを作るのか
618:127
08/05/12 23:55:26
あれからもう半年
599氏は元気かな
619:127
08/05/14 06:28:57
おはようございます
620:127
08/05/17 21:27:44
結局誰もいなくなってしまった
自分で追い出しておいて何を今更というか
まさにそのとおりなんだけど
さてそろそろ再開するかな
621:デフォルトの名無しさん
08/05/21 13:46:07
その後、>127の姿を見た者はいない…
622:127
08/05/21 23:52:44
「実はまだその辺にいたりするのであった」
623:127
08/05/22 00:13:59
訂正
「実はまだその辺にいるのであった」
だな
624:デフォルトの名無しさん
08/05/22 00:16:49
>>622
二階じゃないんだから。
625:599
08/05/29 00:24:24
>618
すまない。飽きた。
626:デフォルトの名無しさん
08/06/29 06:19:48
よし、何か作ろうぜい!ババ抜き、7並べ、ブラジャックなら
コンピュータにショボイけどA.I機能を持たせて対戦ゲームを
作れそうな気がしてきた!
今、構造体にカードのスーツと数字を入れて、シャッフルするところまででけた!
627:デフォルトの名無しさん
08/06/29 08:15:36
よっしゃ、今度はプレイヤーの人数を決定して、カードを人数分
振り分けるところまで出来た!さぁ、ナニ作ろうか?
628:デフォルトの名無しさん
08/06/29 08:21:04
7ならべでよろしく。
ちょっとAIのアイディアがあるんで、思考エンジン部だけ簡単に追加できるようにしておいてくれ。
629:デフォルトの名無しさん
08/06/29 08:36:20
うっし、って、各プレイヤーに配布した後、並び替えるところに着手しようとしているところで
徹夜明けなんで寝まつ(^^; すまそ。
630:デフォルトの名無しさん
08/06/30 00:18:52
うおっ、せっかく作ったが、やはり仕様を変更しようってことで
書き直しまつ
631:デフォルトの名無しさん
08/06/30 17:26:13
がむばれ〜
632:127
08/07/12 23:55:35
626氏も結局いなくなってしまったようだ
モチベーションを維持するのって案外難しいね
633:デフォルトの名無しさん
08/07/13 04:43:15
こんなスレもあるくらいだから、なかなか難しいことなんだろうね
ゲームを作るやる気を維持するためには 3バルカン
スレリンク(gamedev板)
634:デフォルトの名無しさん
08/07/23 11:01:50
グランツーリスモのスタッフは年収1千万
URLリンク(www.polyphony.co.jp)
超優秀じゃなきゃ無理だけどw
3Dなら数学の研究者とかね
635:デフォルトの名無しさん
08/07/23 14:08:15
お、盛り上がってるなぁ
Cじゃなきゃ駄目か?
636:デフォルトの名無しさん
08/11/26 09:39:04
637:デフォルトの名無しさん
08/11/27 12:22:48
大富豪おもしろそう
やってみるか
638:637
08/11/30 23:30:31
だ、誰もいないのか!?
とりあえず、データ型は3から10、ジャック、クイーン、キングを整数の3から12として
Aと2は整数の13と14でいいか
強さの比較が楽で
ペアとかトリプルとか革命とか階段とか8切りとかどうやって処理させようか
完成するまでだれも来なかったりしてw
639:デフォルトの名無しさん
08/11/30 23:38:37
いや、「やってみるか」じゃ突っ込みようがないから。
640:637
08/11/30 23:49:24
いろいろロジック考えてるうちに実はCの勉強にはとってもいい題材ではないかと思えてきた
データ型、文字列の操作、構造体、関数、条件分岐、構造化やモジュール化、デバッグなどが全部学べる
641:637
08/11/30 23:53:59
あ、革命はすべてのカードの値に-1を掛ければいいのか
あれ?革命したあとでもジョーカーが最強だっけ?
642:デフォルトの名無しさん
08/11/30 23:56:31
できるかつまるかしてからおいで。
643:デフォルトの名無しさん
08/12/01 00:26:11
ksk
644:デフォルトの名無しさん
08/12/01 00:37:10
つWikipedia項目リンク
645:デフォルトの名無しさん
08/12/01 04:49:35
ゲ製でやれやクズども
646:デフォルトの名無しさん
08/12/02 02:01:44
>638
そんな話は 昔 >231 とかにあったよ
647:デフォルトの名無しさん
08/12/02 08:13:44
とりあえずcard構造体を宣言してみる。
648:デフォルトの名無しさん
08/12/02 09:30:05
>>647
そんな話が>>127にあったな・・・
649:デフォルトの名無しさん
08/12/02 14:04:24
まず、class suitを。
650:デフォルトの名無しさん
08/12/02 22:20:43
「C言語」なんだからclassはダメだろ。
構造体と、構造体を操作する為の関数くらいの構成で。
651:デフォルトの名無しさん
08/12/02 22:26:15
#define class struct
652:デフォルトの名無しさん
08/12/02 23:10:59
typedefの方がいい
653:デフォルトの名無しさん
08/12/03 18:43:54
無理だろ・・・
654:デフォルトの名無しさん
08/12/07 22:22:55
BASICで書かないか?
655:デフォルトの名無しさん
08/12/07 23:23:56
スレタイ
656:デフォルトの名無しさん
08/12/08 06:16:37
BASICて…もっとキツくないか?
657:デフォルトの名無しさん
08/12/19 15:10:13
VBでポーカー作ってるけど、ストレートの判別方法だけが難しい
誰か暇な人教えてください
658:デフォルトの名無しさん
08/12/19 15:42:53
自己解決しました。
Private Function isStreat(ByVal card() As Card) As Boolean
Dim sortedCard(4) As Integer
sortedCard(0) = card(0).Number
sortedCard(1) = card(1).Number
sortedCard(2) = card(2).Number
sortedCard(3) = card(3).Number
sortedCard(4) = card(4).Number
Array.Sort(sortedCard)
If sortedCard.Contains(13) And sortedCard.Contains(1) Then
If sortedCard(0) = 1 Then
sortedCard(0) = 14
End If
If sortedCard(1) = 2 Then
sortedCard(1) = 15
End If
If sortedCard(2) = 3 Then
sortedCard(2) = 16
End If
If sortedCard(3) = 4 Then
sortedCard(3) = 17
End If
Array.Sort(sortedCard)
End If
If sortedCard(0) + 1 = sortedCard(1) And sortedCard(1) + 1 = sortedCard(2) And sortedCard(2) + 1 = sortedCard(3) And sortedCard(3) + 1 = sortedCard(4) Then
Return True
End If
Return False
End Function
659:デフォルトの名無しさん
08/12/20 19:33:43
>658
K,A,2,3,4 はストーレートぢゃない
(ローカルルールなのかな?)
660:デフォルトの名無しさん
08/12/21 19:03:49
> ストレートにおけるAの取り扱い
>
> ストレート(およびストレートフラッシュ)では、AはKとも2ともつなげる事が出来る。
> すなわちA-2-3-4-5もA-K-Q-J-10もストレートとみなされる。
> しかしQ-K-A-2-3のようにK-A-2を含むものはストレートとはみなされない。
意外ト難シイノネ
661:デフォルトの名無しさん
08/12/21 19:08:07
あ、でも日本ポーカープレーヤーズ協会だと
> ストレート( straight )
> 5枚連続カード
> 例:5s 4d 3h 2s Ac
> なお、AとKは、連続しているとはみなされません。
> (例外として、AKQJT は、ストレートとみなされます。)
> 例えば、4h 3s 2d As Ks は、ストレートではありません。
か。どちらにしてもK-A-2は繋がらないみたいだな。
662:デフォルトの名無しさん
08/12/21 19:10:24
>>661
回りくどい言い方だが、要するに普通のルールってことだよね。
663:デフォルトの名無しさん
08/12/21 19:16:24
どっちにしてもC言語で作るという枷からは逃れられない
このスレでは他の言語で作る奴はその時点でルール違反なのだ
664:デフォルトの名無しさん
08/12/21 19:20:11
C言語でスクリプト言語のインタプリタを作って
その言語で組む事くらいは問題ないですよね?
665:デフォルトの名無しさん
08/12/21 19:31:18
トランプゲームのデータとロジックの実装がC言語でなされていない場合
C言語でトランプゲームを作ったとは言えないだろう
せいぜい実装済みオプションのオンオフ程度が限界ではないか
666:デフォルトの名無しさん
08/12/21 19:34:53
しかし今更Cというのもな・・・。
C++で組みたいぜ。
667:デフォルトの名無しさん
08/12/21 19:57:00
誰でも楽をしたい
そして楽を正当化する経済的な理由もある
ここはそういう世俗的な合理性に歯向かうスレです
プログラミングは苦行であり
他の言語を使って楽をしようとする不信心者は戒められなければなりません
668:デフォルトの名無しさん
08/12/21 20:31:53
別にカードデータくらい素の構造体で難なく作れるだろ
今時のやつって規模も何も考えずにデザパタとか適用しようとするの?
669:デフォルトの名無しさん
08/12/21 20:33:58
Cだとまともな名前空間もオーバーロードもないから
その構造体を操作する関数の名前に
構造体名を付けたりすることがよくあるが、
関数名が長くなって仕方が無い。
670:デフォルトの名無しさん
08/12/22 13:27:52
>668
オブジェクト指向だからと言って、必ずデザパタを使うワケではないぞ。
671:デフォルトの名無しさん
08/12/22 21:09:34
カプセル化もデザインパターンの1つだと思うんだ。
672:デフォルトの名無しさん
09/02/18 12:07:42
保守
673:476
09/02/18 13:23:57
#include <stdio.h>
void tramp(void)
{
int x=0;
printf("select Number:");
scanf("%d",&x);
if(x>=1&&x<=9){
printf("\x1b[0m");
printf("\n");
printf("\x1b[37m --------\n");
printf("|%d |\n",x);
printf("| |\n");
printf("| :) |\n");
printf("| |\n");
printf("| %d |\n",x);
printf(" --------\n");
printf("\x1b[0m");
}else
{
printf("1~9 Input\n");
}
}
int main(void)
{
int x;
for(;x!=EOF; x++)
{
tramp();
}
return 0;
}
674:476
09/02/18 13:24:22
私が作ったトランププログラムです
675:デフォルトの名無しさん
09/02/19 00:51:03
トランプの綴りはtrampでなくtrump
ただしtrumpの英語での意味は切り札のことで
日本語で一般に言うところのトランプはplaying cardsもしくは単にcardsという
676:デフォルトの名無しさん
09/03/20 22:24:43
>>657
VB使ったことないのでCで表現すると
while(i < 4){
next = hand[i]+1
if(hand[i+1] == next){
i++;
} else {
break;
}
}
if(i >= 4) printf("ストレート");
仕様
hand[添え字]・・・手札
next・・・i+1枚目の手札の数値
ストレートであると判断された場合、単純に「ストレート」の文字列を出力するプログラムだけど、絵柄の判定は俺の持ち合わせる知識じゃ無理だ
フラッシュの判定ができるならできるはずだが
677:デフォルトの名無しさん
09/03/20 22:25:31
>>676
訂正
絵柄の判定→絵柄の表現
678:デフォルトの名無しさん
09/03/23 13:17:06
ダメだこのスレ。
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4755日前に更新/153 KB
担当:undef