1read 100read
2012年6月プログラム144: C言語でトランプゲームを作りたい (721) TOP カテ一覧 スレ一覧 2ch元 削除依頼
COBOL vs Java 2戦目 (951)
スレを勃てるまでもないC/C++の質問はここで 20 (965)
【Lisp】プログラミング言語 Clojure #2【JVM】 (482)
【初心者お断り】ガチ規格準拠C専用スレ Part134 (206)
【ヤパーリ】XMLをS式に置換えていくスレ【LISP最強】 (240)
文字コード総合スレ part7 (677)

C言語でトランプゲームを作りたい


1 :07/09/16 〜 最終レス :12/07/01
ばば抜き、大貧民、いろいろあるけどこういうのってほとんどがJavaとかだよね。
CUIでもいいからみんなで作ろう

2 :
            ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつ最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /

3 :
>>1
俺はトランプ嫌いだから作らないけどお前は頑張れ。
決めたからには最後までやり遂げて見せろ。

4 :
簡単なところでポーカーの役判定とかから始めたら?

5 :
スピードで

6 :
もっと簡単なじゃんけんから。それを発展してあっち向いてホイを。

7 :
あみだくじでどうだ

8 :
あみだなら入力に関係なく結果そのものをrnd()で決定できるな

9 :
>>6
それ面白そう。
デジカメか何かで取り込んだ人間の顔写真から
顔の向きを判断するのが勉強になりそうだ。

10 :
すみません
ポーカーの判定を作ってみたのですが止め方がわからないので教えて貰えますか

11 :
ソース見せな

12 :
#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++;
}
//つづく

13 :
//つづき
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;
}

14 :
>>12-13ですが、表示が流れてしまって確認ができません
どうやったらとまりますか?

15 :
while(1)で無限ループしてるからだろ
forループにして適当な回数でやめればいいじゃん

16 :
役判定のレベルに比べて無限ループに気づかないとか、差が激しすぎんだろw
他人のソースの丸写しか?

17 :
D貧民とかあるでよ

18 :
CUIでいいから大富豪作りたいな。地方によっては大貧民やド貧民とか言うらしいな

19 :
とりあえずこのローカルルールを全部実装してくれ
http://ja.wikipedia.org/wiki/%E5%A4%A7%E5%AF%8C%E8%B1%AA

20 :
CUIはきついな。cursesライブラリとか駆使するのか?

21 :
>>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

22 :
ネット対戦とか出来ると楽しそうだよね。

23 :
なんでゲームって単語がスレタイにつくと、ム板とは思えないほど低レベルなスレになるんだろう

24 :
ム板は割りと全般的に低レベルかと…
まあ気にすんな

25 :
最初はカードをランダムで配るだな

26 :
次は配ったカードをソートだな

27 :
プレイヤー人数は?何人でするか。人対CPU。CPU対CPUとか

28 :
まぁ何でもいいから一個ずつ書いていけばいいんじゃないか?
カードをランダムで配る関数、ソートする関数とか

29 :
C言語初めて一週間の俺がやろうと思ったが無理だった。頭のいい人教えてくれ

30 :
じゃあとりあえずプレイヤーは二人、んでカードをランダムに二人で配るってのは?面倒だからジョーカー抜きで

31 :
どうすんの?二人でやっても4種類のカードを13枚ずつ、ランダムに重複せずに分けるとか俺には無理ぽ

32 :
現実をシミュレートすると重複しないようにカードを排除することになるが、
とりあえずランダムに求めておいて重複していればまた求める
一応はこれで十分だろう

33 :
>>31
カードを配列に入れて先頭から順にランダムに選んだ要素とスワップしてシャッフル。
あとは配列の先頭から使いたいだけ使えばいい。

34 :
とりあえず、二人で勝負、革命とかルールなしで、大きい数字を交互に出していく、どちらもだせなければ
その場をきる。先にカードがなくなったほうが勝ち。これを作ろうとする猛者はいる?

35 :
>>34
CUIで大富豪作ればいいのか?

36 :
             ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <<<1は最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /

