<!--
/////////////////////////////////////////////////////////////////////////
// 「Black JS」プレイ処理モジュール（play.js）(C)1999 Masahiko.Nitanda

/////////////////////////////////////////////////////////////////////
// CommonRAM
FFlg = 1;	// 処理フラグ(0:キー待ち、その他, 1:カード配る)
WhWnd = 0;	// 項目ウィンドウ種別(0:スタンド, 1:ヒット, 2:はい, 3:いいえ, -1:なし, -2:ドローの再プレイ用, -3:キー待ち)
DNum = 0;	// カード配布枚数
WCard = new Array(1, 1);	// カード待ちフラグ(0:ディーラー, 1:ユーザー)
CCNum = new Array(0, 0, 0, 0, 0);	// ディーラーのカード数値
CCMark = new Array(0, 0, 0, 0, 0);	// ディーラーのカードマーク
UCNum = new Array(0, 0, 0, 0, 0);	// ユーザーのカード数値
UCMark = new Array(0, 0, 0, 0, 0);	// ユーザーのカードマーク
TNum = new Array(0, 0);		// カード数値の合計(0:ディーラー, 1:ユーザー)
WBtn = 0;	// ボタンフラグ

// 数値表示位置設定用
CNumSpXo = new Array(28, 35);	// カード数値基本位置(0:左端カード位置, 1:カード幅)
CNumSpDx = new Array(-1, 0, 0, 0, 0, 0, 0, 0, 0, -4, 0, -2, -2);	// 基本位置からの相対位置(A〜K)
TNumSpXo = 263;	// カード数値の合計基本表示位置
TNumSpDx = 8;		// 基本位置からの相対位置

///////////////////////////////////////////////////////////////////////////
// インプリメンテーション

function IntPl()
{
	clearTimeout(tID);	// プレイタイマークリア

	if (WBtn) CBtn(1);
	
	if (FFlg){
		if (DNum >= 5){
			WCard[0] = WCard[1] = 0;
			FFlg = 1;
		}
		
		if (WCard[0]) WCard[0] = ComB();
		if (WCard[0] || WCard[1]){
			// カード配る
			DCard();
			DNum++;
		}
		else{
			for (i = 0; i < 5; i++){
				// ディーラーカード表表示
				if (CCNum[i]) VCard(CCNum[i], CCMark[i], i, 1);
				else break;
			}
			if (TNum[0] > 21) TPSp[0].color = "#ff0000";	// 赤色
			else TPSp[0].color = "#000000";								// 黒色
			
			if (TNum[0] < 10) TPSp[0].left = TNumSpXo;	// １桁
			else TPSp[0].left = TNumSpXo - TNumSpDx;		// ２桁
			TPSp[1].innerText = TNum[0];	// ディーラー合計値
			
			// 勝敗判定
			switch (WhWin()){
			case 0:	// ドロー
				SWords(21);
				WBtn = 1;
				CBtn(1);
				if (WhWnd != -1)
					SHWndSp[WhWnd].visibility = "hidden";	// 項目ウィンドウ非表示
				WhWnd = -2;
				break;
			case 1:	// 勝ち
				SWords(27);
				if (WhWnd != -1)
					SHWndSp[WhWnd].visibility = "hidden";	// 項目ウィンドウ非表示
				WhWnd = 2;
				SHWndSp[WhWnd].visibility = "visible";	// 「はい･いいえ」ウィンドウ表示
				IsWin = 1;
				break;
			case 2:	// 負け
				SWords(24);
				WBtn = 1;
				CBtn(1);
				if (WhWnd != -1)
					SHWndSp[WhWnd].visibility = "hidden";	// 項目ウィンドウ非表示
				WhWnd = -3;
				IsWin = -1;
				break;
			}
			
			FFlg = 0;
		}

		if (WCard[1]) FFlg = 0;
	}
	else{
		if(WhWnd != -1){
			// キー入力判定
			if (ON_KEY[4]){
				switch (WhWnd){
				case 0:	// スタンド
					WCard[1] = 0;
					SHWndSp[WhWnd].visibility = "hidden";	// 項目ウィンドウ非表示
					WhWnd = -1;	// キー入力不可
					FFlg = 1;
					break;
				case 1:	// ヒット
					FFlg = 1;
					break;
				case 2:	// はい
					iniPl(1);	// データ初期化
					DUpCnt++;
					break;
				case 3:	// いいえ
					ON_KEY[4] = OFF;
					if (DUpCnt){
						k = Math.pow(2, DUpCnt);
						GWords[30] = DUpCnt + "You succeeded " + k + " double ups!";
						GWords[31] = "Coin you can accept is " + k + " times.";
						GWords[32] = "";
						SHWndSp[WhWnd].visibility = "hidden";
						SWords(30);
						WBtn = 1;
						CBtn(1);
						WhWnd = -3;
					}
					else{
						// 掛け金ウィンドウ切替処理
						WndSp[2].visibility = "hidden";
						iniPl(2);
						CBetWnd();
						
						return;
					}
					break;
				case -2:	// ドローの再プレイ用
					iniPl(1);	// データ初期化
					break;
				case -3:
					// 掛け金ウィンドウ切替処理
					ON_KEY[4] = OFF;
					WndSp[2].visibility = "hidden";
					iniPl(2);
					CBetWnd();
				
					return;
				}
			
				ON_KEY[4] = OFF;
			}
			else if (ON_KEY[2] && !ON_KEY[3]){
				// 上キー
				if (WhWnd == 1 || WhWnd == 3){
					SHWndSp[WhWnd].visibility = "hidden";
					WhWnd--;
					SHWndSp[WhWnd].visibility = "visible";
				}
			}
			else if (ON_KEY[3] && !ON_KEY[2]){
				// 下キー
				if (WhWnd == 0 || WhWnd == 2){
					SHWndSp[WhWnd].visibility = "hidden";
					WhWnd++;
					SHWndSp[WhWnd].visibility = "visible";
				}
			}
		}
	}

	tID = setTimeout("IntPl()", Int);	// プレイタイマーセット
}

