1read 100read
2012年6月プログラム144: C言語でトランプゲームを作りたい (721)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
Perlについて (698)
初心者の俺が初めて覚えるプログラム言語 (465)
Perlについて (698)
Ruby>>>>>Java (595)
【思考】オセロのAIを作りたいのだが【難問】 (473)
圧縮・復元 相談室 (873)
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元 削除依頼 ▲
C#で仕事ある? (807)
ふらっとVisual C#,C♯,C#(初心者用) Part95 (210)
Java⇔RDBのMapping-Frameworkを語るスレ Vol.5 (933)
【早稲田】カブロボコンテスト Part2【ホリエモン】 (808)
くだすれDelphi(超初心者用)その54 (797)
パR、パチスロの基盤のプログラム 2 (492)
--log9.info------------------
('A`) (246)
この中学生バンドをうpして反応を窺ってみる (201)
理想のライブハウス! (290)
V系バンドは女の子をマシーンにするってホントですか! (755)
3ピースでやる意味あるか? (809)
バンド活動の収入 (576)
身長の低いボーカルスレ (315)
★ライブのMC★ (394)
オリジナルの曲を作る時どうしたらイイですか?? (379)
高学歴のバンドマン (272)
【総合】バンド名募集スレ【名付親@バンド板 (601)
ボーカルってどう選ぶ?? (614)
ブサイクはボーカル目指すな! (603)
対バンするバンドをビビらせたいのだが・・・ (507)
最強に難しいギターソロを教えろ (909)
やったらウケた/退かれたステージアクト (709)
--log55.com------------------
オワブル!!オワブル!!敗北者!!!ゴミ山大将!!!敗北者!!!
【Rank150↑】グランブルーファンタジー初級者スレ209641
【Rank101↑】グランブルーファンタジー初級者スレ2097
【Rank175↑】グランブルーファンタジースレ373
【mobage】アイドルマスターシンデレラガールズ23106人目
武器エレメント稼がれると悔しい
急募:FKHR算講習受講済みの方
4
-