37 :
今のところ、カードは数値だけで良いの?

38 :
http://www.freewebs.com/photoradio/?/880143

39 :
>>35 まぁ最初はそれからじゃないか?あとからいろいろと機能を付け加えれば

40 :
できるやつは大富豪くらいなら一日あればできるのかな

41 :
ルールどおりに動く程度のものなら1日あればできるね
つーか大富豪ってローカルルールが多すぎてどれが標準的かよくわからん

42 :
とりあえず細かいルール考えずに>>34を実装してみようか

43 :
おう
がんばれ

44 :
cursesライブラリ使ってつくって。

45 :
ttp://www.tnlab.ice.uec.ac.jp/daihinmin/2007/
このスレで応募してみるとか

46 :
まぁちょっと面倒だけど大富豪くらいならfor文や配列ができればいけそうじゃない?

47 :
>>45 ネットワークなんかはあとからでも

48 :
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 */
でよい?

49 :
あ、rankの後ろにごみ入っちゃったw
あと、表示は
[SA][H10][DJ][CQ]...
- 00 -- 01 -- 02 -- 03 -...
入力は
04,12,...
でおk?

50 :
とりあえずそれを二人にランダムで配りそれをソートだな。昇順並び替えかな

51 :
> 昇順並び替え
"3","4","5","6","7","8","9","10","J","Q","K","A","2"
の順がいいと思われ

52 :
お、忘れてた。3が一番弱いんだっけw革命は後回しにそれでいってみるか?

53 :
64bit の変数一個用意して、1 bit 目が立っていたらハートのエースを、
53bit 目が立っていたらジョーカーを持っている事にすればソート不要。

54 :
for文や配列くらいしかワカラナイ俺にも作れるかな

55 :
スペード 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 :
カードの番号 0〜51 を 13 で割った
商 0〜3
余 0〜12
を使う
・表示
・ソート(大小判定)  ...は 0〜12 のままじゃダメだなw

57 :
絵柄に2bit
A〜Kで13bit
ジョーカーで1bit

58 :
とりあえず二人にカードを分けてそのカードを表示するってのは?とりあえず死合はまだで

59 :
トランプはカードに重複が無いから、プレイヤー 1 人辺り 53bit あれば十分だよ

60 :
そこまでして節約する必要なんてないだろ

61 :
節約と言えば、ここ↓の過去スレに色々あった希ガス
七行プログラミング part5
http://pc11.2ch.net/test/read.cgi/tech/1142467359/

62 :
#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;
}
配るまで

63 :
配るまではまぁなんとかだな。そういうや先攻後攻を決めるにはどうすればいい?0か1かで判断?

64 :
」・、ヲ

65 :
大富豪でカードを作る。ジョーカーつき。二人でやってルールは革命くらいでいいかな。作れるか?

66 :
乱数はrandでいいと思う?
もっと高精度なの使う?

67 :
いいんじゃないか?偏りがあるとか聞くけどそこまで精度なのは求めてないかと

68 :
暗号用とか技術用だと乱数機工夫した方が良いが
ゲーム程度なら要らないかと
ゲーム向きの乱数生成法としては
時計orタイマーをキーにするって方法もある
ユーザ入力のタイミング次第で結果が変わるので、お手軽かつ偏りが少ない

69 :
6人プレイの革命有り、ジョーカーのワイルドカードありで造った事有るなぁ。

70 :
C++じゃマズいんだっけか

71 :
Cでだからな。表示もprintfだけでも何とかなるぽ。ちょっと面倒だけど

72 :
int pos=(i+1.0) * rand() / (RAND_MAX + 1.0);
これてどういうこと?

73 :
rand() / (RAND_MAX + 1.0)ってのは0以上1未満の数を一様乱数で返す
だっけ?面倒だろうけどコメントつけていってw俺にもサパーリ

74 :
宿題スレでも見とけ

75 :
(i+1.0) * rand() / (RAND_MAX + 1.0) は rand() % (i+1) の高精度版だと思っとけばOK

