« BlackJack2 | メイン | ブラックジャック! »

2004年12月04日

Black_JACK

char buff[2]; //入力用
int input_judge; //入力判定用
int replay; //再プレイするかどうか

do{
printf("もう一度プレイしますか?[0:no/1:yes] > ");
fgets( buff, 2, stdin );
input_judge = sscanf( buff,"%d",buff);
} while(!(input_judge==1)&&!((buff[0]==0)||(buff[0]==1)));

0か1が入力されるまでループするよう。
が、このままではinput_judgeが1になった時点でなぜかループが終了されてしまう(&&以下が無視されている?)ので、

} while(!(input_judge==1));
replay = buff[0];
}while(!(replay==0||replay==1));

緩衝材を入れます。
これが、何でこんな事になるかわからないシリーズ1。

input_judge = sscanf( buff,"%d",buff);
sscanfは文字列をコピーする関数……。
sprintfも文字列を……。
とりあえず、入力された物を値としてコピーできる?かどうか判定するためにsscanfは使わざるをえないとして、
buffのアドレスのところに入っている文字列を十進数としてbuffのアドレスに格納、
そもそもbuff[0]に入っているのは単なる数値のはずでは……。
ああでも数値は数値でも二進数として。

結局buff[0]には1バイトの数値が、buff[1]には\0が。
なので、直接比較しようとして

} while(!(buff[0]==0||buff[0]==1));

こうやってみるとうまくいかず。
replay = buff[0];
これは苦肉の策です。
buff[0]:char replay:int なのでキャストは不要ということで。

しかし、これを挟んでいるためにdo do-while whileと、汚い事に。
どうにかネスト(でしたっけ?)を浅くしたい物ですが、難しい。

if(!(A_flag==0)){
 if(A_flag==1){
  if(temp_point + 11 > 21){ temp_point = temp_point + 1; }
  else if(temp_point + 11 <= 21){ temp_point = temp_point + 11; }
  else { error(); }
 } else if(A_flag==2||turn==0) {
  switch(fuda_plr_maisu){
   case 2: temp_point = 12;
         break;
   case 3: if(temp_point + 11 > 20){ temp_point = temp_point + 1; }
        else if(temp_point + 11 <= 20){ temp_point = temp_point + 12; }
        else { error(); }
        break;
  }
 } else if(A_flag==2||turn==1) {
  switch(fuda_cpu_maisu){
   case 2: temp_point = 12;
        break;
   case 3: if(temp_point + 11 > 20){ temp_point = temp_point + 1; }
        else if(temp_point + 11 <= 20){ temp_point = temp_point + 12; }
        else { error(); }
        break;
   }
  } else if(A_flag==3) { temp_point = 13; }
  else { error(); }
}

昨日よりは少し見易く。
が、なぜか、

┏━┓┏━┓
┃ク┃┃ス┃
┃1┃┃7┃
┗━┛┗━┛
もう一枚引きますか?
プレイヤーの点数:11

こんな事に。

for(i=0; i  if(fuda_plr[1][i] == 1){
  i++;
  A_flag++;
  continue;
 }
 else if(fuda_plr[1][i] >= 11){ temp_point = temp_point + 10; }
 else { temp_point = temp_point + fuda_plr[1][i]; }
}

つまり、1が先に来るとだめなんですが、多分これはcontinue文の使い方が整合性の取れないやり方になっている……のかなあ。
ほんとに考えれば考えるほどショボーン
もうちょっと様子を見るとつまり、fuda_plr[1][i]=1の時にきちんとi++してcontinueする時と、しない時があります。
かなり脳が枯渇状態なので、続きは時間を置いてからもう一度見てみる事にします。

こんな単純なコードで悩んでいるようでは先が思いやられる(・み・`

投稿者 miff : 2004年12月04日 15:13

コメント



XREAAD