忍者ブログ

プログラム関連~チラシの裏~

スパム対策したりプログラム組んだり色々やってる為替とは別の面を表に出してみた。

<< | 2024/04 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | >>

マイクロアド リンク

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

乱数クラスを利用したトランプのベースクラス(サンプル)

サンプルコードとして単純で便利かなって思ってつくりました。
C++だけどJAVAに直せば携帯電話でも使えると思います。
Linux携帯とかじゃなくて、Iアプリみたいなやつ。
その前に乱数もJAVAに直さないと使えない。
携帯電話で使うJAVAだと名称を短くするツールで圧縮しないと駄目なんだからね!

●概要
メルセンヌ・ツイスタの乱数クラスを継承したトランプのベースクラス。
乱数を使ったシャッフルのテストプログラム。

●学べること
・派生と継承。
・継承時のコンストラクタと代入演算子の使い方。 
・カードゲームを作る簡単な基礎。
・privateで派生する意味って?

世間的な言葉を使う階層はこんな感じ。
■スーパークラス(一番上のクラス)private : cMTRand
└トランプ基本クラス cPlayingCards

派生クラスの説明として、コンストラクタとデストラクタがくる順番。
●開始
1.乱数コンストラクタ スーパー
2.トランプコンストラクタ 継承

●終了
1.トランプデストラクタ 継承
2.乱数デストラクタ スーパー

●コピーコンストラクタの場合
コンストラクタの初期化リストにいれてるので
1.乱数のコピーコンストラクタ
2.トランプのコピーコンストラクタ

の順番でくるよ。まぁ知ってるか。

●メンバの説明(クラスの使い方)
・コンストラクタ
引数なし。値のみ初期化。
引数有り。
引数:
乱数の種
カードの種類指定、ハート、ダイヤ、スペード、クラブの4種類なら4つ。
1種類の最大枚数、通常なら1~10、JQKの13種なので13。
ジョーカーの枚数 ジョーカーを使うなら枚数指定。

・CreateCard カード配列の作成。
publicなので何度でも出来ます。
人によってはprivateにしてアクセスさせないつくりにします。
カードの種類指定、ハート、ダイヤ、スペード、クラブの4種類なら4つ。
1種類の最大枚数、通常なら1~10、JQKの13種なので13。
ジョーカーの枚数 ジョーカーを使うなら枚数指定。

・Shuffle シャッフル
引数
乱数を初期化して使うなら乱数の種値を設定。
0の場合は、現在のまま使う。
戻り値int
成功 1 失敗0

●値取得
・ unsigned int GetCard();
カードを1枚引く。カード参照位置が加算される。

・unsigned int GetCard(unsigned int uiPos);
位置指定でカードを取得する。配列範囲内で指定する。
使用済みカードでも取得できる。

・unsigned int GetKind(unsigned int uiCard); 
カードの種類を取得する。0~3までをハート~クラブまでに指定した場合。

・unsigned int GetCardNum(unsigned int uiCard);
カードの番号取得1~13までの値。

・unsigned int GetCardMax();
デッキ内のカード枚数。通常とランプなら13*4

・unsigned int GetKindMax()
カードの種類取得
ハートからクラブまであるので4。

unsigned int GetCardPos()
使用したカードの枚数。
現在カード配列のどこを見ているか?
ジョーカーなしなら0~52の間。

トランプソースコード:ダウンロード(zip)
※メルセンヌ・ツイスタのクラスもダウンロードして同じ階層に入れてビルドしてください。
メルセンヌ・ツイスタ擬似乱数サンプル
PR

メルセンヌ・ツイスタ(擬似乱数)のクラスサンプル

●ここのサンプルで学べること。 
・クラスの基本事項 足りないことがありますが・・・
・デフォルトコンストラクタとコピーコンストラクタの使い方
・operator=の代入演算子ってなに?
・explicitの使い方。引数1つのコンストラクタとかにつかうんだよw
・メルセンヌツイスタ擬似乱数発生の使い方
Mersenne Twister Home Page ここが本家のURLです。
・#if等のコンパイルスイッチ
・VC6.0のサフィックスとか・・・

