トップページ⇒tech
40コメント11KB

教えてください。

■ このスレッドは過去ログ倉庫に格納されています
0001みつきNGNG
こんにちは 初めて書き込みします。
今C言語でポーカ-ゲームのプログラム作っています。
ワンペアの役判定はできたんですけどスリーカ-ドの役判定プログラムが作れません。
誰か分かる人教えてください。 
0002デフォルトの名無しさんNGNG
g(^o^t)o イェー
0003デフォルトの名無しさんNGNG
int main(){
main();
}
0004デフォルトの名無しさんNGNG
フン
0005デフォルトの名無しさんNGNG
これだから初心者は・・・
0006デフォルトの名無しさんNGNG
初カキコで単発質問新スレとは大胆な。
0007デフォルトの名無しさんNGNG
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("スリーカード成立でウマー");
}
0008デフォルトの名無しさんNGNG
ワンペアの役判定はできて、スリーカ-ドの役判定プログラムが作れないとな。
ほほーーー、板嵐と判定して良いかな?
0009みつきNGNG
ありがとうざいます。 
ちなみにワンペアの役判定5時間くらいかかって作りました
それ以外は一つもできてないです。
0010デフォルトの名無しさんNGNG
一つ教えてくれないか。
ポーカーカードゲームの本体は何ヶ月かかったんだい?
まさか判定以外は何も作ってないのか。
0011みつきNGNG
本体はワンペアの役判定とあわせて2ヶ月くらいです。
0012デフォルトの名無しさんNGNG
ソース公開して。
0013みつきNGNG
本体は家にあるのでワンペアの部分だけ
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;
}
0014デフォルトの名無しさんNGNG
いま、必死に作ったのが見え見得のコードだな。プププ
0015みつきNGNG
どッか変ですかね?
一応動作しますけど
0016デフォルトの名無しさんNGNG
int [14];  なんだ!、コンパイラとうしたのか?
0017みつきNGNG
ごめんなさい box 抜けてました
int box[14]; です。
0018デフォルトの名無しさんNGNG
藁た。 漫才かい
0019デフォルトの名無しさんNGNG
まずは性別を言いなさい
0020みつきNGNG
男
00217NGNG
自分のコードもきれいじゃないけど、(むしろちゃんと動作するのか不明だけど)
これになら勝てそうだ。
00227NGNG
return 1;
return 0;
てなに?
0023ファイナルNGNG
戻り値だよ
0024デフォルトの名無しさんNGNG
戻ったあとにもっかい戻れんの?
0025デフォルトの名無しさんNGNG
>>24
おいおいおいおい大丈夫か?
0026デフォルトの名無しさんNGNG
バッファアンダーフロー対策だろ。
0027デフォルトの名無しさんNGNG
問題は
int box[14]とする人がそんなことするのか。と。
0028デフォルトの名無しさんNGNG
14
0029デフォルトの名無しさんNGNG
>>24
おいおい大丈夫か?

if( sum == 4 ){
  return 1 ;
}
return 0 ;

って事だろ?
0030デフォルトの名無しさんNGNG
#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);
0031デフォルトの名無しさんNGNG
//内部関数
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;
}

0032デフォルトの名無しさんNGNG
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;
}
0033デフォルトの名無しさんNGNG
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;
}
0034デフォルトの名無しさんNGNG
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;
}
0035デフォルトの名無しさんNGNG
jokerは?
0036デフォルトの名無しさんNGNG
ポーカーの参考:ttp://www.japan-poker.net/game/dictionary.htm
ちなみにKとAをまたぐ役は判定していなかったり、他にもいろいろ適当。

さて・・・、嫌がらせも終わったところで寝るか。
0037デフォルトの名無しさんNGNG
つーか単発質問スレで遊んでんなよ。
0038デフォルトの名無しさんNGNG
こちらへどうぞ。

***すれ立てるまでもない質問はここで 第53刷***
http://pc5.2ch.net/test/read.cgi/tech/1081170910/l50
0039デフォルトの名無しさんNGNG
こちらもどうぞ。

C統合・質問スレッド
http://pc5.2ch.net/test/read.cgi/tech/1068359871/l50
0040停止しました。。。NGNG
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
■ このスレッドは過去ログ倉庫に格納されています