- 1 名前:デフォルトの名無しさん [2007/09/16(日) 06:46:13 ]
- ばば抜き、大貧民、いろいろあるけどこういうのってほとんどがJavaとかだよね。
CUIでもいいからみんなで作ろう
- 29 名前:デフォルトの名無しさん [2007/09/17(月) 02:57:05 ]
- C言語初めて一週間の俺がやろうと思ったが無理だった。頭のいい人教えてくれ
- 30 名前:デフォルトの名無しさん [2007/09/17(月) 03:21:23 ]
- じゃあとりあえずプレイヤーは二人、んでカードをランダムに二人で配るってのは?面倒だからジョーカー抜きで
- 31 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 03:57:17 ]
- どうすんの?二人でやっても4種類のカードを13枚ずつ、ランダムに重複せずに分けるとか俺には無理ぽ
- 32 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 04:54:45 ]
- 現実をシミュレートすると重複しないようにカードを排除することになるが、
とりあえずランダムに求めておいて重複していればまた求める 一応はこれで十分だろう
- 33 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 05:03:32 ]
- >>31
カードを配列に入れて先頭から順にランダムに選んだ要素とスワップしてシャッフル。 あとは配列の先頭から使いたいだけ使えばいい。
- 34 名前:デフォルトの名無しさん [2007/09/17(月) 05:35:31 ]
- とりあえず、二人で勝負、革命とかルールなしで、大きい数字を交互に出していく、どちらもだせなければ
その場をきる。先にカードがなくなったほうが勝ち。これを作ろうとする猛者はいる?
- 35 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 05:40:05 ]
- >>34
CUIで大富豪作ればいいのか?
- 36 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 06:13:44 ]
- ∩_
〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ <<<1は最高にアホ 彡、 |∪| / / __ ヽノ / (___) /
- 37 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 07:04:34 ]
- 今のところ、カードは数値だけで良いの?
- 38 名前:デフォルトの名無しさん mailto:age [2007/09/17(月) 07:18:05 ]
- www.freewebs.com/photoradio/?/880143
- 39 名前:デフォルトの名無しさん [2007/09/17(月) 12:18:27 ]
- >>35 まぁ最初はそれからじゃないか?あとからいろいろと機能を付け加えれば
- 40 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:42:54 ]
- できるやつは大富豪くらいなら一日あればできるのかな
- 41 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:58:28 ]
- ルールどおりに動く程度のものなら1日あればできるね
つーか大富豪ってローカルルールが多すぎてどれが標準的かよくわからん
- 42 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 13:00:07 ]
- とりあえず細かいルール考えずに>>34を実装してみようか
- 43 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 13:02:35 ]
- おう
がんばれ
- 44 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 13:17:18 ]
- cursesライブラリ使ってつくって。
- 45 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 13:20:16 ]
- ttp://www.tnlab.ice.uec.ac.jp/daihinmin/2007/
このスレで応募してみるとか
- 46 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 13:20:53 ]
- まぁちょっと面倒だけど大富豪くらいならfor文や配列ができればいけそうじゃない?
- 47 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 13:35:22 ]
- >>45 ネットワークなんかはあとからでも
- 48 名前:まずはここから mailto:sage [2007/09/17(月) 13:36:10 ]
- 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 名前:いつもここから mailto:sage [2007/09/17(月) 13:40:56 ]
- あ、rankの後ろにごみ入っちゃったw
あと、表示は [SA][H10][DJ][CQ]... - 00 -- 01 -- 02 -- 03 -... 入力は 04,12,... でおk?
- 50 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 14:06:19 ]
- とりあえずそれを二人にランダムで配りそれをソートだな。昇順並び替えかな
- 51 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 14:36:11 ]
- > 昇順並び替え
"3","4","5","6","7","8","9","10","J","Q","K","A","2" の順がいいと思われ
- 52 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 14:45:01 ]
- お、忘れてた。3が一番弱いんだっけw革命は後回しにそれでいってみるか?
- 53 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 14:49:41 ]
- 64bit の変数一個用意して、1 bit 目が立っていたらハートのエースを、
53bit 目が立っていたらジョーカーを持っている事にすればソート不要。
- 54 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:00:18 ]
- for文や配列くらいしかワカラナイ俺にも作れるかな
- 55 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:13:12 ]
- スペード 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 名前:つまり mailto:sage [2007/09/17(月) 15:24:02 ]
- カードの番号 0〜51 を 13 で割った
商 0〜3 余 0〜12 を使う ・表示 ・ソート(大小判定) ...は 0〜12 のままじゃダメだなw
- 57 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:24:11 ]
- 絵柄に2bit
A〜Kで13bit ジョーカーで1bit
- 58 名前:デフォルトの名無しさん [2007/09/17(月) 15:26:43 ]
- とりあえず二人にカードを分けてそのカードを表示するってのは?とりあえず死合はまだで
- 59 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:30:16 ]
- トランプはカードに重複が無いから、プレイヤー 1 人辺り 53bit あれば十分だよ
- 60 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:35:57 ]
- そこまでして節約する必要なんてないだろ
- 61 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:39:35 ]
- 節約と言えば、ここ↓の過去スレに色々あった希ガス
七行プログラミング part5 pc11.2ch.net/test/read.cgi/tech/1142467359/
- 62 名前:とりあえず mailto:sage [2007/09/17(月) 17:03:17 ]
- #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 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 17:40:32 ]
- 配るまではまぁなんとかだな。そういうや先攻後攻を決めるにはどうすればいい?0か1かで判断?
- 64 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 18:46:15 ]
- 」・、ヲ
- 65 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 19:00:24 ]
- 大富豪でカードを作る。ジョーカーつき。二人でやってルールは革命くらいでいいかな。作れるか?
- 66 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 19:30:54 ]
- 乱数はrandでいいと思う?
もっと高精度なの使う?
- 67 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 19:34:08 ]
- いいんじゃないか?偏りがあるとか聞くけどそこまで精度なのは求めてないかと
- 68 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 20:45:51 ]
- 暗号用とか技術用だと乱数機工夫した方が良いが
ゲーム程度なら要らないかと ゲーム向きの乱数生成法としては 時計orタイマーをキーにするって方法もある ユーザ入力のタイミング次第で結果が変わるので、お手軽かつ偏りが少ない
- 69 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 21:18:24 ]
- 6人プレイの革命有り、ジョーカーのワイルドカードありで造った事有るなぁ。
- 70 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 21:32:09 ]
- C++じゃマズいんだっけか
- 71 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 21:50:38 ]
- Cでだからな。表示もprintfだけでも何とかなるぽ。ちょっと面倒だけど
- 72 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 22:30:23 ]
- 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俺にもサパーリ
- 74 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 23:14:50 ]
- 宿題スレでも見とけ
- 75 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 23:28:10 ]
- (i+1.0) * rand() / (RAND_MAX + 1.0) は rand() % (i+1) の高精度版だと思っとけばOK
- 76 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 23:28:51 ]
- // 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 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 23:40:34 ]
- (i+1.0) * rand() / (RAND_MAX + 1.0);ってのは0以上i+1未満の数をランダムで返すってこと?
- 78 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 23:53:53 ]
- >>77
そういうこと。 整数なのでi+1未満ってことは、i以下ってこと。
- 79 名前:デフォルトの名無しさん [2007/09/18(火) 03:10:04 ]
- 作って思ったこと。全部mainに入れ込んでた俺は明らかに初心者。しかもカードを小さい順から出すってのがわからない
- 80 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 06:24:49 ]
- 手札を番号順にソート
パス?=真 番号の小さいカードから順に見て{ 場札より大きいなら{ カードを場に出す パス?=偽 } }
- 81 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 06:46:03 ]
- あ〜…カード出した時点でループ抜けなきゃマズいな
- 82 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 07:00:18 ]
- その処理全体を関数にして
出したらそこでreturnすればフラグは要らないな そうすれば、ループ回りきった=出せない、なのだから
- 83 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 07:55:23 ]
- 手札ソートについては、あらかじめ3〜K,1,2の順をデフォルトにしとけばいいじゃん
何も考えずに1〜Kの順で配列にするから、順番入れ替えの必要があるわけで
- 84 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 08:04:17 ]
- 手札って強さの順にソートする必要あるのか?
- 85 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 08:14:40 ]
- 見易さのために決まってるでしょ。
- 86 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 08:16:31 ]
- 1から13の順じゃ駄目なのか?
- 87 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 08:17:18 ]
- 比較関数はソート以外にも使える
- 88 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 09:15:34 ]
- 強さ順にソートにすれば、いくつかの処理が簡単に書けるんじゃね?
- 89 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 13:31:46 ]
- 2と3は繋がらないしね
- 90 名前:デフォルトの名無しさん [2007/09/18(火) 15:03:59 ]
- 出力は>>21あたりが見やすそうだな
- 91 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 15:32:42 ]
- そう思うんならそういう風なコードをここに書けば?
- 92 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 16:34:07 ]
- 俺ならスートは小文字
- 93 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 18:46:04 ]
- ある程度書いたが、手札の出力書式はどんなのがいいんだ?
#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 名前:クソゲー mailto:sage [2007/09/18(火) 20:55:41 ]
- カードは一枚ずつ選択。革命などなし。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4935.zip
- 95 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 21:02:36 ]
- >>94
CPUはこっちが出したスートしかださないのか
- 96 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 21:52:10 ]
- ありゃ。そういうルールじゃなかったっけ。くそげー
- 97 名前:デフォルトの名無しさん [2007/09/18(火) 23:01:26 ]
- >>93 一番上が見やすい
- 98 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 23:02:42 ]
- for文や配列くらいしかワカラナイ俺でも大富豪ってできる?
- 99 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 23:16:13 ]
- できんことはないと思うがポインタとかそういうの分かってたほうが短くかけるかも
- 100 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 23:36:14 ]
- そんな初心者だが俺もやってみる。ほんとワカラナイことだらけだから変なプログラムやこれはおかしいって
やつも貼り付けると思うけど教えてくれ
- 101 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 23:42:00 ]
- そういうことはコードを張ってから言え。
- 102 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 00:14:08 ]
- 今はとりあえずカードをスペード、ハート、クローバー、ダイヤを13枚ずつランダムに表示するようなものを作ってる。
- 103 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:11:26 ]
- 一応やってみました。でもただランダムに表示するだけ。ポインタとかも使ってません。
突っ込みどころ満載とはおもいますがお願いします。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4940.txt
- 104 名前:とりあえず mailto:sage [2007/09/19(水) 01:37:06 ]
- > 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 ]
- >>103と>>104の違いに吹いたw
- 106 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:40:06 ]
- とりあえずこっそりと そぉ〜っと ソート してみたんですが、気づきましたか?
- 107 名前:103 mailto:sage [2007/09/19(水) 01:43:59 ]
- やっぱりポインタとかは必要ですか・・・
- 108 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:45:39 ]
- > 107
'関数'化だな、まずは。
- 109 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:46:50 ]
- >>107
俺の経験によると、お前は伸びるタイプだな がんばれ
- 110 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:47:31 ]
- グローバル領域に
int s[13],h[13],c[13],d[13]; だろ?伸びる兆しが見えん。
- 111 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:49:10 ]
- >>110
まだ、うまいへたを論じるレベルじゃない
- 112 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:50:59 ]
- > 110
まてまて それを2次元配列にすれば→ int card[4][13]; そんなに悪くはないぞ
- 113 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:52:06 ]
- ...C言語で「2次元」配列は無いわな orz
- 114 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 01:53:10 ]
- ポインタ知らなきゃグローバル領域に置くほかない罠
- 115 名前:103 mailto:sage [2007/09/19(水) 02:08:03 ]
- すいませんお風呂入ってました。
関数化にポインタに二次元配列ですか・・・ まだカードを配るところにすらいってないのに・・・ お風呂上りに麦茶一気飲みしたらお腹が痛くなってきたので寝ます。 また来ますのでそのときはアドバイスよろしくお願いします
- 116 名前:デフォルトの名無しさん [2007/09/19(水) 02:11:26 ]
- お大事にw
- 117 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 02:15:15 ]
- その麦茶、腐ってねーか?
- 118 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 02:22:27 ]
- っつか、俺流だと1〜52までの数値をそれぞれ4つの1〜13のスーツに割り当てるけどね。
ちなみに、スーツの強弱は ♠ ♥ ♦ ♣ の順になっているんで 1から13までをスペードといった形で割り当てている。
- 119 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 02:24:23 ]
- ここにあがってるソースはほとんどそうなってると思うが?
- 120 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 02:27:05 ]
- ここって、そんなに出てないじゃん・・・しかも一部、その順番になってないものもあるしw
- 121 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 02:34:24 ]
- 大富豪だよな?
大富豪にスートの強弱なんか無えよ
- 122 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 02:38:39 ]
- まあ普通は1から52じゃなくて、0から51にするよな
- 123 名前:デフォルトの名無しさん [2007/09/19(水) 03:14:07 ]
- まぁまだ始めたばかりみたいだしあれもこれもってなるときついとこもあるな。とりあえず書いていって後からポインタとかに書き直せばいい
- 124 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 04:30:31 ]
- >107
この程度なら「必要」ではないよ。使えた方が「効率的」だったり「楽」なこともあるけど。
- 125 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 05:28:52 ]
- >>76
整数にキャストするなら実数に変換する意味なくない? 普通に剰余を求めればいいのでは。
- 126 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 05:40:08 ]
- >>125
rand()の実装を考えると、普通に剰余するだけでは精度が悪い。 精度を上げるために上位ビットの値を使ってる。
- 127 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 06:12:55 ]
- 流れからすると構造体でカードを一枚一枚作ってる自分は負け組っぽいな
やる気が失せる
- 128 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 06:36:14 ]
- グローバルに int hand[player][cards] 宣言して処理してる
構造体なんか使ってねえや
- 129 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 07:00:22 ]
- カードを構造体にするのも悪くないと思う。
カードの表示や比較をする度に除算や余算をしなくていいし。 いまどきの環境なら容量に気をつかう必要があるわけじゃないしね。
|

|