//
// スマイル・ポーカー
//

    var state = 0;      // 状態
                        //  0：起動直後
                        //  1：初期状態
                        //  2：カードが配られ、ソート中
                        //  3：ソート後、カード選択
                        //  4：カードが交換され、ソート中
                        //  5：役が確定
                        // 10：ゲームオーバー

    var idx;            // 次のカード番号
    var cnt = 0;        // ゲーム数
    var coin = 100;     // コインの枚数
    var bid = 0;        // 掛け金の枚数
    var wait = 1000;    // ソート待ち時間
    var cmb;            // 最後の役
    var tcolor;         // 一覧表の字の色
    var bcolor;         // 一覧表の地の色
    card   = new Array(51);
    mycard = new Array(4);
    myhold = new Array(0, 0, 0, 0, 0);


// スタートボタン
function startgame()
{
    var i, j, tmp, x, y, id, name;
    var flag = true;

    // 状態チェック
    if (state != 0 && state != 1 && state != 5) {
        return false;
    }

    // 状態設定
    if (state == 0) {
        document.score.coin.value = 100;
        document.score.bid.value  = 0;
    }
    if (state == 5) {
        if (coin == 0) {
            alert("ゲームオーバー");
            cnt = 0;
            coin = 100;
            bid = 0;
            document.score.coin.value = 100;
            document.score.bid.value  = 0;
        } else {
            flag = confirm("もう一回やりますか？");
            if (!flag) {
                name = prompt("お名前は？", "");
                if (name != null && name != "") {
                    document.score.h_name.value = name;
                    document.score.h_coin.value = coin;
                    document.score.h_cnt.value = cnt;
                    document.score.submit();
                }
                cnt = 0;
                coin = 100;
                bid = 0;
                document.score.coin.value = 100;
                document.score.bid.value  = 0;
            }
        }
        state = 1;
        document.all.item(cmb).style.color = tcolor;
        document.all.item(cmb).style.backgroundColor = bcolor;
        document.images["card0"].src = "00.gif";
        document.images["card1"].src = "00.gif";
        document.images["card2"].src = "00.gif";
        document.images["card3"].src = "00.gif";
        document.images["card4"].src = "00.gif";
        return false;
    }
    state = 2
    cnt++;

    // 初期設定
    for (i=0; i<5; i++) {
        myhold[i] = 0;
    }

    // カードの作成
    for (i=0; i<52; i++) {
        card[i] = i+1;
        if (i < 9) {
            card[i] = "0" + card[i];
        }
    }

    // シャッフル
    for (i=0; i<102; i++) {
        x = Math.floor(Math.random() * 52);
        y = Math.floor(Math.random() * 52);
        tmp = card[x];
        card[x] = card[y];
        card[y] = tmp;
    }

    // カードを配る
    for (i=0; i<5; i++) {
        mycard[i] = card[i];
    }
    idx = 5;
    view();

    // ソート
    mycard.sort(func);
    id = setTimeout("view(); state=3;", wait);

    return false;
}

// チェンジボタン
function change()
{
    var i;
    var hand;

    // 状態チェック
    if (state != 3) {
        return false;
    }

    // エラーチェック
    if (document.score.bid.value == 0) {
        alert("掛け金がありません。");
        return false;
    }
    if (document.score.bid.value > coin) {
        alert("掛け金が多すぎます。");
        return false;
    }
    bid = document.score.bid.value;
    coin -= bid;
    document.score.coin.value = coin;

    // 状態設定
    state = 4;

    // カードを配る
    for (i=0; i<5; i++) {
        if (myhold[i] == 0) {
            mycard[i] = card[idx+i];
            document.images["card"+i].src = mycard[i] + ".gif";
            idx++;
        }
    }

    // ソート
    mycard.sort(func);
    id = setTimeout("view(); state=5;", wait);

    // 役の判定と計算
    hand = check();

    // 該当する役の表示を反転
    cmb = "cmb" + hand;
    tcolor = document.all.item(cmb).style.color;
    bcolor = document.all.item(cmb).style.backgroundColor;
    document.all.item(cmb).style.color           = "#ff0000";
    document.all.item(cmb).style.backgroundColor = "#ffff00";
}

// カード
function hold(num)
{
    // 状態チェック
    if (state != 3) {
        return false;
    }

    // カードを裏返す
    if (myhold[num] == 0) {
        myhold[num] = 1;
        document.images["card"+num].src = "00.gif";
    } else {
        myhold[num] = 0;
        document.images["card"+num].src = mycard[num] + ".gif";
    }
    return false;
}


