教えてください。

このエントリーをはてなブックマークに追加
1みつき:03/12/07 14:22
こんにちは 初めて書き込みします。
今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("スリーカード成立でウマー");
}
ワンペアの役判定はできて、スリーカ-ドの役判定プログラムが作れないとな。
ほほーーー、板嵐と判定して良いかな?
9みつき:03/12/07 14:59
ありがとうざいます。 
ちなみにワンペアの役判定5時間くらいかかって作りました
それ以外は一つもできてないです。
一つ教えてくれないか。
ポーカーカードゲームの本体は何ヶ月かかったんだい?
まさか判定以外は何も作ってないのか。
11みつき:03/12/07 15:10
本体はワンペアの役判定とあわせて2ヶ月くらいです。
12デフォルトの名無しさん:03/12/07 15:10
ソース公開して。
13みつき:03/12/07 15:30
本体は家にあるのでワンペアの部分だけ
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;
}
いま、必死に作ったのが見え見得のコードだな。プププ
15みつき:03/12/07 15:38
どッか変ですかね?
一応動作しますけど
int [14];  なんだ!、コンパイラとうしたのか?
17みつき:03/12/07 15:44
ごめんなさい box 抜けてました
int box[14]; です。
18デフォルトの名無しさん:03/12/07 15:46
藁た。 漫才かい
まずは性別を言いなさい
20みつき:03/12/07 15:56
217:03/12/07 16:10
自分のコードもきれいじゃないけど、(むしろちゃんと動作するのか不明だけど)
これになら勝てそうだ。
227:03/12/07 16:20
return 1;
return 0;
てなに?
23ファイナル:03/12/07 16:36
戻り値だよ
戻ったあとにもっかい戻れんの?
>>24
おいおいおいおい大丈夫か?
バッファアンダーフロー対策だろ。
問題は
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
ポーカーの参考:ttp://www.japan-poker.net/game/dictionary.htm
ちなみにKとAをまたぐ役は判定していなかったり、他にもいろいろ適当。

さて・・・、嫌がらせも終わったところで寝るか。
つーか単発質問スレで遊んでんなよ。
こちらへどうぞ。

***すれ立てるまでもない質問はここで 第53刷***
http://pc5.2ch.net/test/read.cgi/tech/1081170910/l50
こちらもどうぞ。

C統合・質問スレッド
http://pc5.2ch.net/test/read.cgi/tech/1068359871/l50