// カード配る
function DCard()
{
	n = 0; m = 0;
	date = new Date();
	for (i = 0; i < 2; i++){
		if (WCard[i]){
			// ランダムでカードを選ぶ
			while (1){
				d = 0;
				n = Math.floor((Math.random() * date.getTime()) % 13) + 1;
				m = Math.floor((Math.random() * date.getTime()) % 4);
				for (j = 0; j < 5; j++){
					// 重複チェック(重複：d = 1)
					if ((CCNum[j] == n && CCMark[j] == m) ||
						(UCNum[j] == n && UCMark[j] == m)){
						d = 1;
						break;
					}
				}
				if (!d){
					// 重複していないので決定
					if (i){
						// ユーザーカード
						UCNum[DNum] = n;
						UCMark[DNum] = m;
						if (n <= 10) TNum[1] += n;
						else TNum[1] += 10;
						if (TNum[1] > 21) TBSp[0].color = "#ff0000";	// 赤色
						else TBSp[0].color = "#000000";								// 黒色
						if (TNum[1] < 10) TBSp[0].left = TNumSpXo;	// １桁
						else TBSp[0].left = TNumSpXo - TNumSpDx;		// ２桁
						TBSp[1].innerText = TNum[1];	// 合計値
						VCard(n, m, DNum + 5, 1);	// ユーザーカード表示
					}
					else{
						// ディーラーカード
						CCNum[DNum] = n;
						CCMark[DNum] = m;
						if (n <= 10) TNum[0] += n;
						else TNum[0] += 10;
						VCard(n, m, DNum, 0);	// ディーラーカード表示
					}
					break;	// while(1) ループ抜ける
				} 
			}
		}
	}
}

// カード表示(n:数値, m:マーク, sp:スプライト番号, w:裏表(0:裏, 1:表))
// カード表示の表示
function VCard(n, m, sp, w)
{
	if (!w){
		// カード裏(ディーラーのみ)
		CRevSp[sp].visibility = "visible";
	}
	else{
		// カード表
		if (sp < 5) CRevSp[sp].visibility = "hidden";	// カード裏画像非表示

		CFounSp[sp].visibility = "visible";
		CMarkSp[m * 10 + sp].visibility = "visible";
		
		CNumSp[sp].left = CNumSpXo[0] + CNumSpXo[1] * (sp % 5) + CNumSpDx[n - 1];	// 表示位置微調整
		nsp = CNumSp[10 + sp];
		if (n == 1) nsp.innerText = "A";
		else if (n == 11) nsp.innerText = "J";
		else if (n == 12) nsp.innerText = "Q";
		else if (n == 13) nsp.innerText = "K";
		else nsp.innerText = n;
		
		// 数字色設定
		if (m >= 2) CNumSp[sp].color = "#ff0000";
		else CNumSp[sp].color = "#000000";
		
		CNumSp[sp].visibility = "visible";
	}
}

// ディーラー思考(戻り値 0:スタンド, 1:ヒット)
// 合計が１４を超えるとスタンドする
// 21 - (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 10 + 10 + 10) / 13 = 14.5
function ComB()
{
	if (TNum[0] > 14) return 0;
	return 1;
}

// 勝敗判定(戻り値 0:ドロー, 1:勝ち, 2:負け)
function WhWin()
{
	if (TNum[1] > 21){
		// ユーザーカード合計値 22以上
		if (TNum[0] > 21) return 0;
		else return 2;
	}
	else{
		// ユーザーカード合計値 21以下
		if (TNum[0] <= 21){
			if (TNum[0] > TNum[1]) return 2;
			else if (TNum[0] == 21 && TNum[1] == 21) return 0;
			else if (TNum[0] == TNum[1]) return 2;
		}
	}
	
	return 1;
}

// プレイデータ初期化
// dbl： 0-すべて初期化, 1-ダブルアップカウント同じ, 2-すべて非表示
function iniPl(dbl)
{
	// 数値
	FFlg = 1;
	WhWnd = 0;
	DNum = 0;
	WCard[0] = WCard[1] = 1;
	for (i = 0; i < 5; i++){
		CCNum[i] = 0;
		CCMark[i] = 0;
		UCNum[i] = 0;
		UCMark[i] = 0;
	}
	TNum[0] = TNum[1] = 0;
	WBtn = 0;
	
	// ダブルアップカウント
	if (!dbl) DUpCnt = 0;

	// メッセージウィンドウ
	SWords(18);
	CBtn(0);

	// スプライト
	for (i = 0; i < 5; i++) CRevSp[i].visibility = "hidden";
	for (i = 0; i < 10; i++) CFounSp[i].visibility = "hidden";
	for (i = 0; i < 40; i++) CMarkSp[i].visibility = "hidden";
	for (i = 0; i < 10; i++) CNumSp[i].visibility = "hidden";
	TPSp[0].left = TNumSpXo;
	TPSp[1].innerText = "?";
	TBSp[1].innerText = "";
	for (i = 1; i < 4; i++) SHWndSp[i].visibility = "hidden";
	if (dbl != 2) SHWndSp[0].visibility = "visible"; 
	else SHWndSp[0].visibility = "hidden";
	if (dbl == 2){
		TPSp[0].visibility = "hidden";
		TBSp[0].visibility = "hidden";
	}
}

// -->

