1 :
デフォルトの名無しさん :
2007/09/16(日) 06:46:13 ばば抜き、大貧民、いろいろあるけどこういうのってほとんどがJavaとかだよね。 CUIでもいいからみんなで作ろう
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ <こいつ最高にアホ 彡、 |∪| / / __ ヽノ / (___) /
>>1 俺はトランプ嫌いだから作らないけどお前は頑張れ。
決めたからには最後までやり遂げて見せろ。
簡単なところでポーカーの役判定とかから始めたら?
スピードで
もっと簡単なじゃんけんから。それを発展してあっち向いてホイを。
7 :
デフォルトの名無しさん :2007/09/16(日) 13:13:47
あみだくじでどうだ
あみだなら入力に関係なく結果そのものをrnd()で決定できるな
>>6 それ面白そう。
デジカメか何かで取り込んだ人間の顔写真から
顔の向きを判断するのが勉強になりそうだ。
すみません ポーカーの判定を作ってみたのですが止め方がわからないので教えて貰えますか
ソース見せな
#include<stdio.h> #include<stdlib.h> #include<time.h> #define baba_no_kazu 9 int main(void){ char *moyou[]={"S","H","D","C"}, *suuji[]={"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; int kaado[52+baba_no_kazu],i,j,k; srand(time(NULL)); while(1){ int baba=0,hurassyu=0,sutoreeto=0,pea=0; for(i=0;i<52+baba_no_kazu;i++) kaado[i]=i; for(i=0;i<52+baba_no_kazu;i++) j=rand()%(i+1),k=kaado[i],kaado[i]=kaado[j],kaado[j]=k; for(j=0,i=0;i<5;i++) if(kaado[i]<52)printf("%s%s ",moyou[kaado[i]/13],suuji[kaado[i]%13],j|=1<<(kaado[i]%13)); else printf("BABA "),baba++; for(i=0;i<9;i++) if((j|(0x1f<<i))==(0x1f<<i))sutoreeto=i+2; if((j|0x100f)==0x100f)sutoreeto=1; for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(kaado[i]<52&&kaado[j]<52){ if(kaado[i]/13==kaado[j]/13)hurassyu++; if(kaado[i]%13==kaado[j]%13)pea++; } //つづく
//つづき if(hurassyu>9&&sutoreeto>9)printf("ロイヤルストレートフラッシュ"); else if(pea+baba*2>6)printf("ファイブカード"); else if(hurassyu+baba*2>6&&sutoreeto>0)printf("ストレートフラッシュ"); else if(pea+baba*2>4)printf("フォーカード"); else if(pea+baba*2>3&&baba<2)printf("フルハウス"); else if(hurassyu+baba*2>6)printf("フラッシュ"); else if(sutoreeto>0&&pea<1)printf("ストレート"); else if(pea+baba*2>2)printf("スリーカード"); else if(pea>2)printf("ツーペア"); else if(pea+baba>0)printf("ワンペア"); else printf("ノーペア"); printf("\n"); } return 0; }
>>12-13 ですが、表示が流れてしまって確認ができません
どうやったらとまりますか?
while(1)で無限ループしてるからだろ forループにして適当な回数でやめればいいじゃん
役判定のレベルに比べて無限ループに気づかないとか、差が激しすぎんだろw 他人のソースの丸写しか?
D貧民とかあるでよ
18 :
デフォルトの名無しさん :2007/09/16(日) 16:49:41
CUIでいいから大富豪作りたいな。地方によっては大貧民やド貧民とか言うらしいな
CUIはきついな。cursesライブラリとか駆使するのか?
>>20 出力はこんな感じで良いんじゃないの。難しい事は考えないで printf() だけで充分。
あなたの手番です...
手持ちのカード: [1:H-6],[2:H-J],[3:S-K],[4:JKR]
どのカードを切りますか?(1-4): 2
Heart の Jack で宜しいですか?(y or n): y
Heart の Jack を切りました
以下ry
ネット対戦とか出来ると楽しそうだよね。
なんでゲームって単語がスレタイにつくと、ム板とは思えないほど低レベルなスレになるんだろう
ム板は割りと全般的に低レベルかと… まあ気にすんな
25 :
デフォルトの名無しさん :2007/09/17(月) 00:34:20
最初はカードをランダムで配るだな
次は配ったカードをソートだな
プレイヤー人数は?何人でするか。人対CPU。CPU対CPUとか
28 :
デフォルトの名無しさん :2007/09/17(月) 01:29:09
まぁ何でもいいから一個ずつ書いていけばいいんじゃないか? カードをランダムで配る関数、ソートする関数とか
29 :
デフォルトの名無しさん :2007/09/17(月) 02:57:05
C言語初めて一週間の俺がやろうと思ったが無理だった。頭のいい人教えてくれ
30 :
デフォルトの名無しさん :2007/09/17(月) 03:21:23
じゃあとりあえずプレイヤーは二人、んでカードをランダムに二人で配るってのは?面倒だからジョーカー抜きで
どうすんの?二人でやっても4種類のカードを13枚ずつ、ランダムに重複せずに分けるとか俺には無理ぽ
現実をシミュレートすると重複しないようにカードを排除することになるが、 とりあえずランダムに求めておいて重複していればまた求める 一応はこれで十分だろう
>>31 カードを配列に入れて先頭から順にランダムに選んだ要素とスワップしてシャッフル。
あとは配列の先頭から使いたいだけ使えばいい。
34 :
デフォルトの名無しさん :2007/09/17(月) 05:35:31
とりあえず、二人で勝負、革命とかルールなしで、大きい数字を交互に出していく、どちらもだせなければ その場をきる。先にカードがなくなったほうが勝ち。これを作ろうとする猛者はいる?
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ <<<1は最高にアホ 彡、 |∪| / / __ ヽノ / (___) /
今のところ、カードは数値だけで良いの?
39 :
デフォルトの名無しさん :2007/09/17(月) 12:18:27
>>35 まぁ最初はそれからじゃないか?あとからいろいろと機能を付け加えれば
できるやつは大富豪くらいなら一日あればできるのかな
ルールどおりに動く程度のものなら1日あればできるね つーか大富豪ってローカルルールが多すぎてどれが標準的かよくわからん
とりあえず細かいルール考えずに
>>34 を実装してみようか
おう がんばれ
cursesライブラリ使ってつくって。
まぁちょっと面倒だけど大富豪くらいならfor文や配列ができればいけそうじゃない?
char *suit[]={"S","H","D","C"}, *rank)[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; int card[52]; /* 52=4*13 */ でよい?
あ、rankの後ろにごみ入っちゃったw あと、表示は [SA][H10][DJ][CQ]... - 00 -- 01 -- 02 -- 03 -... 入力は 04,12,... でおk?
とりあえずそれを二人にランダムで配りそれをソートだな。昇順並び替えかな
> 昇順並び替え "3","4","5","6","7","8","9","10","J","Q","K","A","2" の順がいいと思われ
お、忘れてた。3が一番弱いんだっけw革命は後回しにそれでいってみるか?
64bit の変数一個用意して、1 bit 目が立っていたらハートのエースを、 53bit 目が立っていたらジョーカーを持っている事にすればソート不要。
for文や配列くらいしかワカラナイ俺にも作れるかな
スペード 0 ハート 1 ダイヤ 2 クラブ 3 A 0 2 1 : J 10 Q 11 K 12 スペードA 0 スペード2 1 : スペードK 12 ハートA 13 : ハートK 25 ダイヤA 26 : クラブK 51
56 :
つまり :2007/09/17(月) 15:24:02
カードの番号 0〜51 を 13 で割った 商 0〜3 余 0〜12 を使う ・表示 ・ソート(大小判定) ...は 0〜12 のままじゃダメだなw
絵柄に2bit A〜Kで13bit ジョーカーで1bit
58 :
デフォルトの名無しさん :2007/09/17(月) 15:26:43
とりあえず二人にカードを分けてそのカードを表示するってのは?とりあえず死合はまだで
トランプはカードに重複が無いから、プレイヤー 1 人辺り 53bit あれば十分だよ
そこまでして節約する必要なんてないだろ
#include <stdio.h> #include <stdlib.h> #include <time.h> char *suit[]={"S","H","D","C"}, *rank[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; int card[52]; /* 52=4*13 */ int hand[52][52], numOfHand[52]; void shuffle(void){ int i; for(i=0; i<52; ++i){ int pos=(i+1.0) * rand() / (RAND_MAX + 1.0); card[i]=card[pos]; card[pos]=i; } } void cardDisp(int num, int *card){ int i; for(i=0; i<num; ++i) printf("[%s%s]", suit[card[i]/13], rank[card[i]%13]); putchar('\n'); } void deal(int numOfPlayer){ int i=0, p, n=0; for(n=0;;++n) for(p=0; p<numOfPlayer; ++p){ numOfHand[p]=n+1; hand[p][n]=card[i++]; if(i>52) return; } } int main(void){ srand(time(NULL)); shuffle(); deal(2); cardDisp(numOfHand[0], hand[0]); cardDisp(numOfHand[1], hand[1]); return 0; } 配るまで
配るまではまぁなんとかだな。そういうや先攻後攻を決めるにはどうすればいい?0か1かで判断?
?」?・?、?ヲ
大富豪でカードを作る。ジョーカーつき。二人でやってルールは革命くらいでいいかな。作れるか?
乱数はrandでいいと思う? もっと高精度なの使う?
いいんじゃないか?偏りがあるとか聞くけどそこまで精度なのは求めてないかと
暗号用とか技術用だと乱数機工夫した方が良いが ゲーム程度なら要らないかと ゲーム向きの乱数生成法としては 時計orタイマーをキーにするって方法もある ユーザ入力のタイミング次第で結果が変わるので、お手軽かつ偏りが少ない
6人プレイの革命有り、ジョーカーのワイルドカードありで造った事有るなぁ。
C++じゃマズいんだっけか
Cでだからな。表示もprintfだけでも何とかなるぽ。ちょっと面倒だけど
int pos=(i+1.0) * rand() / (RAND_MAX + 1.0); これてどういうこと?
73 :
デフォルトの名無しさん :2007/09/17(月) 23:01:51
rand() / (RAND_MAX + 1.0)ってのは0以上1未満の数を一様乱数で返す だっけ?面倒だろうけどコメントつけていってw俺にもサパーリ
宿題スレでも見とけ
(i+1.0) * rand() / (RAND_MAX + 1.0) は rand() % (i+1) の高精度版だと思っとけばOK
// pos は 0 以上 RAND_MAX 以下の整数 pos = rand(); // pos は 0 以上 1 未満の実数 (int pos ならキャストされて整数に) pos = rand() / (RAND_MAX + 1.0); // pos は 0 以上 N 未満の実数 (int pos ならキャストされて整数に) pos = rand() / (RAND_MAX + 1.0) * N; // pos は K 以上 N 以下の整数 (俺が正しいと思ってる書き方) pos = K + (int)( rand() / (RAND_MAX + 1.0) * (N+1-K) ); int pos=(i+1.0) * rand() / (RAND_MAX + 1.0); 除算 "/" 演算は、被除数か除数の一方が float でもないと小数値を切り捨てる。 これは、(RAND_MAX + 1.0) で解消される。 (i+1.0) * rand() の 1.0 は 1 でもいいが、 rand()の値によっては、乗算をした瞬間にオーバーフローする可能性がある。 上に書いたように乗算を後からやれば問題ない。
(i+1.0) * rand() / (RAND_MAX + 1.0);ってのは0以上i+1未満の数をランダムで返すってこと?
>>77 そういうこと。
整数なのでi+1未満ってことは、i以下ってこと。
79 :
デフォルトの名無しさん :2007/09/18(火) 03:10:04
作って思ったこと。全部mainに入れ込んでた俺は明らかに初心者。しかもカードを小さい順から出すってのがわからない
手札を番号順にソート パス?=真 番号の小さいカードから順に見て{ 場札より大きいなら{ カードを場に出す パス?=偽 } }
あ〜…カード出した時点でループ抜けなきゃマズいな
その処理全体を関数にして 出したらそこでreturnすればフラグは要らないな そうすれば、ループ回りきった=出せない、なのだから
手札ソートについては、あらかじめ3〜K,1,2の順をデフォルトにしとけばいいじゃん 何も考えずに1〜Kの順で配列にするから、順番入れ替えの必要があるわけで
手札って強さの順にソートする必要あるのか?
見易さのために決まってるでしょ。
1から13の順じゃ駄目なのか?
比較関数はソート以外にも使える
強さ順にソートにすれば、いくつかの処理が簡単に書けるんじゃね?
2と3は繋がらないしね
90 :
デフォルトの名無しさん :2007/09/18(火) 15:03:59
そう思うんならそういう風なコードをここに書けば?
俺ならスートは小文字
ある程度書いたが、手札の出力書式はどんなのがいいんだ? #Player 1 Spade : 1 2 5 Heart : 1 2 3 4 6 9 11 13 Club : 1 3 4 6 7 8 9 10 11 Dia : 1 4 5 9 12 13 #Player 2 Spade : 3 4 6 7 8 9 10 11 12 13 Heart : 5 7 8 10 12 Club : 2 5 12 13 Dia : 2 3 6 7 8 10 11 #Player 1 Spade : 1 2 -- -- 5 -- -- -- -- -- -- -- -- Heart : 1 2 3 4 -- 6 -- -- 9 -- 11 -- 13 Club : 1 -- 3 4 -- 6 7 8 9 10 11 -- -- Dia : 1 -- -- 4 5 -- -- -- 9 -- -- 12 13 #Player 2 Spade : -- -- 3 4 -- 6 7 8 9 10 11 12 13 Heart : -- -- -- -- 5 -- 7 8 -- 10 -- 12 -- Club : -- 2 -- -- 5 -- -- -- -- -- -- 12 13 Dia : -- 2 3 -- -- 6 7 8 -- 10 11 -- -- #Player1 : S(1 2 5) H(1 2 3 4 6 9 11 13) C(1 3 4 6 7 8 9 10 11) D(1 4 5 9 12 13) #Player2 : S(3 4 6 7 8 9 10 11 12 13) H(5 7 8 10 12) C(2 5 12 13) D(2 3 6 7 8 10 11)
94 :
クソゲー :2007/09/18(火) 20:55:41
>>94 CPUはこっちが出したスートしかださないのか
ありゃ。そういうルールじゃなかったっけ。くそげー
97 :
デフォルトの名無しさん :2007/09/18(火) 23:01:26
for文や配列くらいしかワカラナイ俺でも大富豪ってできる?
できんことはないと思うがポインタとかそういうの分かってたほうが短くかけるかも
そんな初心者だが俺もやってみる。ほんとワカラナイことだらけだから変なプログラムやこれはおかしいって やつも貼り付けると思うけど教えてくれ
そういうことはコードを張ってから言え。
今はとりあえずカードをスペード、ハート、クローバー、ダイヤを13枚ずつランダムに表示するようなものを作ってる。
> 62 をソートしてみた static int getCmpRank(int *p){ int r=*p%13; return (r<2)?r+13:r; } static int cmp(const void *p1, const void *p2){ int r1=getCmpRank((int *)p1), r2=getCmpRank((int *)p2); if(r1!=r2) return (r1<r2)?-1:1; else{ int s1=*((int *)p1)/13, s2=*((int *)p2)/13; if(s1!=s2) return (s1<s2)?-1:1; } return 0; } #define NumOfPlayer 5 void dispAll(void){int i; printf("%4c",' '); for(i=0; i<52/NumOfPlayer+1; ++i) printf(" -%2d- ", i); putchar('\n'); for(i=0; i<NumOfPlayer; ++i){ printf("#%02d:",i+1); qsort(hand[i], numOfHand[i], sizeof(int *), cmp); cardDisp(numOfHand[i], hand[i]); } } int main(void){ srand(time(NULL)); shuffle(); deal(NumOfPlayer); dispAll(); return 0; }
105 :
デフォルトの名無しさん :2007/09/19(水) 01:38:44
とりあえずこっそりと そぉ〜っと ソート してみたんですが、気づきましたか?
107 :
103 :2007/09/19(水) 01:43:59
やっぱりポインタとかは必要ですか・・・
> 107 '関数'化だな、まずは。
>>107 俺の経験によると、お前は伸びるタイプだな
がんばれ
グローバル領域に int s[13],h[13],c[13],d[13]; だろ?伸びる兆しが見えん。
>>110 まだ、うまいへたを論じるレベルじゃない
> 110 まてまて それを2次元配列にすれば→ int card[4][13]; そんなに悪くはないぞ
...C言語で「2次元」配列は無いわな orz
ポインタ知らなきゃグローバル領域に置くほかない罠
115 :
103 :2007/09/19(水) 02:08:03
すいませんお風呂入ってました。 関数化にポインタに二次元配列ですか・・・ まだカードを配るところにすらいってないのに・・・ お風呂上りに麦茶一気飲みしたらお腹が痛くなってきたので寝ます。 また来ますのでそのときはアドバイスよろしくお願いします
116 :
デフォルトの名無しさん :2007/09/19(水) 02:11:26
お大事にw
その麦茶、腐ってねーか?
っつか、俺流だと1〜52までの数値をそれぞれ4つの1〜13のスーツに割り当てるけどね。 ちなみに、スーツの強弱は ♠ ♥ ♦ ♣ の順になっているんで 1から13までをスペードといった形で割り当てている。
ここにあがってるソースはほとんどそうなってると思うが?
ここって、そんなに出てないじゃん・・・しかも一部、その順番になってないものもあるしw
大富豪だよな? 大富豪にスートの強弱なんか無えよ
まあ普通は1から52じゃなくて、0から51にするよな
123 :
デフォルトの名無しさん :2007/09/19(水) 03:14:07
まぁまだ始めたばかりみたいだしあれもこれもってなるときついとこもあるな。とりあえず書いていって後からポインタとかに書き直せばいい
>107 この程度なら「必要」ではないよ。使えた方が「効率的」だったり「楽」なこともあるけど。
>>76 整数にキャストするなら実数に変換する意味なくない?
普通に剰余を求めればいいのでは。
>>125 rand()の実装を考えると、普通に剰余するだけでは精度が悪い。
精度を上げるために上位ビットの値を使ってる。
流れからすると構造体でカードを一枚一枚作ってる自分は負け組っぽいな やる気が失せる
グローバルに int hand[player][cards] 宣言して処理してる 構造体なんか使ってねえや
カードを構造体にするのも悪くないと思う。 カードの表示や比較をする度に除算や余算をしなくていいし。 いまどきの環境なら容量に気をつかう必要があるわけじゃないしね。
struct Card { CARD_NUM number; CARD_SUIT suit; FUGO_CARD_RANK rank; LPCSTR str; };
AIで探索したりするなら容量に気を使うこともあるかもなー
>>130 は流石に大げさだと思うけど、逆にメモリ使用量を一番ケチれるのはどんな方法?
必要最小限のメモリ確保で、ポインタを使って(シーク的な意味で)アクセス。
HDに保存
大げさなデータ構造にしといた方がのちのち便利だと思うけどね。 特に大富豪は数字が一番低いのがカードの強さが一番低いになってないのがぶちきれる
革命があると強さが逆転したり、 同時に複数枚数出す事が出来たり、 面倒だ
がんばって作れよ
138 :
103 :2007/09/19(水) 19:47:06
二人に分けるにはどうしたらいいでしょうか・・・
140 :
103 :2007/09/19(水) 19:56:04
すいません。
>>103 でハート、クローバー、スペード、ダイヤを13枚ずつ作りました。これを二人にランダムで分けたいんです。
二人なので26枚ずつに
>>140 とりあえず、C言語の本を一冊やり切ってからまた来い
143 :
103 :2007/09/19(水) 20:11:19
すいません。やったつもりでいました。とりあえずまた来ます
マークごとに配列4つ作っても意味ない
先はまだまだ長そうだな
初心者でも作ろうとすることはいいことだ。ただ今の知識じゃちょっときついとこがあるだけ
んだ 學而不思則罔、思而不學則殆つってな 工夫して勉強しての繰り返しだ
目的に合わない無駄なことを繰り返して苦労しても何も結果は出ないよ。 まず何を作るべきか、手段や手法を理解した方が良い。 この場合、トランプゲームにおいて、カードの山を作るということを イメージして、それをどのように実装するか?をまず考える。 スーツごとに分けたものをシャッフルした山を用意してどないしましょ?
とりあえず今はカードの配列を作ってそれに数字を入れて表示しただけ。これをカードとして 使うのは・・・まぁ頭のいい人に聞いて
このスレ頭から読み直して、他の人がカードをどういうふうに扱ってるか良く見ればいいのに
具象から抽象へ思考のジャンプが必要になるところ 本質的に難しいことなので、理解するのにちょっと時間かかってもしょうがない
抽象から具象じゃなくて?
データ構造が大事だな
>>143 なんかよくわかんないけど130は基本的にダメPO。
宿題スレの乗りでおいてみる¨
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <memory.h>
int S=0,H=13,C=26,D=39,J=52,N=4,M=54;
char* SUIT[5]={"S","H","C","D"};
void swap(int *a,int *b) {int t=*a;*a=*b;*b=t;}
void initDeck(int *d){int i;for(i=0;i<M;i++)d[i]=i;}
void initHand(int *h){memset(h,-1,sizeof(int)*N*M);}
void shuffle(int* d){int i,j;srand((unsigned)time(0));
for(i=0;i<M;i++){j=rand()%M;swap(d+i,d+j);}}
void distribute(int *d,int *h){int i;
for(i=0;i<M;i++)swap(h+((i%N)*M+(i/N)),d+i);}
void show(int *h){int i,j,t;for(i=0;i<N;i++){
printf("PLAYER%d: ",i);for(j=0;(t=h[i*M+j])>=0;j++){
if(t<J)printf("%s-%d ",SUIT[t/13],t%13+1);
else printf("JOKE ");}puts("");}}
void game(){int d[M];int h[N*M];initDeck(d);initHand(h);
shuffle(d);distribute(d,h);show(h);}
int main() {game();system("PAUSE");return 0;}
>154 どこら辺がダメぽか書けよ… つーかお前のそのコードは読めんぞ。 7行スレとかのノリのつもり?
157 :
154 :2007/09/19(水) 22:37:33
>>155 ゴメン。 130じゃなくて103ネ。安価間違えた
ロダにあげるのメドクサイから改行抜いただけだけど。
>>103 のためにどこがいけないか教えてあげないと
なんでわざとわかりずらく書くんだよ読む人のことをしないならうpるなよまじしねまじしね
その偏ったシャッフルでカードをシャッフルしたつもりかよw
>>161 できる奴がやってもしょうがねえって
よって、おまえやれや。教えてやっからよ
とりあえずおおまかな流れでも。 カードをシャッフル プレイヤーにカードを配る プレイヤー、対戦相手は出すカードを選択する ゲームのルールに則って出されたカードを処理する ゲームが終了する条件が満たされたら結果を表示 みたいな。コンピュータがどのように出すカードを選択するか その辺りは適当に独自でライブラリを作って対処。
>>163 おおまかすぎつか粒度がおかしいだろ
とりあえずプレイヤーとかカードとか手札とかのデータ構造考えてみ?
>>164 口先だけで何も提案しないお前が言うなボケクズw
お前みたいな口先だけでデータの構造考えてみ?とか
他人任せなくせして自分が何も考えてないのがバレバレ。
それはただの処理の流れであって、具体的な処理についてじゃないぞw
お前、プログラムを作るとき、先にソースを書いて後で分からなくなるタイプだろ?w
普通、処理の手順や流れを決めてから部分部分を作って、後でおのおのを組み合わせるなんて
当たり前だぞw
166 :
デフォルトの名無しさん :2007/09/20(木) 02:12:14
164 名前:デフォルトの名無しさん 投稿日:2007/09/20(木) 02:03:31
>>163 おおまかすぎつか粒度がおかしいだろ
とりあえずプレイヤーとかカードとか手札とかのデータ構造考えてみ?
お前が おかしいだろ おかしいだろ おかしいだろ おかしいだろ おかしいだろ おかしいだろ
手札とかのデータ構造考えてみ? 手札とかのデータ構造考えてみ? 手札とかのデータ構造考えてみ? 手札とかのデータ構造考えてみ?
手札とかのデータ構造考えてみ? 手札とかのデータ構造考えてみ? 手札とかのデータ構造考えてみ? 手札とかのデータ構造考えてみ?
だからまだそういう段階の話じゃねーってバーかw
167 :
デフォルトの名無しさん :2007/09/20(木) 02:12:53
> 手札とかのデータ構造考えてみ? ワラタw こいつ何が言いたいんだ?っつかなんだこいつ?リーダーでもないくせに。 そこまで言うならお前がその手札とかのデータ構造考えてみ?w
168 :
デフォルトの名無しさん :2007/09/20(木) 02:14:15
162 名前:デフォルトの名無しさん 投稿日:2007/09/20(木) 00:38:25
>>161 できる奴がやってもしょうがねえって
よって、おまえやれや。教えてやっからよ
↑あとこいつも。アホだろ。お前がやれよ、まるで自分は出来る奴みたいな
結果を出してもいないくせに、出来ない奴を目の前にしてやってもない
自分の方が出来るとか思いたいんだろw
169 :
デフォルトの名無しさん :2007/09/20(木) 02:18:12
>>163 はただの流れ。まずはどういう手順で処理されていくかの
どういう処理をするモジュールが必要になるかの前に考えるだろ。
データ構造って、何が言いたいんだ?それを言うならお前がまず
それについて述べろ。
>>164
とりあえず大まかな仕様だけ決めちゃってよ そうして分担すればいいじゃないか。。。
エキサイトしてんなあ 気に入らないレスをスルーできないなら 最初から書き込まなきゃよくね?w
173 :
デフォルトの名無しさん :2007/09/20(木) 02:25:39
どうでもいいよ 荒らすのはカンベン
あーあ、わりと良スレだったのに。
こんな瞬発力のある粘着は初めて見た
Cがらみででこいつを知らないのは素人だぜ
大富豪の英語訳はMulti Millionaireなんだがwikipedia日本語版にはmuiti millionaireとある。 てっきりmultiだと思ってコピペしてたらmultiと打って弾かれたのでおかしいとは思ったんだ。
っつか具体的な内面的な処理やコードはおいといて、大まかにどういう流れで 勧めていくかの項目くらい作っておくだろ。それに応じて必要な部分を作っていくなんて プログラミングをやっていれば当たり前だと思うが。 まさか、mainの中に全部詰め込んでしまうタイプ?
ごちゃごちゃ言ってねーでそろそろ誰もが納得する
>>34 を実現した理想的なコードをあpれや
お前がやれよ
>>182 やだぷー、俺は今から七ならべを作るからw
185 :
42 :2007/09/20(木) 19:27:05
しょうがねえなお前ら 俺が今からjavaで作ってやるよ
>>186 スレタイ読んでくれい。「C言語で」な。
っつーか、カードをシャッフルして分配するところまで作ったけど 対戦相手のコンピュータがどのようにカードを場に出すかってところでつまづく。
とりあえず、なにも考えずにそのとき出せるカードで一番弱い奴を出すって実装してみたら? その実装のままゲームとして出してる例もあることだし。
とりあえずは一番小さいのから出すってのでいいんじゃない?
>>189-190 甘いな。
最初からwikipediaに載ってるローカルルールを全て実装可能なように設計するのだ。
ルールとCPUアルゴリズムの区別もつかないバカはひっこんでろ
おっと先に言われた
194 :
192 :2007/09/20(木) 20:13:37
すいませんちょっといいすぎました これからはきをつけますので
誰だ、お前w
んじゃ俺はおっきいのから出すようにするよ。ナニの小さい奴は最後ね
男ならランダムだろうが!
>>197 いや、ランダムったって、ゲームのルールに応じて出せないカードじゃ仕方がないし
出せる中からなんて探しててもそれはそれで面倒だし・・・
ルール上次に出せるカードをリストアップするのなんか簡単だろ・・・
そうだね 君はそれをやればいい
>>200 SDKのコンパイルの段階で躓く奴が多そうだ
宣伝スレおつ
204 :
デフォルトの名無しさん :2007/09/20(木) 23:16:30
ちゃらんらん
7ならべを作ったらここで公開しても良い?それとも公開したら後悔しそう?
そのセンスの無さから見るとたぶん後悔することになるだろうな
んじゃ公開せずに作ったことを後悔しまつ orz
後悔後に立つ
あっ、それじゃソースは公開せずに、チョンパイルした Win32用の実行プログラムだけをうpするわ。
>104 で場に出すまで (しかしまだ入力できない...力尽きた) int field[52],numOfSet,passCount; int sequence(int *chkHand, int len){ int i=0; if(len>=3) for(i=1; i<len; ++i) if(getCmpRank(chkHand+i)!=getCmpRank(chkHand+i-1)+1 || *(chkHand+i)/13!=*(chkHand+i-1)/13) break; return (i==len)?getCmpRank(&chkHand[len-1]):0; } int pair(int *chkHand, int len){ int i; for(i=1; i<len; ++i) if(*(chkHand+i)%13!=*(chkHand+i-1)%13) break; return (i==len)?len*10+*(chkHand+len-1)%13:0; } int higher(int *nowHand, int len){ int stat; if(numOfSet==0 && (len<=1 || pair(nowHand,len) || sequence(nowHand,len))) return 1; else{ if(0<(stat=sequence(field,numOfSet)) && stat<sequence(nowHand,len)) return 1; if(0<(stat=pair(field,numOfSet)) && stat<pair(nowHand,len)) return 1; } return 0; } int putCard(int player, int *list, int len){ int i, nowHand[52]; if(len<=numOfHand[player]){ for(i=0; i<len; ++i) nowHand[i]=hand[player][*(list+i)]; qsort(nowHand, len, sizeof(int *), cmp); if(higher(nowHand, len)){ for(i=0; i<len; ++i){ hand[player][*(list+i)]=hand[player][--numOfHand[player]]; field[i]=nowHand[i]; } return (numOfSet = len); } } return 0; } : numOfSet=passCount=0; if(putCard(i, list, len)==0) ++passCount; else passCount=0;
>>210 プログラム見るの面倒だけどどんな仕様ってかルールで作ってるんだ?
うpロダにまとめてうpしてくれい。コピペしてコンパイルするのまんどくせっ
手持ちのカードについて思ったんだけど、やはり数字とスーツの情報を持った 構造体を作って、それを双方向リストにでもして、抜いたカードの部分を リストを削除するように消してといった感じにして、手持ちのカードリストが ヌルポになったら手持ちがなくなったという感じにするとか考えてみたけど やっぱやーめた。
214 :
127 :2007/09/21(金) 04:00:02
>>213 のような話は既に実装済みで今はこんな感じ
*** Card Simulation ***
#InCase
S-A S-2 S-3 S-4 S-5 S-6 S-7 S-8 S-9 S10 S-J S-Q S-K H-A H-2 H-3 H-4 H-5
H-6 H-7 H-8 H-9 H10 H-J H-Q H-K D-A D-2 D-3 D-4 D-5 D-6 D-7 D-8 D-9 D10
D-J D-Q D-K C-A C-2 C-3 C-4 C-5 C-6 C-7 C-8 C-9 C10 C-J C-Q C-K (J) (J)
*** Multi Millionaire Begin ***
<Shuffle>
#Shuffled(HinduShuffle X10 / RifleShuffle X1 / HinduShuffle X10)
S-A D-2 S-2 D-3 S-3 D-4 S-4 D-5 S-5 D-6 S-6 D-7 S-7 D-8 S-8 D-9 S-9 D10
S10 D-J S-J D-Q S-Q D-K S-K C-A H-A C-2 H-2 C-3 H-3 C-4 H-4 C-5 H-5 C-6
C-7 H-6 C-8 H-7 C-9 H-8 C10 H-9 C-J H10 C-Q H-J C-K H-Q (J) H-K (J) D-A
<Deal>
#Player01
H-3 D-3 S-4 C-5 D-6 S-7 H-7 C-7 D-9 S10 H10 C10 D-Q S-K H-K C-K S-A C-2
#Player02
C-3 H-4 D-4 S-5 C-6 D-7 S-8 H-8 C-8 D10 S-J H-J C-J D-K H-A D-A S-2 (J)
#Player03
S-3 C-4 H-5 D-5 S-6 H-6 D-8 S-9 H-9 C-9 D-J S-Q H-Q C-Q C-A H-2 D-2 (J)
>>214 というか、実装したコードを書いてもらわんとさっぱり・・・
216 :
デフォルトの名無しさん :2007/09/21(金) 22:16:49
今からC言語猛勉強やって1ヶ月で大富豪できるかな。前やって途中でやめてしまったんだよな
前やって途中でやめたんなら状況が変わらない限りまた途中でやめてしまうだろう 何か意欲を維持できるものができたのなら話は別
いい感じで実装できてきたので、ちょっとルールについて質問。 革命のルールなんだけどさ、たとえば3人でゲームをしている状況で、 A氏が 6 を 4枚、B氏が 9 を4枚、C氏が Q を 4枚持っている。 B 氏から始まる場になったので、B氏は 9 を 4枚出した。 そしたら、この場はどうなるの? 1. そのまま流れて、次のB氏の場から革命の場になる。 2. B氏が 9 を 4枚出した次点で革命が発動するので、A氏が 6 を 4枚出せば切れる。 さらにこの場合だと、そのあとC氏が Q を 4枚出せば切れる。 3. B氏が 9 を 4枚出した場はまだ革命の場ではないから、C氏が Q を 4枚出せば切れる。 この場合、次のC氏の場は革命の状態?それとも通常に戻る? 4. その他 さて、どれが主流? オレは2でやってたけど。熊本で。
219 :
210 :2007/09/21(金) 23:41:01
>211 複数枚カードの組 or 3枚以上の同じスーツのシーケンス は出せる、ルール 当然、場札より大きくないとダメ(3,4,...J,Q,K,A,2の順) >212 「うpロダ」って何?
もいっこ。 次はパスのルールなんだけど、 場で一度パスしたらその場はもう参加できないの? また3人でやっているとして、 A氏が4、B氏が7ときて、C氏はQがあるけど、出したくないからパスした。 そしたらA氏がJで切った。B氏はパスした。 この状況で、C氏はQ出せる?それとも強制パスでA氏の場になる?
>218 もれも 2. だな。埼玉、千葉で。
>>218 俺のところでは2の条件かな。
>>220 パスした人はその場が切れるまで参加できないってしてた
おそらく地方とかでルール変わるかもしれないけど、公式ルールってないのかな
>>221 お、2が増えた。
母集団が増えることはあまり期待していないので、
もう2人くらいいるなら2で実装してみようかな。
一番簡単だし。
224 :
221 :2007/09/21(金) 23:46:46
>220 C氏はQ出せる。 場に出した人"以外の他の人全て"がパスした時だけ流れる、ルール だったな
225 :
221 :2007/09/21(金) 23:49:07
>224 ちょっと説明不足だな 誰かが出したらその時点でカウントがリセットになって、それ以降からパスのカウントが始まる って感じ 言葉にするとよく分からないな...
>>225 分かるよ。自分が出したカードを自分が切ることになったら流れるってことでしょ。
でもやっぱり
>>222 タイプもあるんだよねぇ。
いや、CPUの思考ルーチンに差を出せないかと思ってさ。
昔でいうパックマンのモンスターみたいに。
とりあえず手札を減らしたい派、Aや2を温存する派、革命できるときは何より革命を狙う派…とか。
もちょっと考えてみる。
ちょっと頑張って、テストまったくせずに一通り書いた エラー直してコンパイルしたら、手札のあまりの見にくさに吹いた 二人対戦だと一人のカード多いよ('A`) おまけに複数枚出しを忘れてたorz もういいや寝よ 俺みたいな初心者じゃなくてちゃんとした人が結構作ってるみたいだし
何故Cでやらねばならないのかと言えば スレタイに「C言語で」とはっきり断ってあるからだ。 これがなければどれだけ簡単だっただろうか。
>>228 1はCで作りたいといっているだけで、
ほかのやつは他の言語を使ったって一向に構わないと俺は思うぞ。
作るのは勝手だが、このスレには必要ないな
rank = ( num + 11 ) % 13
>>229 君は本当にC言語もスレタイも理解できてないのかね?
ある程度の実装がされている開発環境なら言語を選ばずとも作れるんだよ。
このスレは”C言語で”だからね。かまわないって言い出すとキリがなくなるだろ。
東京から京都へ東海道を歩いて行くというイベントで
移動して目的地に到達すりゃ良いから鉄道でも自動車でも
一向に構わないなんて言ったら歩いていくという目的が無視されるでしょうに。
東京から京都へ 足を使って移動 ってなら 歩くも良し、走るも良し、屁理屈抜きで足でこぐ自転車でも良し という条件ならおkとも言えよう。歩くって言ったら歩く。
楽しむのが目的だあな おおらかさが無いとつまらん
頑張ってソートのアルゴリズムとかを調べながら作ってて、
ふとスレ読み返したら
>>104 を見てソート関数があらかじめ用意されていたことを知ったorz
なんか負けた気分
配列でやるのはやっぱりきついかな?
出したカードの分、穴が空いちゃうし。
出したら詰めればいいだけじゃね?
出したカードを詰めるところをどうしようか考えたが やはり双か単方向リストでリストを削除するかのように実装すべきか、それが問題だ。
238 :
235 :2007/09/22(土) 04:44:37
>>236 いやあ、何かスマートじゃない気がして
いっそ詰めないで、カード無いとこには-1とか入れて、画面表示の際のループで残り枚数カウントするとかも考えたんだけど
無駄なループだ
>>237 やっぱ単か双のリストが良いかねえ
まあプログラミング初心者としては、それも面白そうではあるんだけど
ゲ製に移動したら?
>>232 君は本当にスレタイを理解できてないのかね?
このスレは”トランプゲームを作りたい”だからね。かまわないって言い出すとキリがなくなるだろ。
スレタイは「C言語でトランプゲームを作りたい」です。
流石にJavaで作ったら1の神経逆撫でだろうな。
いいねそれ Javaで作ろうか
JavaでもC++でもいいよ できないよりマシ
大丈夫、>244ほどじゃない。
>>232 はスレタイの「C言語」にこだわっているが、
スレタイにこだわりだしたら、「ゲーム」と入ってる時点でLR違反だってことを
>>239 は皮肉ってるつもりだろう
俺はCだけにこだわる必要はないと思うし、
わざわざ移転する必要もないと思うが
javaとかいってる奴らは、自分じゃ書かない癖に間口を広げて、 少しでもゲームできる可能性を増やしたい乞食だろ。
248 :
デフォルトの名無しさん :2007/09/22(土) 17:58:38
249 :
デフォルトの名無しさん :2007/09/22(土) 18:00:49
>>246 必要があるないじゃないんだよ、スレタイは C言語で って書かれてあるだろ。
日本語が読めないなら祖国に帰れよ
250 :
デフォルトの名無しさん :2007/09/22(土) 18:01:57
>>246 お前みたいな奴ってトランプゲームを作ることだけに頭がいっているんだろうけど
C言語の宿題や質問スレでJavaやその他の言語の質問してもスルーされるだけだぞ
アホか ゲームやりたいだけならヤフーとかハンゲにでも行くさ
>>249 スレタイは ゲーム って書かれてあるだろ。
> ゲーム関係の話題はゲーム製作板へどうぞ。
日本語が読めないなら祖国に帰れよ
板違いとスレ違いの区別ぐらいつけろよ。
板違いのスレでスレ違いの指摘とは。 それなんてダブスタ?
板違いといいたいなら最初からそういえばいいのに 性格ねじまがってるのかな??
板違いだろうと
>>1 が立ててしまったのだから仕方がない。
257 :
デフォルトの名無しさん :2007/09/22(土) 18:13:43
それなんて開き直り?
板違いだと思うんなら、javaとかCとか関係なく書き込むべきじゃないだろ。
260 :
デフォルトの名無しさん :2007/09/22(土) 18:18:21
○○言語で○○作りたい って言ったらキリがないぞ。ここに立ってる以上ここを有効活用するべき
Cにこだわる意味がわからん
何か普通に作る流れだったのに、gdgdになってきてこのまま誰も作らなそうだな
264 :
35 :2007/09/22(土) 18:58:33
>>35 ですが、
通常ルール部分の判定処理(出せるか出せないか)
AI(簡単なものなら、上の判定を使って適当にカードを選ぶ)
特殊ルール(8切りなど)の実装
がコーディングできれば完成です。
俺は自分で作る気は無いけど質問とかがあれば答えてるよ 正直言って今ここのレベルは高くないと思ってるけど 作る人が居るなら成長できるよう応援する
俺も他の人が悩んでるのを見て一緒に考えるのが楽しいわ
複数枚出しの指定方法てどうしたらいいかな? 1. [1:H4][2:D6][3:S6][4:C9] 番号を入力してください>1 //一枚出し 番号を入力してください>23 //二枚出し? 2. 手札/[H4][D6][S6][C9] Single/[1:H4][2:D6][3:S6][4:C9] Double/[5:D6,S6] 番号を入力してください>4 //二枚出し (出せるカードのみリスト) 3. [H4][D6][S6][C9] 出したいカードを入力してください>H4 //一枚出し 出したいカードを入力してください>DS6 //二枚出し
2番の方向で
>>267 手順が一つ増えるけど...
もう一枚手札を切りますか? (y or n) :
270 :
35 :2007/09/22(土) 19:27:50
>>267 カード選択 > S1 H1
みたいなのを有効にしてます
手札からカードを選ぶだけ選んで、出せなかったら選び直しにしてます
>>267 の方がUI的に優れてるかな
既に複数枚出しの場になってることきのことも考えれば、2がいいと思う。
>219 「うpロダ」はアップローダのことだな。 ただ、巷のアップローダは画像用とか圧縮ファイル用が多いから あんまりテキストアップロードには向かないかもね… サイトとかブログとか持ってるならそこに上げたりしてもいいと思う。 昔、プログラムコード用の外国のアップローダ 見たことあるんだけど、忘れちゃったな…どこだっけか。
うpろだなら、C/C++の宿題スレに張ってあるのはどうだろう?
274 :
267 :2007/09/22(土) 20:24:11
大富豪作ってる人は一日どのくらいのペースで作ってる?
できる人はルールを設定してくれれば一日でその通りに作れる。 普通は一週間以内かな。大富豪作ってばかりもいられないし
大富豪でこのスレが終わるわけじゃないからな 大富豪が終わったら次は何にする?
仕切りたがるだけのアホは市ね
>>277 王道なトランプゲームをいくつか実装してみる
>>281 参考にさせてもらうぴょん。
ところでJkKってのは何?誤記?
C言語暦三日の俺が一ヶ月でこれ作れるかな。Cについてはポインタやって今は構造体やってる
プログラミング暦三日じゃなきゃ、できるんじゃね?
プログラミング暦三日です・・・
とりあえずCやって目標は11月までに作る!これを一ヶ月で作るなんて考えがやっぱ初心者だな って思った方。あなたが正しい
>>282 Joker Killerの略です。すまんこって。
一応ルールは、2/Jk上がり禁止、革命有り、Jk殺し有り、が前提です。
複数枚(ダブル等)の表現方法(表示方法では無しに)で困っているんだが、 配列以外でいい方法無いかね 複数枚だと必ず数字が同じだから(階段は考えないで)、 それを利用して排他な表現方法が無いものかと思うんだけど……
カード選択前に「何枚モード」を選ぶとか ルーチンは簡単になるけどあんまりスマートではないか
>>289 場札をint型変数で管理してるんだけど、
複数枚出してる時はどんな値を格納しようかと思って。
単純に要素数が4の配列で場札を管理すりゃいいのかもしんないけどさ、
せっかく「数字が同じ」て限られているのに、
わざわざ実際にはありえない物も含めた全組み合わせを格納できる方法を採用するのも癪で……
このスレには実際に大富豪作ってる、または作った経験があるって人はどのくらいいるんだろう。 ちなみに俺は作りたいけど作れない人だけど
>>293 とりあえず基本ルールのみ実装だからw
でも後でいろいろ加えていくとき、やっぱ困るか……
大人しく配列にします。
>>291 階段なしなら、(出してる枚数-1)*13を加えてやればいいんじゃないかと
>>294 階段ありなら配列は4じゃなくて出せる最大枚数分だな
>>295 >(出してる枚数-1)*13
スートはいらないならそれでいんだけど。
まあ大富豪においてスートなんか飾りだけど。
そうかあ、階段ありなら出せる枚数増えるんだよな……定数宣言しとこ
>>292 ノ
プレイできる所まで作ったら飽きちゃって、そのまま。
>>296 >まあ大富豪においてスートなんか飾りだけど。
ローカルルールにはスートがかなり絡んでるようだよ
>>267 の2の方法でやるとき、
ユーザー入力と一対一対応させるために出せるカード組み合わせの配列を作ろうとしたんだ。
この配列の要素数っていくつにすればいいんだ?
>>299 自由に出せるときにもその方法を取るのか
そうなると手札が多いとき選択肢が多くなるぞ
昔ポーカーなら作った事あるが、変な最適化はしなかったな。 トランプをデッキとして捕らえ、54枚のデッキをひとつ使うゲームとして組んだ。 俺も当然のごとく飽きて、折角用意した汎用性は無に帰したけど。
その昔、といっても、もう6年以上前になるが、ブラックジャックを作ったことがある
プレイヤーが知っているはずであることは知ることができなければならないし、 プレイヤーが知らないはずであることは知ることができてはいけないし、知ろうとしてはいけない という自分で作った条項に苦しんでる。 クラスじゃないから隠蔽ができないので結局そのつもりだけなんだが。
54枚がどの領域に配置されてるかが管理されてれば出来るでしょ。 公にオープンされる場(7並べなら並べる場所)と自分にだけオープンされる場(手札) 場構造体にユーザIDとカード配列を持たせればいい。何か難しく考えてない?
ユーザIDがグローバルなら0、それ以外ならrandで割り振れば嫌でもクローズドな世界に突入さ
やべっ、なんかVisualC++で作りたくなってきたw
そっちのほうが楽かも
本当にやりたいと思っている奴はやりたいなんてわざわざ書き込まない
やべ、なんかVisualC++で作りたくなくなってきたw
プログラミング初心者です カード出した後の穴空き配列の対処に困っているんですが ・穴空きはそのままループ用いて処理 ・一回一回詰める どちらが良いんでしょうか?
空を表す常態で放置
一回一回詰めてたが、考え直してみればその方がいいな
313 :
310 :2007/09/23(日) 02:38:51
>>311 ふと思ったんですが、その場合ユーザー入力はどうすればよいでしょうか?
-1をカードが無い状態として、配列に
{6,-1,8,-1,-1}
と入ってるとします
-1はループで飛ばされるので、ユーザー的には{6,8}と同義です
つまりユーザーが入力した数値が添字に対応してなくて不便ではないかと。
一回一回、ユーザー入力に対応した別の配列を生成するくらいなら、
配列を一々詰めた方が効率が良いのではないでしょうか?
もっと良い方法がありますかね?
6,8 で添字を合わせたいなら、{-1,-1,-1,-1,-1,-1,1,-1,-1,1,...} じゃないの?
ランダムアクセスできないといけない問題でもあるの? if (EMPTY_CARD != card[i]) みたいに毎度サーチすればいいじゃん。
>>314 ああ、そういうタイプの配列にすればできますね
{6,8,11,23,48,51}(実際にはランク順ソート)
みたいな配列ばかりイメージしてました
>>315 例えば{6,8,11,23,48,51}で、
ユーザーが2と入力したら11を出す、と添字に対応させることを考えていました。
{6,-1,11,23,48,51}
↑こうなると表示の際には-1は飛ばされて{6,11,23,48,51}と表示されますから、
ユーザーが23を出すつもりで2と入力しても、そのまま添字にできないなあ、と。
かと言って一々ユーザー入力に対応する配列を作るなら、詰めていく方が効率良いでしょうし。
それとも、ユーザー入力nに対して、ループで配列の有効な値のn個目を毎度探せばよい、ということでしょうか?
>>316 そういう選択のさせ方をするならその通り
コンパクションや線形リストのためのコード書くほうが手間じゃない? カードゲームなんて配列の要素数が少ないんだから 変に手間掛けてもCPUは喜ばないよ。
やべっ、トランプゲームより子供を作りたくなってきたw
320 :
316 :2007/09/23(日) 03:57:41
>>317 すいません、こんなこと聞くのも恥ずかしいんですが、「その通り」って
>一々ユーザー入力に対応する配列を作るなら、詰めていく方が効率良い
>ユーザー入力nに対して、ループで配列の有効な値のn個目を毎度探せばよい
どちらの意味で?
322 :
210 :2007/09/23(日) 09:27:46
>316 もれのは前者(いちいち詰めているタイプ) 高々50数枚程度なら効率とか気にしない まぁプログラミングの勉強に、って観点なら効率を考えてみるのもよいかもだが
c++とboostとpstade解禁してくだちぃ あとついでにpdcursesも
わざわざお題から外れてまで他の言語を使用する程の問題でも無いと思うけどね。 無粋と言うか子供っぽいと言うか…
わざわざ議論を蒸し返すなよ
ま、そういう事だね。
328 :
210 :2007/09/23(日) 13:34:35
>281 ...見れないorz
ぽーかぽーか(ほうかほうか > そうかそうか)
とりあえず初心者向けの本一冊読んできたけどカードを作る際に実際に使えるものとして宣言するには どうすればいいか分からなかった
今デバッグ中だが、ソースサイズが
>>328 の倍近くあるw
やべえ、公開したくなくなってきたww
>333 むしろ公開して、サイズが膨れあがった原因を突き止めるんだ
335 :
333 :2007/09/23(日) 20:11:17
>>334 むしろデバッグが終わらな(ry
・複数枚が何故か出せない
・出せるはずのカードが何故か出せない
・AIが何故かたまに無限ループ
関数関係が複雑でデバッグめんどいw
混乱するならオートマンを書く。整理大事。
>>335 今のところバグはないが、俺は12000バイト前後あるぞ
>>335 関数毎にテスト。
それで問題ないなら組み合わせてテスト。
340 :
333 :2007/09/23(日) 20:31:59
341 :
デフォルトの名無しさん :2007/09/24(月) 14:51:45
ほほう
C#解禁してくれたらxnaで書く。 ってスレが違っちゃうか・・・
まずスレ建てればいいんだよ ほぼ確実にここに誘導されるから そういう経緯なら追い出されることは無いだろうよ
まあ、C/C++/C#ならこのスレでいい。
ちょっと質問 言語何でもOKならみんなは何で作る?
オブジェクト指向を取り入れた言語が溢れる昨今 敢えて非オブジェクト指向言語であるC言語を使って 四苦八苦することにノスタルジーを感じるのがこのスレの趣旨だと理解しているが
324 名前:デフォルトの名無しさん[sage] 投稿日:2007/09/23(日) 10:11:28
>>323 公開したもの勝ちだ
喪前らゲ制作板逝けw
ゲ制でCUI大富豪なんて誰も参加しねぇよw あそこでやるなら普通GUI
351 :
デフォルトの名無しさん :2007/09/25(火) 23:58:11
他人のことを気にしていたって何にもならないさ。 むしろ調べようもなく知る術すらないのに、気にしてばかりいると すぐに禿げて寿命も縮んで、いつの間にかコロッと死んでしまうかもしれないぞ。 人間、くよくよしない、それが長生きの秘訣だって100歳になった双子が言ってたじょのいこ?
日本語でおk
最近、日本語がまともに読めない、理解できないのはゆとり世代が 社会人になったせいか。時間の流れは速いなw
日本語でおkとか言う奴に限ってまともに日本語を理解できない、使えないのが特徴てき。
自分が知る日本語の範囲内で理解しようとしても、レベルが低いから相手にならない。
こんなプロジェクトに参加すること自体、厚かましい。早々に立ち去れい
>>353
>>353 お前には朝鮮語で話をした方が良かったか?悪い、俺日本人だし
朝鮮語は勉強したことないからさっぱり分からん。
ネタをネタと読みきれない奴が多いな。やっぱパソコンばっかいじってると頭が論理的な思考になって 他人が知って欲しい「意味」を読み取れないのかな
ちなみに、〜じょのいこ ってのは、「簡単じゃないか」を 「こんとんじょのいこ」って言うと、えなりかずき君が言っている様に 聞こえるというネタだから。それを指定したのなら、ネタに反応したのはどっちやら?w
それくらい知ってるんだからね・・・!勘違いしないでよね!!
チョンのスレに迷い込んでしまった
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ <こいつ最高にアホ 彡、 |∪| / / __ ヽノ / (___) /
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ <こいつが最高にアポー
っつか、君たち暇なら何かトランプゲームを作れYO!
君たち、急に静かになったね。そもそも「トランプ」って英語じゃないって知っているよね? トランプとは「切り札」を意味する言葉で、英語では「プレイングカード」といった呼び名。 だからcardsと言うのさ、俺は、ふっ。
>>367 ここは日本語で大丈夫なスレです。
英語に堪能なあなたにはきっと辛いこともあるでしょう。
でも大丈夫。この壷をあなたの家のトイレに飾r
初心者が独学でCやって大富豪とか時間かかりそう
俺も作ろうかと思ってやってみたけどここにうpされてるのとは全く違うし俺のやり方でできるの?って感じ
汚いし長くてもいいならできるんじゃない?まさに今の俺
汚くて長い…正にウンコcodeってか。
373 :
333 :2007/09/26(水) 22:33:00
安心しろ。俺なんてカードを一枚ずつ作っていったバカだ
>>373 エラー(デバッガ例外)がでるのは仕様?
当方C++Builder6
int turn(int *cards , int *hasnum , int *fieldcard , int fieldnum , int pnum){
〜
num = userturn(cards , hasnum[i] , fieldcard , fieldnum , nextindex); ←ココ
376 :
333 :2007/09/26(水) 23:11:47
bcc55は異常なし
378 :
333 :2007/09/26(水) 23:19:25
あれ、うちの5.5ってbuilderじゃないのか compiler
>>376 //戻り値:PASS or 出した枚数
int num , nextindex[ONCE_CARD_MAX];
int i;
if (ptype[pnum] == MAN){
disp(cards , hasnum , fieldcard , fieldnum , pnum);
num = userturn(cards , hasnum[i] , fieldcard , fieldnum , nextindex);
iの値不定じゃない?
Borland C++ Compiler 5.5だけど動いた。そして俺のプログラムが改めてうんこなんだと思った。
381 :
333 :2007/09/26(水) 23:34:18
382 :
333 :2007/09/26(水) 23:38:29
やべ、まだデバッグ用のが残ってたorz 修正版は上げませんけど、247行目、userturn関数の最後から2行目のprintfは消して構いません。 ミス多すぎですねorz 少し吊ってきまつ
みんなプログラミング暦どのくらい?学生?社会人?
384 :
333 :2007/09/26(水) 23:43:55
今自分でやってたら手札に2が5枚出てきました どうみてもおかしいです 本当にありg(ry
ここでプログラミング暦一週間の俺が登場。トランプゲームだと思って甘く見てました。
>>381 のプログラム見てもサパーリ
387 :
333 :2007/09/27(木) 02:06:29
>>386 俺のコードはかなり汚いからw
>>328 さんのとかは一つ一つの関数がすっきりしてて、
俺のなんかよりよっぽど分かりやすいと思うよ
>>383 初めてCに触れたのは3年くらい前
だけどちゃんとしたプログラミングは今回が初
学生でつ
オレは
>>328 のコードより
>>381 のコードのほうが好きだけどな。
コンパイルしていないから実装のレベルは無視。
でもまぁ、なんていうか、もうちょっと空白や改行を大事にしてくれよ。
頑張って7行で書くんだ。
○行って言うけど、それってかなり曖昧じゃね? 1行何文字って定義の元で行数を言わないと 改行するまで1行ってことにすれば、すべてのコードが 扱うコンピュータやエディタが表示可能な限り、1行で済むぜ?
この板で「7行」っつーと、7行×79バイトのことだ。
んで、1行の文字数や情報量が決められているってなら 今度は別にそれに応じて行数は無視してもなら問題はない。 要するに○行という考え方そのものがナンセンスだということさ、ふっ。 俺、今世紀最大の偉人じゃね?ぜってー俺って歴史に名が残るぜ? お前ら名の残らないパンピーは俺にひれ伏すが良い
ナンセンスなハイセンス
っつーわけで、○行なんてわけのわからん規定はやめて ○バイト、半角文字の数を基準にした方が良いじょのいこ?
7行プログラミングってジャンルがあるんだ 単なるネタだしょ
なんでそんなに七行にこだわるのだろうか? なーなーなななーなななーなーなー(DJ OZMA!)
>>390 プログラマの中では共通理解が出来ているから良いんだよ。
1行80桁というのはテレタイプとかの時代からなのかな。
今でも端末エミュレータを開くとデフォルトで横幅80桁の
表示になるよ。7行というのはDVDのコピーガードを、とある
学生がたった7行のスクリプトで破ったという故事から。
>>397 プログラマの中で共通っていうのは分かるが、問題はそこじゃない。
行という言葉に対してどういう定義がされているのか?
そもそも7行にこだわる意味があるのか?
それらを含めたら、7行なんていうこと自体がナンセンスなのさ。
何を問題にして何を言ってるのかわからんが、酔ってるのか?
長かろうが短かろうが正しく動くプログラムが良いプログラム その上で仕様変更があるなら正しく変更できるプログラムが良いプログラム
「7行プログラム」を知らない素人が、的外れな突込みをして恥かいたってとこか
cならせめて2行でしょ
>>401 知っているからこそ疑問に思ったんだろ。そういう定義による7行ってのが
果たして意味があるのか?って話。むろん、こだわる必要がない以上無意味。
また、言うなれば実行プログラムのサイズや使用するライブラリの制限をした方が面白そうなんだが
なんでこの人恥の上塗りしてるの?
>>403 いや、明らかに知らなかったよ。まあ良いじゃん。
408 :
333 :2007/09/28(金) 21:42:48
ちょっと
>>381 のコードは忘れてください
シャッフル処理が明らかにおかしいことに気づきましたorz
カード重複しまくりじゃん……
だが断る
410 :
333 :2007/09/28(金) 22:13:46
void shuffle(int *cards){
int i,r;
srand(time(NULL));
for (i=0; i<CARD_MAX; i++) {
r = (i+1.0) * rand() / (RAND_MAX + 1.0);
cards[i] = cards[r];
cards[r] = i;
}
}
shuffle関数をこれに置き換えれば大丈夫です。多分。
>>388 改行・空白が少ないってことですか?
シャッフルじゃなくて > #define CARD_RANK(n) ((n)/13 == 4 ? JOKER_RANK : ((n) + 11) % 13) のせいじゃね? あと、>410 と >381 のシャッフルに違いがあるとは思えんのだが
>>410 このシャッフル(?)って、全員の枚数は均等になるの?
たとえば53枚を5人で分けたら、3人11枚で2人は10枚になる?
このシャッフルはただたんにカードをきるだけであって配るではないんじゃないの?
>>410 細かいことだけど、ループはi=0からじゃなくてi=1からでok
>>413 >>414 ごめん、勘違いしてた。
>>410 >>388 もオレなんだけど、空白については
>>328 のほうのコードに対するコメントね。
ただ、
>>333 のコードでも、
int turn(int *cards , int *hasnum , int *fieldcard , int fieldnum , int pnum){
if (ptype[pnum] == MAN){
...
}
else if (ptype[pnum] == COM) num = AIturn(cards , hasnum[pnum] , fieldcard , fieldnum , nextindex);
if (num == PASS) (ptype[pnum] == MAN) ? puts("USER:PASS!") : printf("COM%d:PASS!\n" , pnum);
else {
...
}
return num;
}
上からゆっくり読めば分かるんだけど、たとえば
}
else if (ptype[pnum] == COM)
num = AIturn(cards , hasnum[pnum] , fieldcard , fieldnum , nextindex);
if (num == PASS)
(ptype[pnum] == MAN) ? puts("USER:PASS!") : printf("COM%d:PASS!\n" , pnum);
else {
って感じで空行を入れたりインデントしたりすれば、もちょっと分かりやすいかなと思うんだ。
いや、オレの読む力が無いだけかも知れんので、
こういう風に感じる人もいた、とだけ覚えておいてくれれば。
ブロックで囲まない一行をインデントするのはイヤだ
418 :
333 :2007/09/29(土) 00:15:36
>>411 CARD_RANKどっかおかしいですかね?
シャッフルについては、cards配列の初期化とcards[i]とcards[r]のスワップをまとめた感じの処理ですから、
>>381 だとcards[r]=i;はいいとしても、cards[i]=r;はcards[r]に元々rが入っていなければスワップになっていないと思います。
cards[i]の元の値はiと考えても問題ないので(実際には値不定)、
>>410 で良いと思います。多分。
>>412 >>413 さんの言うとおりです。それと多分54の約数以外だと多分バグります。
>>415 それだとcards[0]の値が不定のままの可能性があると思ったのですが……初期化処理はしていないし、グローバル変数でもないので。
(グローバルでなくては勝手に初期化されないんですよね?)
>>381 だとcards[0]=0;と入れていたんですが、まとめた方がすっきりするだろうと思ってまとめました。
419 :
333 :2007/09/29(土) 00:19:45
リロードしてなかった……
>>416 今度から気を付けてみます
どっか別のところは一行ifでもインデント入れてたような気もしますが……統一しなきゃ
本当いうと三項演算子にifの変わりするのもあまり褒められたもんじゃないんでしょうけどね
ああ、すまん勘違いしてた。 でも、配列を{0}で初期化しといて無駄な計算とスワップ減らした方がよくね?
421 :
333 :2007/09/29(土) 00:28:10
>>420 ああ、それ、この前から気になりつつも検索してなかったですw>配列を0初期化
{0}でできるんですね。じゃあそれでやっておきます。
ありがとうございます。
なんかレスしてばかりで悪いのでそろそろ何か自粛しときます。
>>421 学生でここまでできるならすごいと思うぞ。特にわざわざCでトランプとか作る奴も少ないし
>>422 今時それくらいじゃすごいなんて思わんけど。むしろやっている奴は
それくらい出来て当たり前。俺なんてC言語を週1の授業で習った程度で
本格的にやらずとも、学生時代は普通にトランプゲームなんて作ってましたが何か?
Cを独学で2週目に突入。毎日やってるわけじゃないけどこのスレに書かれてるプログラムくらいは 完璧とは言わないけど少しは読めるようになった。ただこれを作れって言われたらシャッフルするところで 限界
あのな、今じゃ普通にプログラム開発環境なんて手に入るし PCも10年前と比べたら性能は雲泥の差でしょ。それに日本は 生活水準も上がってきて、パソコンなんて簡単に手に入る。 この程度のことを高校生で出来ない奴が情報系の学校に来ても 将来が危ういだけなんだよ。すごいじゃなくて当然。
できる奴から見たらたいしたことないし、できない奴から見たら凄い、 で良いじゃん
429 :
411 :2007/09/29(土) 00:55:52
わかった cards[i]=r; と cards[i] = cards[r]; が違うのか。理解した。 ((n) + 11) % 13 って n =0 -> 11 =1 -> 12 =2 -> 0 =3 -> 1 : =11 -> 9 =12 -> 10 ってことだ! すんません理解できますた。おかしくないです。
すごい の基準が主観的、自分基準だからダメなんだよ、成長しない奴ってのは。
パソコン以外できなさそうな感じだな
>>421 なんとなく勘違いしてそうなので書いておく。
配列を{0}で初期化するってのは、
int array[10] = {0};
ってすると、array[0] 〜 array[9] が 0 になる、ってことを期待しているんだろうし
実際にそうなるんだけど、
これは array[0] は {0} で指定されているから 0 になって、
array[1] 〜 array[9] は何も指定されていないから 0 になるんだよ。
だから、int array[10] = {1};
ってやっても array[0] だけが 1 になって、
array[1] 〜 array[9] は何も指定されていないから 0 だ。
間違って覚えないように。
パソコンが出来るという意味すら曖昧だろ。単にパソコンで簡単な操作をするくらいなら 誰でも出来る。しかし、プログラミングが出来る奴でもパソコンの操作が苦手な人もいる。 なんだかんだ言っても、プログラミングには数値計算や理論的な考え方が必要になる。 もっと柔軟な考えを持つんだな。
>>433 たいしたソースでなくても、実際に上げてるぶんだけ、口先だけのお前よりよっぽど凄いよ
初期化子の足りない要素は0で初期化する。 a[5]={0}はa[0]を初期化するだけで他の初期化子の足りない要素は全部0、 a[5]={0}は{0,0,0,0,0}ってことだしa[5]={0,1}は{0,1,0,0,0}になる
>>434 > 口先だけのお前よりよっぽど凄いよ
へ?別に 俺より なんて基準はどうでも良いんだけど。
けど、あれくらい俺には10年前には出来ていたが?
口でできてたって言うだけなら誰でもできるからな
>>437 100%誤作動を起こさないプログラムを作るのは可能だと思いますか?
>>423 が出来ようが出来まいが凄かろうが凄くなかろうが、
このスレの人間にとっては非常に興味のない事なんだが、空気悪くしたいだけなら他所へ行ってくれ
>>440 いや、そうやって食いついてくる負け犬のお前が吠える方が空気を悪くしていると思うんだが?
所詮負け犬の遠吠えだろ?みっともないからやめろ。出来る奴を相手にすると
弱腰になるどころか、詰まらん粗探しを始めて、自分基準で叩き始めるタイプだろ?
出来て当たり前が出来ない奴が何をほざいても、世の中通用しないよ。
ほらっ、路上を見てみろ。当たり前に守る道路交通法を守らない奴が
流れを悪くした方が場の空気、流れが悪くなるだろ?みんながみんな守ってりゃ
流れは悪くならない。しかし、車の数が多くなると、人の数が多くなると
人間ってそういう状況に耐えられなくてね。つい我先にとでしゃばっちゃう奴もいるんだよ。
それが君だ。
>>441 正直どうでもいいし、わかってて面倒だから省略してるのがほとんど。
よくこんな長文思いつくなw とりあえず消えないならコテつけろよ
>>444 っつかお前みたいに煽る方が鬱陶しい。消えるならお前の方だろ
>>443 > 正直どうでもいいし、わかってて面倒だから省略してるのがほとんど。
それが素人志向、なんつって。最近じゃコンパイラ任せな人も少なくないが
知ったかぶるとボロが出て言い訳もみっともないぞ。
>>446 お前、いままで散々ボロだしときながらまだ懲りてないの?
何kmも信号のないような田舎では道交法を遵守するほうが周りに迷惑な場合もある
前にも型変換でボロだしまくったのに、もう忘れちゃったのか
すごいからすごい すっごくすごい
なんかすごくて可哀想なのが沸いてるな・・・ Cはド素人だが俺も勉強がてら何か作ってみようかな 何作ろう、簡単そうなカードゲームってなんかないかしら
>>439 素人かどうか見極めるのにちょうどいい質問だな
> 100%誤作動を起こさないプログラムを作るのは可能だと思いますか? これはプログラムそのものに問題がある場合もあるが、誤作動を起こす動作環境 (ハードウェア、OS)にも話が及ぶんで、現実的には無理。素人とか以前に 100%誤作動を起こさないものがあると言わなきゃ良いだけだよw
極端な話をすれば、100%誤作動を起こさないプログラムも存在することは可能。 ただし、ユーザが誤作動をしていると思わなきゃ良いだけの曖昧さはあり。 まぁ、あの程度のソースで すごい なんていう奴の話は聞き飽きたから、失せろ。
>>453 っつか、揺さぶっている奴らは自分らがそれについて見解を示せよ。
他人に質問するばかりで、自分らは何も答えることが出来ないくせに
その程度って評価するのはおかしい。むしろ、自分が知らなかったことを
付き返されてファビョってんだろ?time()にしろsrand()にしろ。女々しいぞ、お前等。
煽りじゃなくトランプゲームのソースを書いてくれ
>>456 お前441?
引数に代入されるとき型変換されるから、キャストする必要なんて全くないよ
あぁ、分かった 昨日7行云々でアホな事書いて煽られた奴が腹いせに荒らしてるのか
#include <stdio.h> int main() { TranpuGame(); return 0; }
世の中、完全犯罪は可能ですか?って質問に答えてみろよ?w
完全犯罪は露呈しない だから犯罪にならない 故に完全犯罪は存在しない
C++でstaticなメソッドを使って int main() { Game::Main::Start(); } 見たいに書けたら格好よぐね? 意味もGameモジュールのメインモジュールをアプリケーションエントリポイントから 起動してるんだなぁってはっきりしてるし 少なくとも俺が昔使ってた Game()();よりは判りやすい筈w
>>463 それが出来ないという罰ゲームのノリがわからない奴だな
作りやすいトランプゲームっつーと…ソリティア系かね? 要は一人遊び系 コンピュータの思考ルーチンとか要らんし クロンダイク(Win付属のソリティアと一緒)とか イーブン、クローバー、ピラミッド、スパイダー… ソリティア系だけで結構色々ある
いっちゃん単純と思われるのは 神経衰弱
>>466 それは言おうとしたが単純なだけに作るのもつまらなく
言えばお前が作れ言われると思って言わなかった。
>467 コンピュータの思考ルーチン考えるのは単純じゃないな ...いんちきするならそうでもないがw
>>468 神経衰弱には
あるプレイヤーに分かっていて他のプレイヤーには分からないという要素がない。
だからAIが人間的な忘却をエミュレートしない限り勝敗は純粋に確率的なものになるということ。
一度開けたカードは全部記憶しておいて組があれば開けて取る 組がなければまだ開けてないカードをランダムに一枚開けて記憶しておいたカードの中に組となるものがあれば開ける なければもう一枚ランダムに開く これ以外に何か戦略ある?
神経衰弱なのに7並べ思い浮かべてたww
> なければもう一枚ランダムに開く これ、相手に有利になっちゃうだろw あえてすでにひらいてあるカードを選ぶ、って戦略じゃね?
>>472 ならば相手も同じ戦略を取ればよし
進行が遅くなるだけで結果は変わらない
なるほど 最後は未知のカードを開けない方がいいのかな? 期待値はゲームの段階や既知のカード数によって変わらないかな?
千日手は引き分けですかね?
> 進行が遅くなるだけで結果は変わらない 本当に? 2枚目あけたときに 1枚目と同じになるより 過去に開けていたカードと同じなる方が多いと思うんだけど? 次のプレイヤーが有利になるじゃん
相手の戦略にあわせるっていう意味じゃないかな?
やっぱり477は取り消します
いや477のとおりだよ 双方同じ戦略で戦えば有利不利ということもない
加えて相手が一枚だけの戦略をとっていることが丸分かりなんだから 論理的に類推しうる要素が全くないんだよ
>>462 なるほど、確かに犯罪があったのかどうかも分からないなら
完全犯罪以前に闇に葬られるであろう。では、犯罪があったが
犯人が分からない。指紋など決定的な証拠があるけど捕まらない
といった類ではどうだね?まぁ、あれこれ挙げたらキリがない。
とにかくこの世にはすべてにおいて「完全」「完璧」などないと言って過言ではない。
今もこうして、予期せぬ事故は起こる・・・
完全犯罪やバグの無いプログラムを確実に作り出す方法が無いだけで、 どちらも普通に存在するだろ
>>482 だからそういうことだって。いちいち 分かりきったことを偉そうに 解説するなよ、青二才
バグを抹消することは難しい。ソフトウェアの規模がますます巨大化・複雑化し、 すべての可能性をプログラムすることが不可能になってきたからである。 ある研究報告によれば、5000年間プログラムを実行して1回しか障害を起こさないような小さなバグがシステムの安全性を損ねている。 さまざまな角度から検査を行うのだが、米国の民間航空機のように1時間当たり10億分の1以下の障害発生率が要求されるシステムでは、 こうしたバグを除去するには数十万年間も検査をし続けなければならない
>>484 は10年以上も前の話だから今はちょっと事情が変わってるかな
商用アプリのバグに関して免責事項を無効にする法律を作ればある程度は
ターボってついたら強そうに見えるよな
同スート3枚以上のシーケンスなしか? 2上がりありか? 革命は試せなかったけどどうなの?
>>490 見た目があんまりショボイと餅平衛がどっか行っちゃうから
C言語でコンソールアプリの条件を満たしたソレほどショボくないUIを提示しただけ。
中身はサンプル程度に組んであるだけ。
AIに至っては何の工夫も無く兎に角出せるカードを出してるだけ。
同スート3枚以上、革命…そんなローカルルールは知らん。
2上がりあり。つーか作りこんでないから最低限のチェックしか入ってない。
改造して使いまわしやすいように作ったつもりだしツールもフリーで手に入るVC++とTurboC++のどっちでもOKにした。
#unicodeの扱いさえわかればBCCでもgccでもビルド出来る筈だしスートの表示を諦めれば古いコンパイラでもビルド出来る。
なので中身の作りこみは他の奴に任せる。
環境依存か
タロットカードへの拡張に備えて「正位置・逆位置」の概念を導入する
ところで餅平衛って何? もちひらまもる?
mihimaru GTの阿久津博子さんが好みです。だから何やて?言ってみたかっただけっす。 スレ違いすまそ。
>>494 文脈から一見さんあたりのことを言っているのだろう、
新語か?とぐぐってみたが見つからない。
でモチベーションをゆとりっぽく略したものと結論付けた。
今時C使ってCUIでやろうって>1の時点で
モチベーションは限りなくゼロに近いんだから
いまさらどうこう言っても意味がない。
誰もいないな?
498 :
328 :2007/10/06(土) 00:53:52
シーケンスとペア、重なって持っている場合 どんな戦略がいい? 出せるなら出す、ってなんだかなぁ... あと、場より多い枚数のペアがある時、多い枚数のシーケンスがある時 とか... いきづまってまつ
基本ルールがよくわからんのだよ
>>498 現時点で場に出たカードを除いた状況で、他のプレーヤーがより強いカードを
出せる確率を計算するようにしたよ。
場のカードを全部数えるのかよコンピュータは、とは思うけど、プロ棋士同士で
お遊びでやった大富豪で覚えてた、って話もあったから有りかと。
人とプレイするときも、絵札以上は覚えとくから別に構わないと思う
大富豪最強AIでも作るのか?
勝負するたびに成長するコンピューターとかどんだけwwww
>504 少年漫画の世界にはいそうだなw
大富豪で世界征服か
悪のマッドサイエンティストをやりたかった 自称主人公を科学の力でこてんぱんにしてくやつ
コロコロとかボンボンでありそうだなwwww
>500 「他のプレーヤーがより強いカードを出せる確率を計算する」って、そんでどうするの? より強いカードを出せる確立が高い場合は、自分は出さない、って事? 場に出てないカードを考慮するだけ? 他のプレーヤーの持ち枚数とかは何か考慮している?
>>510 そこで得られた確率を、
>>281 の思考ルーチンに突っ込むの。
要するに、
>>500 は認知、
>>281 で判断。
>他のプレーヤーの持ち枚数とかは何か考慮している?
当然。相手が一枚しかないなら、階段出せば相手は嫌でもスルーだし。
>281 404 Not Found
今度こそ誰もいないな
うむ
515 :
127 :2007/10/08(月) 20:52:17
誰もいないようなのでしばらく独り言をば まずケースに入ったトランプを用意しよう。 ケースの中にはトランプが順番に入っている。 A,2,3,…Q,Kのランク順でスペード,ハート,ダイヤ,クラブのスート順だ。 誤解のないように例を出すと,スペードのKの次はハートのAになる。 またクラブのKの次にはJOKERが二枚入っている。 この計54枚のカードを使ってゲームをするわけだ。
ほほう、それで
構造体で作ったらあと楽じゃない?
518 :
127 :2007/10/08(月) 21:40:59
私以外まだ誰もいないようだが話を続けよう。 さて,大富豪というゲームを君たちは知っているかな? 1970年代に日本のトーキョーで生まれたとされ,かつては大貧民と呼ばれたゲームだ。 プレイヤーは複数で,ゲームの最初に彼らに等しくカードを全て配る。 等しくと言ってもプレイヤーの数によって端数が出る。 端数の処理の方法はいろいろあるが,今回は端数を気にせず最後まで順に配り終えることにしよう。 おっと,言い忘れたが,今回シャッフルはしない。
まだ君以外誰一人とここにはいないので、 そのまま話を続けましょう
520 :
127 :2007/10/08(月) 22:43:16
各プレイヤーは自分に配られたカードの中から 役―1枚,2枚以上の同位札,もしくは3枚以上の同一スートによるシーケンス(※注:連番)―を作り,順次場に出していく。 持っているカードが無くなれば,あがりとなってプレイの輪から抜けることができる。 残りのプレイヤーが一人となった時点で1ゲーム終了となり,あがりとなった順に順位が決定する。 最後に残ったプレイヤーは最下位だ。 場とは役を出す場所であり通常1ゲームに複数の場が作られるが同時に複数の場は存在できない。 場が破棄されることを場が流れると言い,場が流れたあとは新しい場が1つ作成される。 ゲーム開始時に最初の場が1つ作成される。 場に最初に役を出すプレイヤーを親と呼び,その場に出すことの出来る役の種類を決定できる。 最初の場の親を決定する方法は,これも様々な方法があるが,今回はダイヤの3を配られたプレイヤーとする。 カードは3が最も弱く,続いて4,5,…,Q,K,ときてA,2の順に強くなる。 そしてJOKERは2より強く,またワイルドカードとしても使用できる。 カードの強さに遵って役の強さが決まり,場に出す役は場の役―最後に場に出された役―より強くなければならない。 出せる役がない場合はそのプレイヤーはパスとなり次のプレイヤーの番となる。 場のプレイヤー―場の役を出したプレイヤー―以外のプレイヤーが全てパスとなったとき, その場は流れ,そのプレイヤーが次の場の親となる。 場のプレイヤーがあがりとなり,かつ残りのプレイヤーが全てパスとなったとき, その場は流れ,そのプレイヤーの前に場のプレイヤーであってまだあがりでないプレイヤーが次の場の親となる。 基本的なルールはこんなところだ。 何か質問は? では次回。
革命ルールはござらんのか! CPUの人間的思考の実装方法はまだか!
基本戦術 既に場に出ているカードを覚える 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 :2007/10/13(土) 18:56:32
ここにはもう誰もいないのだ
阻止
525 :
127 :2007/10/13(土) 22:52:16
そして誰もいなくなった
阻止
527 :
127 :2007/10/13(土) 23:00:25
プログラマーには精神病を患う者が多いと言われるが その病状の一つに自分が誰かに監視されているといった妄想がある そうここには 誰もいない 誰もいない 誰もいない
ものすごく寒いことになってるね
529 :
127 :2007/10/13(土) 23:45:04
自分の内には誰もいない 従って自分の外にも誰もいない 誰かがいるという幻想こそが 不幸の根源なのだ
みょん
リアルタイムで中二病患者を見たのは久しぶりだわ
532 :
127 :2007/10/14(日) 09:51:02
このスレに誰もいませんよ
533 :
127 :2007/10/14(日) 22:38:02
誰もいないことを確信した
これが噂の、かまってちゃんか
535 :
127 :2007/10/14(日) 23:08:35
誰もいないということを疑う余地はない
536 :
127 :2007/10/14(日) 23:22:38
誰も居なかった
そんなことより、大富豪作りやがれ
538 :
127 :2007/10/15(月) 19:47:08
何故誰もいないのか 実は疑問がないわけではない
ほほう、それで
540 :
127 :2007/10/16(火) 03:00:00
さて誰もいなくなったところでそろそろ本編をば 最初はシンプルに行こう。 ややこしいことは無しだ。 プレイヤーの数は5人とし,全て同じAIを使用する。 カードは1デッキとジョーカー2枚の計54枚とし,毎回ゲームのはじめにシャッフルする。 初回は最初に登録されたプレイヤーからディールする。 そしてダイヤの3を持ったプレイヤーを最初の場の親としてゲームを開始する。 初回以降は前回最下位のプレイヤーの次のプレイヤーからディールする。 そして前回最下位のプレイヤーを最初の場の親としてゲームを開始する。 役はシーケンスが3から5枚,同位札が2から5枚,そして1枚札,とする。 AIが場の親のとき,シーケンス,同位札,1枚札,の順に,枚数のより多い役のうち,弱い役から出していく。 AIが場の親でないとき,場の役と同種でより強く,かつ手持ちのカードで作れる最も弱い役から出していく。 またジョーカーをワイルドカードとして使用可能なときは使用する。 同様にジョーカーを同位札,または一枚札として使用可能なときは使用する。
最初でシンプルに行くなら、 ・人数は2人でジョーカーは無しで52枚 ・始める人も固定、順番も同じ ・カードのシャッフルなんてしない 辺りが適切では無いか? 流れをまず作って、他は後から付け加えると楽ジャマイカ?
542 :
127 :2007/10/16(火) 18:11:36
仮に誰かがいたとしても 誰であるかも分からないのに 誰かがいるという認識が間違いでないと どうして言えよう
その微妙なコテハンはなんだい?
544 :
127 :2007/10/16(火) 20:35:00
ここで面白いのは自己と他者の区別は (厳密にはそうではないが実用上) 自己の認識に委ねられているということだ すなわちそれが自分の書いたものであるという記憶によってのみ 自己の他者との境界を認識しうるのである 加えてそれが自分の書いたものであるという証明が自助努力の範囲内において不可能であるが故に 誰もその存在を主張する以上のことはできず したがってここには誰もいないという認識を誰も否定することは出来ないのである 「匿名非同期コミュニケーションの真実(非売)」より引用
545 :
127 :2007/10/16(火) 20:39:27
じゃあ俺も
546 :
127 :2007/10/17(水) 21:12:19
そうこうしているうちに 本当に誰もいなくなってしまった
547 :
デフォルトの名無しさん :2007/10/18(木) 02:56:09
文字列に強さを持たせるのがわkらん
548 :
127 :2007/10/18(木) 03:04:03
さてそろそろ続きをば シンプルという点に疑問の余地ありとの意見だが, たしかに上記のルールでは各ゲームごとの独立性が不十分であり, 出発点とするには不適切かもしれない。 そこで,ディールの開始プレイヤーと最初の場の親に関するルールについて検証してみよう。 まず以下のことについて確認しておく。 全てのプレイヤーが同一のアルゴリズムに従ってプレイするとき, その結果は各プレイヤーの持ち札と最初の場の親によって一意に決定される。 ここで,各プレイヤーの持ち札と最初の場の親が完全にランダムに決定されるとき, 任意のプレイヤーが任意のランクになる確率は等しくなる。
こんな大袈裟に気持ち悪いレスで熱弁してるくらいだから、さぞ素晴らしいものを作ってくれるんだろうな
口だけ野郎の典型的パターンに何を期待してるんだよ
551 :
127 :2007/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 :2007/10/18(木) 19:43:52
自分が本当に理解しているのは過去の自分だけである おっと言い忘れたが,最初のゲーム開始時のプレイヤーのランクは全て0だ。 それから連番は1.ではなく(1)に訂正する。 さて上記の結果からは,Totalの値が全て2000付近であることが分かる。 ゲーム回数は10000であるから各ランクになる確率は等しく1/5ということになる。 つまり,勝負は完全に時の運ということだ。 更に,各ランクから各ランクへの遷移確率も全て0.2付近である。 つまり,現在のランクと次のゲームのランクとの相関はないということを意味する。 大富豪がゲームとして成立するには 人間の感情的な部分を考慮し,それをある程度実現するルールが必要である。 (a)誰も最下位にはなりたくない。最下位になったとしたら出来るだけ早く最下位を脱したい。 (b)誰もが一番になりたい。一番になったとしたら出来るだけ長く一番であり続けたい。 この二つを実現するルールは既に存在する。 それらについて統計的確率の側面から検証してみよう。
553 :
127 :2007/10/19(金) 20:37:11
誰もいないか
いるけど
いないか
556 :
127 :2007/10/20(土) 00:18:51
誰もいないと言ったのだ
557 :
127 :2007/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 :2007/10/20(土) 15:21:54
今日も誰もいない 当たり前か
具体的なコードを出したまへ
560 :
127 :2007/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)の結果よりディール開始プレイヤーは結果に影響しないことが分かっている。 よって「初回以降のゲームの最初の場の親を前回のゲームの最下位プレイヤーにする」というルールが ランク遷移率に偏りが生じた原因であると考えられる。
わっふるわっふる
わっふるわっふる
わっふるわっふる
わっふるわっふる
565 :
127 :2007/10/24(水) 01:17:00
よし誰もいないな
みたいだな!
567 :
127 :2007/10/24(水) 01:44:54
568 :
127 :2007/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)の結果よりカード交換がランク遷移率に偏りが生じた原因であると考えられる。
>>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)
誤爆の上にjavaのスタックトレース全貼りか
良スレあげ
572 :
デフォルトの名無しさん :2007/10/25(木) 01:30:07
カードを構造体でメンバをマークと数字の二つを作って数字だけ比較するってやり方でいこうかと思ったら構造体 を理解してない俺には無理だった
構造体を理解していないのにどうして構造体で実装しようと思い立ったんだ?
「構造体という素敵なものがあるらしい」 という程度の認識はあったからじゃね? 放射線とかよく分からないけど原発は欲しいよね、素敵だね、みたいな。
そうだねプロテインだね
576 :
127 :2007/10/25(木) 11:32:34
うんこー
577 :
127 :2007/10/31(水) 20:01:52
誰もいない それが真実であり現実だと認めたくない心が私の甘さの元凶だ 夢で終わると分かっている夢は語る価値を持たない 目的は果たされるべきだ
578 :
127 :2007/10/31(水) 20:04:46
うんこ
オナニーしたい
580 :
127 :2007/10/31(水) 20:09:14
おっとコテ忘れ
581 :
579 :2007/10/31(水) 20:21:21
去ね
582 :
579 :2007/10/31(水) 20:22:01
583 :
579 :2007/10/31(水) 21:24:01
584 :
579 :2007/10/31(水) 21:53:13
585 :
579 :2007/10/31(水) 22:16:52
586 :
127 :2007/10/31(水) 22:25:53
と、自演してみた。
587 :
579 :2007/10/31(水) 22:40:30
588 :
127 :2007/10/31(水) 22:45:43
心配ありがとう^^
アホが来て一気に糞スレになったな
590 :
127 :2007/10/31(水) 22:55:37
これからもがんばります^^
林先生に診てもらったら良いかもね
592 :
127 :2007/10/31(水) 22:57:28
それはいい考えですね
593 :
579 :2007/10/31(水) 23:08:53
まああれだ、正直すまんかった
594 :
デフォルトの名無しさん :2007/11/01(木) 23:10:21
大富豪のコンピュータで強いカードから出す、弱いカードから出す、ランダムに出す、 他に何か戦略ってある?
ゲーム製作板で聞いたら教えてあげるよ
597 :
デフォルトの名無しさん :2007/11/02(金) 00:48:15
大富豪は詰め将棋に近い感覚があると思う。 相手のカードが見えないので、もちろん運頼みの側面もあるのだが。 例えば手持ちカードが「899J22」とあって、今場のカードが6とかだったら、 8で切る -> 9のペアを出す -> 2のペアはまず他から出ないので自分で切る -> Jを捨てて和了り となるわけだ。 この状態の手持ちカードを、まあ「必至」と呼ぼうか。 もちろん相手の手札との絡みもあるので、確率的なものになると思う。 上の例で言えば、2のペアを持っている敵がいて、自分より先に出されてしまう場合もある。 自分以外のプレイヤーが4人いれば1/4の確率で2のペアを持っている奴がいるので、「75%の必至」みたいに自分の手札を評価できることになる。 まあジョーカーとか、ゲーム開始前のカード移譲とか色々あるのでややこしいとは思うが。 で、この考え方で行くと、プレイヤーのすべきことは、より高確率な必至を作れるカードの残し方を考えながら捨てていく、ということになる。 ということで、AIを作る場合には、残すカードを評価する評価関数を組み立ててやれば良いんじゃないかな。と酔っ払いの俺が思った。
598 :
デフォルトの名無しさん :2007/11/05(月) 12:41:24
ブーン
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; } 疲れた。続きは明日。
日付が変わった。 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]; }
戻り値の型書き忘れ。charだ。
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 :2007/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 :2007/11/09(金) 21:19:35
(5)の結果から何が分かるだろう。 下位ランクは中間ランクまでは容易に上がれ,そこから先は運次第。 上位ランクは上位であり続けるか下位に落ちるかのギャンブル。 そこで思い出して欲しい。 このゲームが生まれた1970年代の日本を。 当時は高度経済成長期から安定成長期への移行時期で, 終身雇用制度に基づく一億総中流といった考えが強かった時代だ。 成果主義も格差社会もまだ一般には登場していない。 これまでの実験結果によって明らかになった, たった2種類のルールによってもたらされるゲーム性は, そうした時代背景を反映しているとは言えないだろうか。
うだうだ独り言はキモイ 多くの新しい知を混ぜるためにage
606 :
127 :2007/11/10(土) 07:24:54
誰もいなければ誰と戦おう 誰もいなければ誰を傷つけよう 誰もいなければ誰を滅ぼそう
607 :
599 :2007/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 にするとして、大貧民全体としての
何ゲームかセットにしたものは何て呼べば良いんだろ。
while( true ) { printf(" ∩_\n"); printf(" 〈〈〈 ヽ\n"); printf(" 〈⊃ }\n"); printf(" ∩___∩ | |\n"); printf(" | ノ ヽ ! !\n"); printf(" / ● ● | /\n"); printf(" | ( _●_) ミ/ <こいつ最高にアホ\n"); printf(" 彡、 |∪| /\n"); printf("/ __ ヽノ /\n"); printf("(___) /\n\n"), }
>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 :
デフォルトの名無しさん :2008/03/14(金) 10:33:40
あ
空気読めない中二病のせいで誰も居なくなったスレだ
test
あれ?終わり?どうせなら、ババ抜き、ポーカー、ブラックジャック、スピード、 7ならべ、大富豪(大貧民)、フリーセル、ソリティアくらい作ろうぜ?
JSでコマンドプロンプト用ソリティアとピラミッドならやったことある。 でもオブジェクト作りまくってるから C言語には移植しづらいだろうなあ。
>>613 大富豪はやってみたい。まずは最後に2人になった時点の読み切りを考えると面白そう。
大富豪を作るのか 大富豪の思考ルーチンを作るのか
618 :
127 :2008/05/12(月) 23:55:26
あれからもう半年 599氏は元気かな
619 :
127 :2008/05/14(水) 06:28:57
おはようございます
620 :
127 :2008/05/17(土) 21:27:44
結局誰もいなくなってしまった 自分で追い出しておいて何を今更というか まさにそのとおりなんだけど さてそろそろ再開するかな
その後、>127の姿を見た者はいない…
622 :
127 :2008/05/21(水) 23:52:44
「実はまだその辺にいたりするのであった」
623 :
127 :2008/05/22(木) 00:13:59
訂正 「実はまだその辺にいるのであった」 だな
625 :
599 :2008/05/29(木) 00:24:24
>618 すまない。飽きた。
626 :
デフォルトの名無しさん :2008/06/29(日) 06:19:48
よし、何か作ろうぜい!ババ抜き、7並べ、ブラジャックなら コンピュータにショボイけどA.I機能を持たせて対戦ゲームを 作れそうな気がしてきた! 今、構造体にカードのスーツと数字を入れて、シャッフルするところまででけた!
よっしゃ、今度はプレイヤーの人数を決定して、カードを人数分 振り分けるところまで出来た!さぁ、ナニ作ろうか?
7ならべでよろしく。 ちょっとAIのアイディアがあるんで、思考エンジン部だけ簡単に追加できるようにしておいてくれ。
うっし、って、各プレイヤーに配布した後、並び替えるところに着手しようとしているところで 徹夜明けなんで寝まつ(^^; すまそ。
うおっ、せっかく作ったが、やはり仕様を変更しようってことで 書き直しまつ
がむばれ〜
632 :
127 :2008/07/12(土) 23:55:35
626氏も結局いなくなってしまったようだ モチベーションを維持するのって案外難しいね
634 :
デフォルトの名無しさん :2008/07/23(水) 11:01:50
お、盛り上がってるなぁ Cじゃなきゃ駄目か?
637 :
デフォルトの名無しさん :2008/11/27(木) 12:22:48
大富豪おもしろそう やってみるか
638 :
637 :2008/11/30(日) 23:30:31
だ、誰もいないのか!? とりあえず、データ型は3から10、ジャック、クイーン、キングを整数の3から12として Aと2は整数の13と14でいいか 強さの比較が楽で ペアとかトリプルとか革命とか階段とか8切りとかどうやって処理させようか 完成するまでだれも来なかったりしてw
いや、「やってみるか」じゃ突っ込みようがないから。
640 :
637 :2008/11/30(日) 23:49:24
いろいろロジック考えてるうちに実はCの勉強にはとってもいい題材ではないかと思えてきた データ型、文字列の操作、構造体、関数、条件分岐、構造化やモジュール化、デバッグなどが全部学べる
641 :
637 :2008/11/30(日) 23:53:59
あ、革命はすべてのカードの値に-1を掛ければいいのか あれ?革命したあとでもジョーカーが最強だっけ?
できるかつまるかしてからおいで。
ksk
ゲ製でやれやクズども
>638 そんな話は 昔 >231 とかにあったよ
とりあえずcard構造体を宣言してみる。
まず、class suitを。
「C言語」なんだからclassはダメだろ。 構造体と、構造体を操作する為の関数くらいの構成で。
#define class struct
typedefの方がいい
無理だろ・・・
654 :
デフォルトの名無しさん :2008/12/07(日) 22:22:55
BASICで書かないか?
スレタイ
BASICて…もっとキツくないか?
657 :
デフォルトの名無しさん :2008/12/19(金) 15:10:13
VBでポーカー作ってるけど、ストレートの判別方法だけが難しい 誰か暇な人教えてください
自己解決しました。 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
>658 K,A,2,3,4 はストーレートぢゃない (ローカルルールなのかな?)
> ストレートにおけるAの取り扱い > > ストレート(およびストレートフラッシュ)では、AはKとも2ともつなげる事が出来る。 > すなわちA-2-3-4-5もA-K-Q-J-10もストレートとみなされる。 > しかしQ-K-A-2-3のようにK-A-2を含むものはストレートとはみなされない。 意外ト難シイノネ
あ、でも日本ポーカープレーヤーズ協会だと > ストレート( straight ) > 5枚連続カード > 例:5s 4d 3h 2s Ac > なお、AとKは、連続しているとはみなされません。 > (例外として、AKQJT は、ストレートとみなされます。) > 例えば、4h 3s 2d As Ks は、ストレートではありません。 か。どちらにしてもK-A-2は繋がらないみたいだな。
>>661 回りくどい言い方だが、要するに普通のルールってことだよね。
どっちにしてもC言語で作るという枷からは逃れられない このスレでは他の言語で作る奴はその時点でルール違反なのだ
C言語でスクリプト言語のインタプリタを作って その言語で組む事くらいは問題ないですよね?
トランプゲームのデータとロジックの実装がC言語でなされていない場合 C言語でトランプゲームを作ったとは言えないだろう せいぜい実装済みオプションのオンオフ程度が限界ではないか
しかし今更Cというのもな・・・。 C++で組みたいぜ。
誰でも楽をしたい そして楽を正当化する経済的な理由もある ここはそういう世俗的な合理性に歯向かうスレです プログラミングは苦行であり 他の言語を使って楽をしようとする不信心者は戒められなければなりません
別にカードデータくらい素の構造体で難なく作れるだろ 今時のやつって規模も何も考えずにデザパタとか適用しようとするの?
Cだとまともな名前空間もオーバーロードもないから その構造体を操作する関数の名前に 構造体名を付けたりすることがよくあるが、 関数名が長くなって仕方が無い。
>668 オブジェクト指向だからと言って、必ずデザパタを使うワケではないぞ。
カプセル化もデザインパターンの1つだと思うんだ。
保守
673 :
476 :2009/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 :2009/02/18(水) 13:24:22
私が作ったトランププログラムです
トランプの綴りはtrampでなくtrump ただしtrumpの英語での意味は切り札のことで 日本語で一般に言うところのトランプはplaying cardsもしくは単にcardsという
>>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枚目の手札の数値
ストレートであると判断された場合、単純に「ストレート」の文字列を出力するプログラムだけど、絵柄の判定は俺の持ち合わせる知識じゃ無理だ
フラッシュの判定ができるならできるはずだが
ダメだこのスレ。
なにこの低レベルwwwww
いきなりどうしたんだ
>>681 質問者より先に回答者が誘導されただけ。
>680 thxです。 どういうのがいい書き方なのかいまだに分かってないんで今度図書館で借りてこようと思う。
>>684 もともとrand()は疑似乱数を発生させる。
発生する数値は毎起動ごとに同じパターンになる。
そこで始まりをずらすためにsrand()を呼ぶ。
そこで同じ数字を渡してたらやっぱり毎回同じパターンになるので
time()で最初の一回だけ現在時刻を渡してる。これなら秒さえかわれば違うパターンになるからな。
ゲームによっては数字を入力すると同じ配列になるやつがあるけど
それはその数字を直接的にしろ間接的にしろその数値をsrandに渡してる。
乱数は生成する値の範囲制限が一番難しい 浮動少数点数使うと激遅な環境ではいつも悩む
ん?どゆこと?
普通に%と+で範囲制限できないのか…? javaとかC#なら、random.nextint(int max)で最初っから範囲取得できるけど。
>>688 ばらけてほしいゲームだとダメぽ
俺は線形合同法避けるだけだけど
人によっては%も嫌がる
srand( (unsigned)time(NULL) ); のが正しい気がする
いちいちキャストしなくても型変換されんだから省略しても別にいいだろ。
>>691 time_tがunsigned intより大きい型の環境では、
警告回避のためにキャストが必要かもしれない。
オジェ・ル・ダノワ
ランスロット
696 :
デフォルトの名無しさん :2010/06/13(日) 23:27:35
ちん
作ろうぜ
698 :
デフォルトの名無しさん :2010/07/02(金) 10:10:52
作ればあ
作るとき
作りけり
701 :
デフォルトの名無しさん :2010/07/04(日) 21:22:01
ボーカー誰か作って。 賭け方とか本式の奴。 自分以外はAIで。 ディーラーは巨乳で80万ポリゴンくらいのリアルなバニーちゃんがいい。 あそこの毛の処理が甘くてかすかにはみだしてると最高!
>>701 俺の作ったライブラリにバニーガールやキャンギャルを出力する
ライブラリあるよ。
>>701 バニガは同意するが、
その次の一文はひくわ…
オレもそれでひいた
706 :
702 :2010/07/05(月) 22:06:08
がんばった俺が馬鹿らしいな おまえらただのバニーガール好きだったか・・・
糞虫二匹が潰したスレッド。
C++なら何とか…
Javaだったらこのスレ参加したいが…
C#ならなあ・・・
713 :
デフォルトの名無しさん :2011/07/09(土) 09:15:07.30
今なら、HTML5 Canvasの学習に丁度良い題材かも
714 :
デフォルトの名無しさん :2012/06/19(火) 15:30:00.71
で、どうなった?
715 :
uy :2012/06/20(水) 15:53:28.97
ほんっと 今更、時代遅れ言語であるC言語で こういうゴミをこれ以上量産すんなっつってんのに 聞かねーバカが後を絶たない お前らの上げてるソースで迷惑してる層を考えろ
いいじゃん、好きにやらせておけば まあ俺は絶対Cではやりたくないけどね
今やOOCが当たり前の時代にCでトランプゲーム作るのがテーマになるとは w ん? キックオフ2007年スレか。 確かに、当時、OOCはあまりまともな例が無かったな。 無理も無いか。
は?
最近C言語も慣れてきたから、ヒマなときにちょっとずつやってみようかなあ コンソール用ソリティアとかでもいい?
720 :
uy :2012/06/30(土) 13:33:05.49
>>719 意味がわかんねえよ
作りたければ勝手にやれ
誰も興味ないし
なんで時代遅れのC言語で、しかもCUIで作ろうとするのかわけわからんよw
バカなの?
二度繰り返す
作りたければ勝手にやれ
作りたければ勝手にやれ
作る気があれば1時間で作れるネタなのに
聞いてくんなうざい
一生C言語やってろよ
じゃあgorubyとC、どっちがバカ?