// 役の判定
function check()
{
    var i, j, odds;
    var hand = 0;
    var flush = 0;
    c = new Array(4);

    // 手札をバッファに代入
    for (i=0; i<5; i++) {
        c[i] = Number(mycard[i]);
    }

    // フラッシュ？
    if (c[0] < 14 && c[1] < 14 && c[2] < 14 && c[3] < 14 && c[4] < 14) {
        flush = 1; hand = 5;
    } else if (c[0] > 13 && c[1] > 13 && c[2] > 13 && c[3] > 13 && c[4] > 13 && c[0] < 27 && c[1] < 27 && c[2] < 27 && c[3] < 27 && c[4] < 27) {
        flush = 1; hand = 5;
    } else if (c[0] > 26 && c[1] > 26 && c[2] > 26 && c[3] > 26 && c[4] > 26 && c[0] < 40 && c[1] < 40 && c[2] < 40 && c[3] < 40 && c[4] < 40) {
        flush = 1; hand = 5;
    } else if (c[0] > 39 && c[1] > 39 && c[2] > 39 && c[3] > 39 && c[4] > 39) {
        flush = 1; hand = 5;
    }

    // 数字だけにする
    for (i=0; i<5; i++) {
        for (j=0; j<5; j++) {
            if (c[j] > 13) { c[j] -= 13; }
        }
    }
    c.sort(func);

    // ワンペア？
    if (c[0] == c[1] || c[1] == c[2] || c[2] == c[3] || c[3] == c[4]) {
        hand = 1;
    }

    // ツーペア？
    if ((c[0] == c[1] && c[2] == c[3]) || (c[0] == c[1] && c[3] == c[4])  || (c[1] == c[2] && c[3] == c[4])) {
        hand = 2;
    }

    // スリーカード？
    if ((c[0] == c[1] && c[1] == c[2]) || (c[1] == c[2] && c[2] == c[3])  || (c[2] == c[3] && c[3] == c[4])) {
        hand = 3;
    }

    // ストレート？
    if (c[0] != 1 && c[0] == c[1]-1 && c[1] == c[2]-1 && c[2] == c[3]-1 && c[3] == c[4]-1) {
        hand = 4;
    }
    if (c[0] == 1 && c[1] == 10 && c[2] == 11 && c[3] == 12 && c[4] == 13) {
        hand = 4;
    }

    // フルハウス？
    if ((c[0] == c[1] && c[1] == c[2] && c[3] == c[4])  || (c[0] == c[1] && c[2] == c[3] && c[3] == c[4])) {
        hand = 6;
    }

    // フォーカード？
    if ((c[0] == c[1] && c[1] == c[2] && c[2] == c[3])  || (c[1] == c[2] && c[2] == c[3] && c[3] == c[4])) {
        hand = 7;
    }

    // ストレートフラッシュ？
    if (flush == 1 && hand == 4) {
        hand = 8;
    }

    // ロイヤルストレート？
    if (flush == 1 && c[0] == 1 && c[1] == 10 && c[2] == 11 && c[3] == 12 && c[4] == 13) {
        hand = 9;
    }

//    alert(c[0] + " " + c[1] + " " + c[2] + " " + c[3] + " " + c[4]);

    // 配当金の計算
    if (hand == 0) { odds = 0;      }   // ブタ
    if (hand == 1) { odds = 1;      }   // ワンペア
    if (hand == 2) { odds = 2;      }   // ツーペア
    if (hand == 3) { odds = 10;     }   // スリーカード
    if (hand == 4) { odds = 100;    }   // ストレート
    if (hand == 5) { odds = 500;    }   // フラッシュ
    if (hand == 6) { odds = 1000;   }   // フルハウス
    if (hand == 7) { odds = 5000;   }   // フォーカード
    if (hand == 8) { odds = 10000;  }   // ストレートフラッシュ
    if (hand == 9) { odds = 100000; }   // ロイヤルストレートフラッシュ

    coin += bid * odds;
    bid = 0;
    document.score.coin.value = coin;
    document.score.bid.value  = 0;
    return hand;
}

// カードの表示
function view()
{
    document.images["card0"].src = mycard[0] + ".gif";
    document.images["card1"].src = mycard[1] + ".gif";
    document.images["card2"].src = mycard[2] + ".gif";
    document.images["card3"].src = mycard[3] + ".gif";
    document.images["card4"].src = mycard[4] + ".gif";
}

// ソート関数
function func(a, b) { return(a - b); }

// end_of_file

