ハルhal
デジタル コンテンツ

pc2

作って学ぶ
ハードとソフト

アルゴリズム
電子回路

 






このサイトはHPです
ブログではありません
要望・意見は
下記の掲示場を利用して
下さいまたブログも見て下さい

 

ロボット・DOSV掲示板兼Blog

懐かしのコンピュータ
Apple II Apple2
PC9801 PC9821

roboto

Topに戻る

ララ Lara
アナログ コンテンツ

Lara座れ
動画で学ぶ
躾と訓練
動画メニュー


工作


集団練習メニュー


しつけ 訓練コラム




最後にララについて

このサイトはHPです
ブログではありません
要望・意見は
下記の掲示場を利用して
下さいまたブログも見て下さい

Laraララの
ブログ

犬のしつけと訓練
掲示板


掲示板の利用規則

 

 

 

 

Lara伏せ
Topに戻る
松本 ワンワンクラブ
わんわんクラブ

 

Visual Studio 2008 Express Edition でトランプゲームを作ろう
最終確認

Form1の内容

PDFで確認 一太郎で確認 wordで確認

#pragma once 自動作成される
static int card[55];

static int hai[12];
static int keta[12];
static int yaku[12];
static int start_flag=0;
static int hoji1=0;
static int hoji2=0;
static int hoji3=0;
static int hoji4=0;
static int hoji5=0;
static int tokuten=0;
カードの配列 1-52を入れ
その後1-13、101-113、201-213、301-313にする
最初の5枚と後からの5枚のカードデータを収納
上記を下1ケタにする
313なら13とする
ペアの解析に使用する
ルーチンの通過を制御する
チェックに使用する
?
点数に使用する
void DispHai( int nohai,int xx){
Graphics^ gr=this->CreateGraphi
cs();
int X0=10,Y0=10;
String^ filename;



filename="c:\\card\\1_sp.gif";
if(nohai==0 ) filename="c:\\card\\0_r1.gif" ;
//Pen^ pen1=gcnew Pen(col);
if(nohai>0 && nohai<14) filename="c:\\card\\"+nohai+"_
sp.gif" ;
if(nohai>100 && nohai<114 ){nohai=nohai-100;
filename="c:\\card\\"+nohai+"_
cl.gif" ;}
if(nohai>200 && nohai<214 ){nohai=nohai-200;
filename="c:\\card\\"+nohai+"_
di.gif" ;}
if(nohai>300 && nohai<314){nohai=nohai-300;
filename="c:\\card\\"+nohai+"_
he.gif" ;}
//原画像を左上に描画する
if(xx==1){
Bitmap^ bmap1; //bmapの確保
bmap1=gcnew Bitmap(filename
);
gr->DrawImage(bmap1,X0,Y0);
}
if(xx==2){
Bitmap^ bmap2; //bmapの確保
bmap2=gcnew Bitmap(filename
);
gr->DrawImage(bmap2,X0+100
,Y0);
}
if(xx==3){
Bitmap^ bmap3; //bmapの確保
bmap3=gcnew Bitmap(filenam
e);
gr->DrawImage(bmap3,X0+20
0,Y0);
}
if(xx==4){
Bitmap^ bmap4; //bmapの確保
bmap4=gcnew Bitmap(filenam
e);
gr->DrawImage(bmap4,X0+30
0,Y0);
}
if(xx==5){
Bitmap^ bmap5; //bmapの確保
bmap5=gcnew Bitmap(filename
);
gr->DrawImage(bmap5,X0+40
0,Y0);
}
}
トランプの図柄をファイルから読み込む
Gifを読み込むためにモードをセット カードのファイル名の用意
カードの収納位置
カードのファイル名のセット
とりあえず、スペードの1にする
0の時、カードの裏面のファイルをセット
1-13の時スペードをセット

101から113の時クローバをセット
?
201-213のときダイヤをセット

?301-313の時、ハートをセット
??

xx=1のとき1枚目(左)を表示する
??



xx=2のとき2枚目(左から2枚目)を表示する
?


xx=3のとき3枚目(左から3枚目)を表示する
?


xx=4のとき4枚目(左から4枚目)を表示する
?


xx=5のとき5枚目(いちばん右)を表示する
?
?

 







 
#pragma endregion
private: System::Void Form1_Paint(System::Object^
sender, System::Windows::For
ms::Pai
ntEventArgs^ e) {
//int X0=10,Y0=10;
Graphics^ gr=e->Graphics;
//Pen^ pen;
//Color color_src,color_dest;
}
図を描く用意をする



  必要なし

  必要なし
  必要なし
 
 




















































































 
private: System::Void button1_Click(System::Object^
sender, System::EventArgs^ e)
{
if(start_flag ==0){ //一度通過した
ら2度目を禁止する
int amax,xrand,nohai;
int xx,yy,y;
char buf[80];
Graphics^ gr=this->CreateGrap
hics();
//文字の用意
String^ string1;
String^ string2;
Brush^ brush=gcnew SolidBrush
(Color::Black);
System::Drawing::Font^ font=g
cnew System::Drawing::Font("M
S ゴシック",10);
//文字の用意終了
Random^ rand=gcnew Random(
); //で乱数randを生成し
ておき、
//2) 0以上int amax未満の乱数を発
生したい場合には、
string2="乱数値";
amax=52;
for(xx=1;xx<54;xx++) card[xx]
=0;
yy=1;
while(yy<20){
xrand=rand->Next(amax)+1;
int flag=0;
for(xx=1;xx<53;xx++) {if(card
[xx]==xrand) flag=1;}


if(flag==0){ card[yy]=xrand;



//文字で乱数を確認
sprintf_s(buf,80," %3d ",xrand
);
string1=gcnew String(buf);
//gr->DrawString(string1,font,b
rush,(float)16*yy,
(float)450);
string2=string2+string1;
//文字で確認終了
yy++;}
}


//文字で表示


//MessageBox::Show(string2);
textBox3->Text=string2;
string2="変換値";
for(y=1;y<53;y++){
if( card[y] > 13 && card[y] <=
26) card[y] = card[y]
+ 100 - 13;
if( card[y] > 26 && card[y] <=
39) card[y] = card[y]
+ 200 - 26;
if( card[y] > 39 && card[y] <=
52) card[y] = card[y]
+ 300 - 39;








} //end for y
for(xx=1;xx<6;xx++){
hai[xx]=card[xx];
//文字で乱数を確認
sprintf_s(buf,80," %3d ",hai
[xx]);
string1=gcnew String(buf);
string2=string2+string1;
//文字で確認終了
}
//文字で表示
textBox4->Text=string2;
for(xx=1;xx<6;xx++){
nohai=hai[xx];
DispHai(nohai,xx);
}
hoji1=0;
hoji2=0;
hoji3=0;
hoji4=0;
hoji5=0;
start_flag=1; //一度通過したら2
度目を禁止するフラッグ
}//end if start_flag=1;一度通過
したら2度目を禁止する
}
コマンドボタン1を押した場合のプログラム【ゲーム開始】


一度通過したら2度目を禁止する


文字列の用意
グラフックの用意


文字列の用意
文字列の用意
省略可能
省略可能
省略可能
文字の用意終了
乱数の初期化


?
52枚をだぶらないように配布



初期化0を入れる
y < 20に成るまでLOOPの間を繰り返す
乱数1から52
ダブりの確認値0
同じ数字が出たらダブり確認値1にする
ダブらない時のみ乱数を代入する
配列card(z)に乱数を保存する


文字で確認
乱数値をbufに書き込む
ストリングに移す


毎回出てきた乱数を加算

loop数yを1増加させる
While y < 53の終了




テキストボックス3にこの結果を表示
1から52のカードをわかりやすく
14から26は101−113変換

27から39は201−213変換

40から52は 301−313に変更
13以下はクラブ
card(y) > 13の場合card(y)に100を足し13を引く たとえば 14の場合101となる。ダイヤとする
card(y) > 26の場合card(y)に200を足し26を引く たとえば 27の場合202となる。ハートとする
card(y) > 39の場合card(y)に300を足
発生された乱数値を繋げていく








テキストボックス4にこの結果を表


この数値をトランプとして表示する
表示ルーチンに飛ぶ
チックボックス1値を0に初期化
チックボックス2値を0に初期化
チックボックス3値を0に初期化
チックボックス4値を0に初期化
チックボックス5値を0に初期化
?

?
?
 
 























 

private: System::Void checkBox1_CheckedChanged(Sy
stem::Object^ sender, System:
:EventArgs^ e) {
hoji1=1;
}
private: System::Void checkBox2_CheckedChanged(Sys

tem::Object^ sender, System::E
ventArgs^ e) {
hoji2=1;
}
private: System::Void checkBox3_CheckedChanged(Sys
tem::Object^ sender, System::E
ventArgs^ e) {
hoji3=1;
}
private: System::Void checkBox4_CheckedChanged(Sys
tem::Object^ sender, System::E
ventArgs^ e) {
hoji4=1;
}
private: System::Void checkBox5_CheckedChanged(Sys
tem::Object^ sender, System::E
ventArgs^ e) {
hoji5=1;
}



チックボックス1にレ点がついたら値を1にする
?

チックボックス2にレ点がついたら値を1にする
?


チックボックス3にレ点がついたら値を1にする
?


チックボックス4にレ点がついたら値を1にする
?


チックボックス5にレ点がついたら値を1にする

 
 






























































































































































































































 
private: System::Void button2_Click(System::Object^
sender, System::EventArgs^ e) {
if(start_flag==1){
int nohai;
int xx=6;
int x,y,w;
char buf[80];
/*
テキストボックス入力を読み取るには、
String^ string1=textBox1- >Te
xt;
テキストボックスに表示するには、
textBox1- >Text=string1;
*/
String^ string1= "ブタです";
textBox1->Text=string1;
if (hoji1==0){hai[1]=card[xx];
xx++;}
if (hoji2==0){hai[2]=card[xx];
xx++;}
if (hoji3==0){hai[3]=card[xx];
xx++;}
if (hoji4==0){hai[4]=card[xx];
xx++;}
if (hoji5==0){hai[5]=card[xx];
}
for(xx=1;xx<6;xx++){
nohai=hai[xx];
DispHai(nohai,xx);
} //end for
//Rem フラッシュ
int club = 0;
int daiya = 0;
int hart = 0;
int supedo = 0;
int flash = 0;
for(x=1;x<6;x++){
if( hai[x] > 0 && hai[x] <= 13)
{supedo = supedo + 1;}
if( hai[x] > 100 && hai[x] <= 1
13 ) {club=club + 1;}
if( hai[x] > 200 && hai[x] <= 2
13 ) {daiya = daiya + 1;}
if( hai[x] > 300 && hai[x] <= 3
13 ) {hart = hart + 1;}




} //Next x
if( club == 5){


string1= "クラブのフラッシュ";


flash = 1;



tokuten = tokuten + 509;
}//End If clab
if (daiya == 5){


string1= "ダイヤのフラッシュ";


flash = 1;


tokuten = tokuten + 509;
}//End If daiya
if( hart == 5 ){


string1= "ハートのフラッシュ";


flash = 1;


tokuten = tokuten + 509;
}//End If hart
if( supedo == 5){


string1= "スペードのフラッシュ";
flash = 1;



tokuten = tokuten + 509;
}//End If supedo



textBox1->Text=string1;
//文字で数を確認
sprintf_s(buf,80,"supedo=%3d
club=%3d daiy=%3d hart=%3d",supedo,club,daiya,
hart);
string1=gcnew String(buf);
textBox5->Text=string1;
//文字で確認終了
//Rem フラッシュend
//Rem ペアー
int twopai = 0;
int threepai = 0;
int oitoku;
for(x=6;x<11;x++){
keta[x] = 0;
}//Next x
for(x=1;x<6;x++){
y=hai[x];



if(hai[x]>100) y=hai[x]-100;
if(hai[x]>200) y=hai[x]-200;
if(hai[x]>300) y=hai[x]-300;
keta[x]=y;
}//Next x


for(x=1;x<6;x++){
yaku[x] = 0;
for(w=1;w<6;w++){
if( keta[x] == keta[w]) yaku[x]
= yaku[x] + 1;


}//Next w
}//Next x
for(x=1;x<6;x++){
if( yaku[x]== 2) twopai = two
pai + 1;


if( yaku[x]== 3) threepai = 1;



if( yaku[x]== 4){
string1 = "フォーカード";


tokuten = tokuten + 4165;
}//End if( yaku[x]== 4)
}//Next x


if( twopai == 2 ){
string1 = "ワンペーア";
tokuten = tokuten + 3;
}//End If( twopai == 2 )
if( twopai == 4 ){
string1 = "ツーペーア";
tokuten = tokuten + 21;


}//End If( twopai == 4 )
if( threepai == 1){
string1 = "スリーカード";
tokuten = tokuten + 47;


}//End If( threepai == 1)
if( twopai == 2 && threepai
== 1){


string1 = "フルハウス";
tokuten = tokuten + 694;


}//End If

textBox1->Text=string1;
//Rem ペアーend
//Rem ストレート


for(x=1;x<6;x++){
for(y=1;y<6;y++){
if( keta[x] < keta[y]){


oitoku = keta[x];
keta[x] = keta[y];
keta[y] = oitoku;
}//End If
}//Next y
}//Next x
if (keta[1] == 1){
for(x=1;x<6;x++){
if( keta[x] = x) keta[x + 5]
= keta[x] + 13;


}// Next x
}//End if (keta[1] == 1)
int flag = 0;
or(x=1;x<10;x++){



if (keta[x] == keta[x + 1] -
1) flag = flag + 1;
}//Next x
if( flag >= 4){
string1 = string1 + " ストレー
ト";
tokuten = tokuten + 255;




if( flash == 1) tokuten = tok
uten + 72193 - 255;
if( flash == 1 && flag >= 4 &
& keta[1] == 1 && keta[5] =
= 13){
string1 = "ローヤルストレートフラッ
シュ";

tokuten = tokuten + 649740;
}//End If
//TextBox2 = tokuten
}//End If
textBox1->Text=string1;
//Rem ストレートend
textBox2->Text=tokuten.ToSt
ring();//数値から文字列への変換には、
//textBox2->Text=string2;
start_flag=2;


} //end if start_flag==1
}
ボタン2を押した処理
?

このルーチンの通過許可

xx = 6


チェックボク1にチェックが付いていない場合[カード交換となる]
card(6) 配列6番目を1枚目とする
x = 7
チェックボク2にチェックが付いていない場合[カード交換となる]
card(7) 配列7番目を2枚目とする
x = 8
チェックボク3にチェックが付いていない場合[カード交換となる]
card(8) 配列8番目を3枚目とする x = 9
同様に 9枚目 10枚目

変更されたカードを表示

// 実行しないコメント
役解析 フラッシュの処理
色が同じか判断する


変数クラブ、ダイヤ、ハート、スペードを0とする
変数フラッシュを0とする
xを1から5まで繰り返す
hai(x)が0より大きく13以下の場合
スペードなので変数クラブを1増加
hai (x)が100より大きく113以下の場合クラブなので変数を1増加
hai d(x)が200より大きく213以下の場合ダイヤなので変数を1増加
hai (x)が300より大きく313以下の場合ハートなので変数を1増加する。
xを1から5まで繰り返し終了
もし変数クラブが5になっている場合5枚ともクラブとの判断でフラッシュとなる
文字列1にクラブのフラッシュと代入する
変数フラッシュを1とする。後でストレートとこの変数を比較しストレートフラッシュか判断するため
フラッシュの確率は509のため得点に509を増加させる。
もし変数ダイヤが5になっている場合5枚ともダイヤとの判断でフラッシュとなる
文字列1にダイヤのフラッシュと表示する
変数フラッシュを1とする。後でストレートとこの変数を比較しストレートフラッシュか判断するため
フラッシュの確率は509のため得点に509を増加させる。
もし変数ハートが5になっている場合5枚ともハートとの判断でフラッシュとなる
文字列1にハートのフラッシュと表示する
変数フラッシュを1とする。後でストレートとこの変数を比較しストレートフラッシュか判断するため
フラッシュの確率は509のため得点に509を増加させる。
もし変数スペードが5になっている場合5枚ともクラブとの判断でフラッシュとなる
文字列1にスペードのフラッシュと表変数フラッシュを1とする。後でストレートとこの変数を比較しストレートフラッシュか判断するため
フラッシュの確率は509のため得点に509を増加させる。
?
?
テキストボックス1に文字列フラッシュを表示


テキストボックス5に文字列解析の数値を表示


コメント  ペアー
ツーペアー変数を0に
スリカード変数を0に

初期化 ストレートのための

5枚のカードを順次読む
xが1から5まで繰り返す
yに順次5枚のカードを入れていく
ペアーの確認をするため
下一桁にする
100より大きい場合100を引く
200より大きい場合200を引く
300より大きい場合300を引く


繰り返しの終了
解析開始
同じカードがないか判断する
xが1から5まで繰り返す
5個の配列yaku(x)を0にする
wが1から5まで繰り返す
同じカードが有ればyaku(x)を1増加する
繰り返しwの終了
繰り返しxの終了
x = 1カラ 5繰り返し
yaku(x)が2の場合同じカードが2枚有ったのでツーペアー変数を1増加yaku(x)が3の場合同じカードが3枚有ったのでスリカード変数を1にして通知
yaku(x)が4の場合同じカードが4枚有ったので文字列1にフォーカードを代入
フォーカードなので得点に4165点を足す
If yaku(x) = 4 終了
x = 1から 5繰り返し終了
ツーペアー変数が2の場合
文字列1にワンペーアを代入
ワンペーアなので得点に3点を足すIf twopai = 2 の終了
ツーペアー変数が4の場合
文字列1にツーペーアを代入
ツーペーアなので得点に21点を足す
If twopai =4 の終了
スリカード変数が1の場合
文字列1にスリーカードを代入
スリーカードなので得点に47点を足す
If threepai = 1 の終了
ツーペアー変数が2でかつスリカード変数が1の場合
文字列1にフルハウスを代入
フルハウスなので得点に694点を足す
If twopai = 2 And threepai = 1 終了
テキストボックス1に文字列表示

コメント ストレート
小さい順に並び替えをする
For x = 1 から 5繰り返し
For y = 1 から 5繰り返し
小さいか比較
オイトク変数に小さいカードを入れる
大き方に小さいものを代入
小さい方にオイトク変数を代入
比較終了
For y5繰り返し終わり
For x 5繰り返し終わり
ストレートで1がある場合の処理
最初のカードに1がある場合
セル6行目に14として収納
繰り返すことにより
次の2はセル7行目に15として収納
旗変数を0とする
1がある場合5枚ではなく追加された4枚も見るため9回繰り返す
今のカードと次のカードが連番になっている場合旗変数を1増加する
繰り返し終了
旗変数が4以上の場合はストレート
となる
文字列1にストレートと代入する
得点を255点増加させる
役としてすでにフラッシュがある場合
得点に72193−255を増加させるストレートフラッシュで最初1になっていて5番目が13の時
文字列1にローヤルストレートフラッシュと表示する
得点に649740点を増加する
?
?テキストボックス2に得点を表示
?





次に進めるようにする


 
?private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
if (start_flag==2){
int nohai;
int xx;
for(xx=1;xx<6;xx++){
nohai=0;
DispHai(nohai,xx);
}
start_flag=0;
}
}
カードの裏を表示して


旗変数を初期化しボタン1を押せるようにする








 
private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {
?
card[6]=1;
card[7]=2;
card[8]=3;
card[9]=212;
card[10]=313;
}
確認ルーチン 好きな数を入れる
?
?
4枚目のカードをクラブの12にしてみる


5枚目のカードをスペードのキングにしてみる

 

 

 

 
動画が旨くご覧いただけない場合は最新のFlash Playerをインストールしてください
web ブラウザがインターネットエクスプローラ6(IE6)以下の場合メニューが崩れてしまうことがあります。
インターネットエクスプローラ7、Sleipnir、Mozilla Firefoxをご使用ください。