« 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
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