76 :
// 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()の値によっては、乗算をした瞬間にオーバーフローする可能性がある。
上に書いたように乗算を後からやれば問題ない。

77 :
(i+1.0) * rand() / (RAND_MAX + 1.0);ってのは0以上i+1未満の数をランダムで返すってこと?

78 :
>>77
そういうこと。
整数なのでi+1未満ってことは、i以下ってこと。

79 :
作って思ったこと。全部mainに入れ込んでた俺は明らかに初心者。しかもカードを小さい順から出すってのがわからない

80 :
手札を番号順にソート
パス?=真
番号の小さいカードから順に見て{
   場札より大きいなら{
      カードを場に出す
      パス?=偽
   }


81 :
あ〜…カード出した時点でループ抜けなきゃマズいな

82 :
その処理全体を関数にして
出したらそこでreturnすればフラグは要らないな
そうすれば、ループ回りきった=出せない、なのだから

83 :
手札ソートについては、あらかじめ3〜K,1,2の順をデフォルトにしとけばいいじゃん
何も考えずに1〜Kの順で配列にするから、順番入れ替えの必要があるわけで

84 :
手札って強さの順にソートする必要あるのか?

85 :
見易さのために決まってるでしょ。

86 :
1から13の順じゃ駄目なのか?

87 :
比較関数はソート以外にも使える

88 :
強さ順にソートにすれば、いくつかの処理が簡単に書けるんじゃね?

89 :
2と3は繋がらないしね

90 :
出力は>>21あたりが見やすそうだな

91 :
そう思うんならそういう風なコードをここに書けば?

92 :
俺ならスートは小文字

93 :
ある程度書いたが、手札の出力書式はどんなのがいいんだ?
#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 :
カードは一枚ずつ選択。革命などなし。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4935.zip

95 :
>>94
CPUはこっちが出したスートしかださないのか

96 :
ありゃ。そういうルールじゃなかったっけ。くそげー

97 :
>>93 一番上が見やすい

98 :
for文や配列くらいしかワカラナイ俺でも大富豪ってできる?

99 :
できんことはないと思うがポインタとかそういうの分かってたほうが短くかけるかも

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
[無料でラクラクJava帳票作成] JasperReports使い集合 (315)
文系しねよ【part2】 (446)
GARMIN社のGPSのプログラム (650)
【コメント】doxygen【コンソメ】 (492)
Objective-C [ObjC part:7]; (513)
Silverlight登場で.NET使い大勝利!!! Part2 (476)
--log9.info------------------
【スットコ】香椎由宇 Part7 【ドッコイ】 (507)
芦名星 ★ Part3 (510)
佐津川愛美 Part10 (632)
石橋杏奈 (204)
内山理名さん応援スレ その5 (759)
【樹きになる樹】 相楽樹 prat1 (567)
ミムラ その7 (750)
藤谷美紀・応援してるからね♪ (752)
つぐみ (659)
【女優】北乃きい 88【歌手】 (344)
21世紀は上戸彩でいこうぞね Part215 (957)
星井七瀬part11 (396)
小池栄子ってものすごく安っぽい女優だね (284)
市川実日子 (420)
女優板 自治スレッド (233)
【顔が歪んだ】武井咲について語ろう【般若ブス】 (301)
--log55.com------------------
【絶望】財務省、風邪ひいて病院行って軽い症状だったら8割自己負担にするとか言い出す 病院へは意識不明になってから行け
食べるたびに、袋ラーメン最強はうまかっちゃんじゃないだろうか?って感じる
【疑問】なんでハロプロはごり押ししても売れないの?
佐藤ってなんだかんだあんまり売れてなくね?事務所力の限界なのかね
菊池風磨「好きな曲はドリカムの大阪LOVER」
「砂をかむよう」5割以上が誤った意味で使用 文化庁調査
菊池風磨「好きな曲はドリカムの大阪LOVER」→鈴木愛理がテレビで歌う→Twitterで祭り
【こんなに好きになっちゃっていいの?】狼の日向坂46総合スレ Part18【旧ひらがなけやき】