とっかかりやすい初心者プログラミング – ババ抜き(7) –

こんにちは、ファルコン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&lt;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 ]

スポンサードリンク



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です