こんにちは 初めて書き込みします。
今C言語でポーカ-ゲームのプログラム作っています。
ワンペアの役判定はできたんですけどスリーカ-ドの役判定プログラムが作れません。
誰か分かる人教えてください。
2 :
デフォルトの名無しさん:03/12/07 14:24
g(^o^t)o イェー
3 :
デフォルトの名無しさん:03/12/07 14:26
int main(){
main();
}
4 :
デフォルトの名無しさん:03/12/07 14:29
フン
5 :
デフォルトの名無しさん:03/12/07 14:30
これだから初心者は・・・
初カキコで単発質問新スレとは大胆な。
7 :
デフォルトの名無しさん:03/12/07 14:38
int j[13];
for(int n=0;n<13;n++)
j[n]=0;
for(int c=0;c<5;c++){
for(int i=0;i<13;i++){
if(card[c]==i)j[i]+=1;
}}
for(i=0;i<13;i++){
if(j[i]==3)
printf("スリーカード成立でウマー");
}
ワンペアの役判定はできて、スリーカ-ドの役判定プログラムが作れないとな。
ほほーーー、板嵐と判定して良いかな?
ありがとうざいます。
ちなみにワンペアの役判定5時間くらいかかって作りました
それ以外は一つもできてないです。
一つ教えてくれないか。
ポーカーカードゲームの本体は何ヶ月かかったんだい?
まさか判定以外は何も作ってないのか。
本体はワンペアの役判定とあわせて2ヶ月くらいです。
12 :
デフォルトの名無しさん:03/12/07 15:10
ソース公開して。
本体は家にあるのでワンペアの部分だけ
int one(card *c)
{
int [14];
int n, j;
int sum=0;
for (n=1; n<=13; n++) {
box[n] = 0;}
for (j=0; j<c->n; j++) {
box[c->card[j].number]++;}
for (n=1; n<=13; n++) {
if (box[n]>0)
sum++;}
printf("sum=%d\n", sum);
if (sum == 4)
return 1;
return 0;
}
いま、必死に作ったのが見え見得のコードだな。プププ
どッか変ですかね?
一応動作しますけど
int [14]; なんだ!、コンパイラとうしたのか?
ごめんなさい box 抜けてました
int box[14]; です。
18 :
デフォルトの名無しさん:03/12/07 15:46
藁た。 漫才かい
まずは性別を言いなさい
男
自分のコードもきれいじゃないけど、(むしろちゃんと動作するのか不明だけど)
これになら勝てそうだ。
return 1;
return 0;
てなに?
戻り値だよ
戻ったあとにもっかい戻れんの?
バッファアンダーフロー対策だろ。
問題は
int box[14]とする人がそんなことするのか。と。
14
29 :
デフォルトの名無しさん:03/12/07 21:10
>>24 おいおい大丈夫か?
if( sum == 4 ){
return 1 ;
}
return 0 ;
って事だろ?
#include "stdio.h"
#include "memory.h"
#include "stdlib.h"
#include "time.h"
#include "conio.h"
//一枚のトランプ
typedef struct TRUMP
{ char rank;//1〜13
char suit;//0:スペード,1:ダイヤ,2:クローバー,3:ハート
}*LPTRUMP;
typedef const TRUMP* LPCTRUMP;
//手札5枚
typedef struct CARD
{ int num;//手札の内、有効な枚数
TRUMP trump[5];
}*LPCARD;
typedef const CARD* LPCCARD;
//役表示関数
void PrintHand(LPCCARD pCard);
//役判定関数の型
typedef bool (*JUDGEHAND)(LPCCARD);
//判定関数
bool IsStraightFlush(LPCCARD pCard);
bool IsQuads(LPCCARD pCard);
bool IsFullHouse(LPCCARD pCard);
bool IsFlush(LPCCARD pCard);
bool IsStraight(LPCCARD pCard);
bool IsThreeOfKind(LPCCARD pCard);
bool IsTwoPair(LPCCARD pCard);
bool IsPair(LPCCARD pCard);
bool IsNoPair(LPCCARD pCard);
//内部関数
static void SetAtRank(LPCCARD pCard,char* ranks);
static void SetAtSuit(LPCCARD pCard,char* ranks);
//役テーブル
typedef struct HANDTABLE
{ JUDGEHAND JudgeHand;
const char* pHandName;
}*LPHANDTABLE;
typedef const HANDTABLE *LPCHANDTABLE;
//強い順に並べるのがミソ
const HANDTABLE g_HandTable[] =
{
{IsStraightFlush,"ストレートフラッシュ"}, {IsQuads,"フォーカード"},
{IsFullHouse,"フルハウス"}, {IsFlush,"フラッシュ"},
{IsStraight,"ストレート"}, {IsThreeOfKind,"スリーカード"},
{IsTwoPair,"ツーペア"}, {IsPair,"ワンペア"},
{IsNoPair,"ノーペア"}, {NULL,NULL}
};
static void SetAtRank(LPCCARD pCard,char* ranks)
{ int i;
memset(ranks,0,sizeof(char)*13);
for(i=0;i<pCard->num;i++) ranks[pCard->trump[i].rank -1]++;
return;
}
static void SetAtSuit(LPCCARD pCard,char* suits)
{ int i;
memset(suits,0,sizeof(char)*4);
for(i=0;i>pCard->num;i++) suits[pCard->trump[i].suit]++;
return;
}
void PrintHand(LPCCARD pCard)
{ int i;
LPCHANDTABLE pTable = g_HandTable;
for(i=0;pTable[i].JudgeHand;i++){
if(pTable[i].JudgeHand(pCard) != false) break;
}
if(pTable[i].JudgeHand == NULL) return ;
printf("あなたの役は%sです。\n",pTable[i].pHandName);
return;
}
bool IsNoPair(LPCCARD pCard){ return true;}
bool IsPair(LPCCARD pCard)
{ int i;
char buffer[13];
SetAtRank(pCard,buffer);
for(i=0;i<13;i++){
if(buffer[i] == 2) return true;
}
return false;
}
bool IsTwoPair(LPCCARD pCard)
{ int i,flag = 0;
char buffer[13];
SetAtRank(pCard,buffer);
for(i=0;i<13;i++) {
if(buffer[i] == 2) flag++;
}
return flag == 2;
}
bool IsThreeOfKind(LPCCARD pCard)
{ int i; char buffer[13];
SetAtRank(pCard,buffer);
for(i=0;i<13;i++){ if(buffer[i] == 3) return true;}
return false;
}
bool IsStraight(LPCCARD pCard)
{ int i,j; char buffer[13];
SetAtRank(pCard,buffer);
for(i=0;i<13;i++){ if(buffer[i] == 1) break;}
for(j=i;j<13;j++){ if(buffer[j] == 0) break;}
return j - i == 5;
}
bool IsFlush(LPCCARD pCard)
{ int i; char buffer[4];
SetAtSuit(pCard,buffer);
for(i=0;i<4;i++){ if(buffer[i] == 5) return true;}
return false;
}
bool IsFullHouse(LPCCARD pCard)
{ int i,flag2 = 0,flag3 = 0;
char buffer[13];
SetAtRank(pCard,buffer);
for(i=0;i<13;i++){
if(buffer[i] == 2) flag2 = 1;
if(buffer[i] == 3) flag3 = 1;
if(flag2 & flag3) return true;
}
return false;
}
bool IsQuads(LPCCARD pCard)
{ int i; char buffer[13];
SetAtRank(pCard,buffer);
for(i=0;i<13;i++){ if(buffer[i] == 4) return true;}
return false;
}
bool IsStraightFlush(LPCCARD pCard)
{
return IsFlush(pCard) && IsStraight(pCard);
}
int main(int argc, char* argv[])
{ int i,j;
CARD card;
const char* Symbol[] ={"スペード","ダイヤ","クローバー","ハート",NULL};
srand(time(NULL));
card.num = 5;
do{
for(i=0;i<card.num;i++){
card.trump[i].rank = 1 + rand() % 13;
card.trump[i].suit = rand() % 4;
printf("%s%d,",Symbol[card.trump[i].suit],card.trump[i].rank);
}
puts("\b");
PrintHand(&card);
j = getche();
j = tolower(j);
}while((char)j != 'z');
return 0;
}
jokerは?
36 :
デフォルトの名無しさん:03/12/08 00:05
つーか単発質問スレで遊んでんなよ。