●ビルド環境
VC6.0 SP6 
QT4.3.4のMinGW付属のGCC
VC側では実行しまくってテストしましたがQT側ではテストしていません。
ビルドの確認のみです。

●概要
cMTRandは、メルセンヌツイスタを利用した擬似乱数発生クラスです。
乱数テーブルを作成しXORを利用して乱数を生成します。
operator=による代入とコピーコンストラクタを実装しているので
関数で値渡し BOOL BonyuKure(cMTRand cSrc){};等を実行する事ができます。

●メンバの説明
・cMTRand();
デフォルトコンストラクタ 内部変数の初期化のみ。

・cMTRand(int uiSeed);
なぜか、uiでunsignedのしるしついてる・・・
種を使ってデフォルトの乱数テーブルを作成します。

・cMTRand(const cMTRand &cSrc);
コピーコンストラクタ。
cMTRand A;
cMTRand B = A;
とかやったり、BOOL BonyuKure(cMTRand cSrc){};を作って
BonyuKure(A);をやれば呼ばれます。

・virtual ~cMTRand();
デストラクタ
バーチャルなので派生させてもくるはず。
class Hage : public cMTRandとかやったら
ハゲコンストラクタの前によばれ
ハゲデストラクタの後に乱数(cMTRand)のデストラクタが呼ばれる。
メモリ削除します。

・Initialize()
初期化。全部0にする。つまり、メモリを確保した後に呼べば
消せないメモリがつくれます。
privateにすべきもの。

・void Substitution(const cMTRand &cSrc)
引数の乱数クラスをコピーする

・ void InitSeed(unsigned int uiSeed,  int iTblSize ); 
乱数の種と乱数テーブルのサイズを指定して乱数作成。
srand();と同じ物だとおもってください。

・InitArray
  int iTblSize = DEFAULT_TABLESIZE,    // 擬似乱数の配列サイズ
  unsigned int *pKeyTbl = NULL,     // 乱数生成のキーテーブル
  unsigned int iKeyLength = 4      // キーテーブルの長さ
);
乱数の種を配列にして複雑なものを作りたいとき用。
InitSeedの強化版。多分、ゲームとして複雑にしたい場合はこっち。
今のゲーム機はCPU早いから複雑でもいいよね。

・取得関連
MT_UINT64  GetInt64();       // int(64bit)型で乱数を取得するが32bitでは無能。
unsigned int GetInt32();       // int(32bit)型で乱数を取得する
unsigned short GetInt16();       // short(16bit)型で乱数を取得する
float   GetFloat();       // float(32bit)型で乱数を取得する
double   GetDouble();      // dobule(64bit)型で乱数を取得する
それぞれの方に合わせた乱数取得。
初期化をしなくても取得時に初期化されていないことを判別してますので
生成時にいきなり使ってもOKですよ。

あと、MT_UINT64って何?
typedefした64BITの変数名にしてます。
コンパイラによっては、long longが使えて64BITだったり。
プレステ2みたいにlongで64Bitだったり色々あるじゃない。
VC6.0のように_int64で64Bit対応場合もある。
とりあえず、クラスのヘッダで#ifとかで条件コンパイルしてます。
VC6.0とそれ以外でわけてある。
PS2で使いたければその部分書き換えてください。
たぶんPSPでもいけるはず。

詳細はソースコードをダウンロードして実際に見てください。
cMTRand.hに入ってます。
仕事を終えた後に作ってるので間違ってたりする個所があるはずです。
できれば、コメントに指摘を入れてくれるとありがたいです。

サンプルコード
cmtrand.zipダウンロード(zip)
ブログ内検索
最新コメント
[06/24 Kazelcmo]
[06/24 Kazelxyk]
[04/23 Presencia]
最新トラックバック
ブログ関連リンク

カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
カウンター
FX NEWS

-外国為替-

AdminControlMenu: AdminMenu | NewEntry | EditComment | EditTrackback

忍者ブログ [PR]