こんにちは、ファルコンMです。
とっかかりやすい初心者プログラミング ババ抜きシリーズ 7回目。
Web ブラウザでババ抜きをするプログラミング。Jquery の続きです。
今回は、手札にカードが配られてから、同じカードを捨てるアルゴリズムです。
手札から同じカードを捨てよう
コードは以下です。
var handcard = new Array(); for(var i=0; i<4; i++) { handcard[i] = new Array(); } <!-- 開始ボタン押し --> $("#start").on("click", function(){ --- 略 --- <!-- 同じ数値のカードを捨てる --> for(var i=0; i<4; i++){ cardChk(i); } }); <!-- 同じ数値のカードを確認する。 --> <!-- 同じ数値のカードは、-1にする。 --> function cardChk(idx){ var arr = handcard[idx]; var num = arr.length; for( var i=0; i<num-1; i++ ){ if( arr[i]!=-1 && arr[i] != 52){ for( var j=i+1; j<num; j++){ if( arr[j]!=-1 && arr[i] != 52){ if( arr[i]%13 == arr[j]%13 ){ arr[i] = -1; arr[j] = -1; break; } } } } } cardSride(idx); } <!-- 手札を配列の左に詰める --> function cardSride(idx){ var tmpArr = new Array(); var arr = handcard[idx]; var num = arr.length; var tmpIdx = 0; for( var i=0; i<num; i++){ if( arr[i] != -1){ tmpArr[tmpIdx] = arr[i]; tmpIdx++; } } handcard[idx] = tmpArr; }
- handcard[プレイヤー数][カード数] は手札を表す、2次元配列
cardChk 関数で、同じ数値カードを検索する
0番目と1番目、0番目と2番目、、、、1番目と2番目、1番目と3番目 、、、という順番に同じカードを検索します。同じ数値カードを見つけたら、その2つのカードの数値を-1 にします。同じ数値かどうかは、13で割った余りが同じかどうかで判断します。
すべて検索が終わったら、handcard は-1 と普通の数値がごちゃごちゃになっています。
cardSride 関数で、-1を削除し、配列の左詰めを行う
cardChk の後は、cardSrideを呼び出します。cardSride では、手札に-1があればそれを削除し、左に詰めるということをしています。テンポラリ配列 tmpArr に、handcard から-1 以外の数値を追加していきます。最後に、元のhandcard と入れ替えます。
まとめ
cardChk とcardSride を実行することで、手札から同じカードを捨てるというアルゴリズムを実現しています。
おうちで学べるアルゴリズムのきほん (おうちで学べる) [ 鈴木 浩一 ]
アルゴリズムクイックリファレンス 第2版 [ George T. Heineman ]
コメントを残す