<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>情報・遊び・ツールなど &#8211; どんどん！ブログノウハウ紹介ブログ</title>
	<atom:link href="https://boonboonblog.com/topics/other-information/feed" rel="self" type="application/rss+xml" />
	<link>https://boonboonblog.com</link>
	<description>Be Fun Blog, Be Fantastic Blog</description>
	<lastBuildDate>Mon, 13 Apr 2026 11:55:53 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://boonboonblog.com/wp-content/uploads/cropped-2022012909-32x32.jpg</url>
	<title>情報・遊び・ツールなど &#8211; どんどん！ブログノウハウ紹介ブログ</title>
	<link>https://boonboonblog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【無料・攻略法】実際に遊べるジャックポットダイスゲーム（ブラウザ上で遊べる）</title>
		<link>https://boonboonblog.com/entries/entry-56451.html</link>
		
		<dc:creator><![CDATA[Boon ☆《ブログ魂》]]></dc:creator>
		<pubDate>Sun, 05 Apr 2026 14:10:04 +0000</pubDate>
				<category><![CDATA[情報・遊び・ツールなど]]></category>
		<guid isPermaLink="false">https://boonboonblog.com/?p=56451</guid>

					<description><![CDATA[<p><img src="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>ジャックポットダイスゲームを実際に遊べるページです。ルールや遊び方、勝つためのコツもわかりやすく紹介。1〜9の木札を倒して最後の1枚を取る、シンプルだけど奥深い人気のダイスゲームをぜひ体験してください。]]></description>
										<content:encoded><![CDATA[<p><img src="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<div class="p-blogParts post_content" data-partsID="53455">
<p>広告：ページ内にてアフィリエイト広告を利用しています。</p>
</div>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg" alt="実際に遊べるページ JackPot Dice" class="wp-image-56479" srcset="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022060576-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022060576-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022060576.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div class="p-blogParts post_content" data-partsID="53457"></div>



<p>ジャックポットダイスゲームは、タイなどのBARで良く置いてあるゲームで、スタッフさんと楽しく遊んだりできます。サイコロゲームなので運ゲーに見えますが、若干の「有利になるポイント」もあるゲームです。</p>



<p class="has-border -border01 has-swl-pale-01-background-color has-background"><strong>本ページでは、実際にジャックポットダイスゲームが遊べます。</strong></p>



<div id="myLinkBox" class="myLinkBox-container myBorderRed">
  <div class="myLinkBox-header">
    <span class="myLinkBox-tag myBackgroundRed">おすすめ</span>
    <div class="myLinkBox-title  myTextRed">自宅でできる副業</div>
  </div>

  <p class="myLinkBox-text">
今は副業の時代、正社員、会社員の給料だけでは老後が不安です。自宅でできる副業で副収入があれば、
そのお金をもとに投資、最後は FIRE も期待できますね。
  </p>

  <div class="myLinkBox-copy">
    ＼始めなければ始まらない／
  </div>

  <div class="myLinkBox-btn-wrap">
    <a class="my-common-apealbar myLinkBox-btn" href="https://boonboonblog.com/entries/entry-10517.html">
      【簡単・初心者】たった6ステップで解説「ブログ・アフィリエイトの始め方」
      <img decoding="async" src="https://boonboonblog.com/wp-content/uploads/common_buttonicon33.png" alt="" class="myLinkBox-icon33">
    </a>
  </div>

  <div class="myLinkBox-footer">
    <p>お金があると生活が変わる</p>
  </div>
</div>




<h2 class="wp-block-heading">ジャックポットダイスゲームを遊ぼう</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">やってみよう！</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<div class="myJackpotBoxWoodGame" id="myJackpotBoxWoodGame">
  <style>
    .myJackpotBoxWoodGame{
      --bg:#2b1d15;
      --bg2:#3a271d;
      --panel:#4a3326;
      --panel2:#5a3e2e;
      --wood1:#8b5a34;
      --wood2:#6f4528;
      --wood3:#c79b69;
      --wood4:#dbc29c;
      --line:#7b583f;
      --text:#f3e7d7;
      --sub:#d8c1a8;
      --accent:#d1a16a;
      --accent2:#b5824e;
      --green:#87c38f;
      --red:#e49a8d;
      --shadow:0 12px 32px rgba(0,0,0,0.28);
      max-width:980px;
      margin:24px auto;
      padding:22px;
      color:var(--text);
      font-family:"Hiragino Kaku Gothic ProN","Yu Gothic","Meiryo",sans-serif;
      background:
        radial-gradient(circle at top left, rgba(255,255,255,0.06), transparent 26%),
        linear-gradient(180deg, #3b291f 0%, #241811 100%);
      border:1px solid #5f4331;
      border-radius:22px;
      box-shadow:var(--shadow);
      overflow:hidden;
      position:relative;
    }

    .myJackpotBoxWoodGame *{
      box-sizing:border-box;
    }

    .myJackpotBoxWoodGame:before{
      content:"";
      position:absolute;
      inset:10px;
      border:1px solid rgba(219,194,156,0.12);
      border-radius:16px;
      pointer-events:none;
    }

    .myJackpotBoxWoodGame-title{
      display:flex;
      align-items:center;
      justify-content:space-between;
      gap:16px;
      flex-wrap:wrap;
      margin-bottom:16px;
      position:relative;
      z-index:1;
    }

    .myJackpotBoxWoodGame-titleMain{
      font-size:30px;
      font-weight:800;
      letter-spacing:0.06em;
      color:#f7eadb;
      text-shadow:0 2px 8px rgba(0,0,0,0.18);
    }

    .myJackpotBoxWoodGame-titleSub{
      font-size:13px;
      color:var(--sub);
      margin-top:6px;
      line-height:1.7;
    }

    .myJackpotBoxWoodGame-badge{
      padding:10px 18px;
      border-radius:999px;
      background:linear-gradient(180deg,var(--accent),var(--accent2));
      color:#2b1d15;
      font-weight:800;
      border:1px solid #d7b184;
      box-shadow:0 8px 18px rgba(0,0,0,0.18);
    }

    .myJackpotBoxWoodGame-top{
      display:grid;
      grid-template-columns:1.4fr 1fr;
      gap:16px;
      margin-bottom:16px;
      position:relative;
      z-index:1;
    }

    .myJackpotBoxWoodGame-panel{
      background:linear-gradient(180deg, rgba(255,255,255,0.05), rgba(0,0,0,0.08));
      border:1px solid #664834;
      border-radius:18px;
      padding:16px;
      box-shadow:inset 0 1px 0 rgba(255,255,255,0.04);
    }

    .myJackpotBoxWoodGame-statusHead{
      display:flex;
      align-items:center;
      justify-content:space-between;
      gap:10px;
      flex-wrap:wrap;
      margin-bottom:10px;
    }

    .myJackpotBoxWoodGame-turn{
      display:inline-flex;
      align-items:center;
      gap:10px;
      background:rgba(255,255,255,0.05);
      border:1px solid #6f503c;
      border-radius:999px;
      padding:8px 14px;
      font-size:14px;
      font-weight:700;
      color:#f4e6d4;
    }

    .myJackpotBoxWoodGame-dot{
      width:10px;
      height:10px;
      border-radius:50%;
      background:#e6ba86;
      box-shadow:0 0 0 5px rgba(230,186,134,0.12);
      flex:0 0 auto;
    }

    .myJackpotBoxWoodGame-progress{
      font-size:14px;
      color:var(--sub);
      font-weight:700;
    }

    .myJackpotBoxWoodGame-message{
      font-size:21px;
      font-weight:800;
      line-height:1.6;
      color:#fff3e5;
      min-height:68px;
    }

    .myJackpotBoxWoodGame-boardWrap{
      background:linear-gradient(180deg,#7f1321 0%, #9b1a29 100%);
      border:12px solid #795033;
      border-radius:20px;
      padding:16px;
      box-shadow:
        inset 0 0 0 2px rgba(255,255,255,0.08),
        inset 0 14px 22px rgba(255,255,255,0.04),
        inset 0 -20px 28px rgba(0,0,0,0.16),
        0 12px 26px rgba(0,0,0,0.18);
      position:relative;
      overflow:hidden;
      margin-bottom:16px;
    }

    .myJackpotBoxWoodGame-boardWrap:before{
      content:"";
      position:absolute;
      inset:8px;
      border:1px solid rgba(255,255,255,0.10);
      border-radius:10px;
      pointer-events:none;
    }

    .myJackpotBoxWoodGame-board{
      display:grid;
      grid-template-columns:repeat(9,1fr);
      gap:10px;
      position:relative;
      z-index:1;
    }

    .myJackpotBoxWoodGame-tile{
      height:86px;
      border:none;
      border-radius:12px;
      cursor:pointer;
      position:relative;
      transform-origin:center bottom;
      transition:transform .28s ease, box-shadow .28s ease, filter .28s ease;
      background:
        linear-gradient(90deg, rgba(255,255,255,0.10), rgba(255,255,255,0.02) 24%, rgba(0,0,0,0.08) 78%, rgba(0,0,0,0.14)),
        linear-gradient(180deg, var(--wood3), #a37248 35%, var(--wood1) 70%, var(--wood2));
      box-shadow:
        inset 0 1px 0 rgba(255,255,255,0.20),
        inset 0 -2px 0 rgba(0,0,0,0.16),
        0 7px 14px rgba(0,0,0,0.20);
      color:#fffaf4;
      font-size:40px;
      font-weight:800;
      text-shadow:0 2px 4px rgba(0,0,0,0.20);
    }

    .myJackpotBoxWoodGame-tile:hover{
      filter:brightness(1.06);
      transform:translateY(-2px);
    }

    .myJackpotBoxWoodGame-tile:disabled{
      cursor:default;
    }

    .myJackpotBoxWoodGame-tile.is-down{
      transform:rotateX(76deg) translateY(8px);
      filter:saturate(0.72) brightness(0.82);
      box-shadow:
        inset 0 1px 0 rgba(255,255,255,0.10),
        0 2px 7px rgba(0,0,0,0.16);
    }

    .myJackpotBoxWoodGame-tile.is-choice{
      outline:3px solid rgba(230,186,134,0.50);
      animation:myJackpotBoxWoodPulse 1.2s ease-in-out infinite;
    }

    @keyframes myJackpotBoxWoodPulse{
      0%{ box-shadow:0 0 0 0 rgba(230,186,134,0.22), inset 0 1px 0 rgba(255,255,255,0.20), 0 7px 14px rgba(0,0,0,0.20); }
      70%{ box-shadow:0 0 0 12px rgba(230,186,134,0), inset 0 1px 0 rgba(255,255,255,0.20), 0 7px 14px rgba(0,0,0,0.20); }
      100%{ box-shadow:0 0 0 0 rgba(230,186,134,0), inset 0 1px 0 rgba(255,255,255,0.20), 0 7px 14px rgba(0,0,0,0.20); }
    }

    .myJackpotBoxWoodGame-main{
      display:grid;
      grid-template-columns:1.25fr .95fr;
      gap:16px;
      position:relative;
      z-index:1;
    }

    .myJackpotBoxWoodGame-diceArea{
      display:flex;
      align-items:center;
      gap:12px;
      flex-wrap:wrap;
      margin-bottom:16px;
      min-height:86px;
    }

    .myJackpotBoxWoodGame-die{
      width:70px;
      height:70px;
      border-radius:16px;
      border:2px solid #ddc4a4;
      background:linear-gradient(180deg,#fff9f1,#f0e1cf);
      box-shadow:
        inset 0 2px 0 rgba(255,255,255,0.85),
        inset 0 -2px 0 rgba(0,0,0,0.10),
        0 12px 20px rgba(0,0,0,0.18);
      position:relative;
      display:grid;
      grid-template-columns:repeat(3,1fr);
      grid-template-rows:repeat(3,1fr);
      padding:9px;
    }

    .myJackpotBoxWoodGame-die.is-rolling{
      animation:myJackpotBoxWoodShake .22s linear infinite;
    }

    @keyframes myJackpotBoxWoodShake{
      0%{ transform:translateX(0) rotate(0deg); }
      20%{ transform:translateX(-4px) rotate(-6deg); }
      40%{ transform:translateX(4px) rotate(6deg); }
      60%{ transform:translateX(-3px) rotate(-4deg); }
      80%{ transform:translateX(3px) rotate(4deg); }
      100%{ transform:translateX(0) rotate(0deg); }
    }

    .myJackpotBoxWoodGame-pip{
      width:11px;
      height:11px;
      border-radius:50%;
      background:#4f3523;
      align-self:center;
      justify-self:center;
      opacity:0;
      box-shadow:inset 0 1px 0 rgba(255,255,255,0.15);
    }

    .myJackpotBoxWoodGame-pip.is-on{
      opacity:1;
    }

    .myJackpotBoxWoodGame-diceLabel{
      font-size:28px;
      font-weight:800;
      color:#e7c59c;
      min-width:22px;
      text-align:center;
    }

    .myJackpotBoxWoodGame-choices{
      display:flex;
      flex-wrap:wrap;
      gap:10px;
      min-height:44px;
      margin-bottom:16px;
    }

    .myJackpotBoxWoodGame-choice{
      border:none;
      border-radius:999px;
      padding:11px 16px;
      font-size:14px;
      font-weight:800;
      color:#2b1d15;
      background:linear-gradient(180deg,#e7c293,#cda06d);
      border:1px solid #d7b184;
      cursor:pointer;
      box-shadow:0 8px 16px rgba(0,0,0,0.14);
      transition:transform .16s ease, filter .16s ease;
    }

    .myJackpotBoxWoodGame-choice:hover{
      transform:translateY(-1px);
      filter:brightness(1.05);
    }

    .myJackpotBoxWoodGame-actions{
      display:flex;
      gap:10px;
      flex-wrap:wrap;
    }

    .myJackpotBoxWoodGame-btn{
      border:none;
      border-radius:12px;
      padding:13px 18px;
      font-size:16px;
      font-weight:800;
      cursor:pointer;
      transition:transform .16s ease, opacity .16s ease, filter .16s ease;
    }

    .myJackpotBoxWoodGame-btn:hover{
      transform:translateY(-1px);
      filter:brightness(1.04);
    }

    .myJackpotBoxWoodGame-btn:disabled{
      opacity:0.45;
      cursor:not-allowed;
      transform:none;
      filter:none;
    }

    .myJackpotBoxWoodGame-btnRoll{
      color:#2b1d15;
      background:linear-gradient(180deg,#e8c390,#c7965f);
      border:1px solid #d8af7b;
      box-shadow:0 10px 18px rgba(0,0,0,0.18);
    }

    .myJackpotBoxWoodGame-btnReset{
      color:#f2e4d4;
      background:linear-gradient(180deg,#6b4a37,#513728);
      border:1px solid #81604b;
    }

    .myJackpotBoxWoodGame-log{
      max-height:330px;
      overflow:auto;
      background:rgba(0,0,0,0.10);
      border:1px solid #6a4b38;
      border-radius:14px;
      padding:14px;
    }

    .myJackpotBoxWoodGame-logTitle{
      font-size:16px;
      font-weight:800;
      color:#f4e6d6;
      margin-bottom:10px;
    }

    .myJackpotBoxWoodGame-logItem{
      padding:9px 0;
      border-bottom:1px dashed rgba(231,197,156,0.18);
      font-size:14px;
      line-height:1.6;
      color:#eadbc9;
    }

    .myJackpotBoxWoodGame-logItem:last-child{
      border-bottom:none;
    }

    .myJackpotBoxWoodGame-mark{
      display:inline-block;
      min-width:58px;
      text-align:center;
      padding:3px 8px;
      border-radius:999px;
      font-size:12px;
      font-weight:800;
      margin-right:8px;
      vertical-align:middle;
    }

    .myJackpotBoxWoodGame-markPlayer{
      background:rgba(230,186,134,0.18);
      color:#f0c693;
      border:1px solid rgba(230,186,134,0.26);
    }

    .myJackpotBoxWoodGame-markCpu{
      background:rgba(187,160,132,0.18);
      color:#e2c39d;
      border:1px solid rgba(187,160,132,0.24);
    }

    .myJackpotBoxWoodGame-note{
      margin-top:12px;
      font-size:12px;
      color:#cfb79b;
      line-height:1.8;
    }

    .myJackpotBoxWoodGame-strongWin{
      color:#b7e1bb;
      font-weight:800;
    }

    .myJackpotBoxWoodGame-strongLose{
      color:#f0b1a6;
      font-weight:800;
    }

    @media (max-width:900px){
      .myJackpotBoxWoodGame-top,
      .myJackpotBoxWoodGame-main{
        grid-template-columns:1fr;
      }
    }

    @media (max-width:720px){
      .myJackpotBoxWoodGame{
        padding:16px;
      }

      .myJackpotBoxWoodGame-titleMain{
        font-size:24px;
      }

      .myJackpotBoxWoodGame-board{
        grid-template-columns:repeat(5,1fr);
      }

      .myJackpotBoxWoodGame-tile{
        height:72px;
        font-size:33px;
      }

      .myJackpotBoxWoodGame-die{
        width:62px;
        height:62px;
      }
    }
  </style>

  <div class="myJackpotBoxWoodGame-title">
    <div>
      <div class="myJackpotBoxWoodGame-titleMain">ジャックポットゲーム</div>
      <div class="myJackpotBoxWoodGame-titleSub">箱は1つだけ。プレイヤーとコンピューターが同じ 1〜9 を交互に倒していき、最後の1枚を倒した方が JACKPOT 勝ち。</div>
    </div>
    <div class="myJackpotBoxWoodGame-badge">VS コンピューター</div>
  </div>

  <div class="myJackpotBoxWoodGame-top">
    <div class="myJackpotBoxWoodGame-panel">
      <div class="myJackpotBoxWoodGame-statusHead">
        <div class="myJackpotBoxWoodGame-turn">
          <span class="myJackpotBoxWoodGame-dot" id="myJackpotBoxWoodTurnDot"></span>
          <span id="myJackpotBoxWoodTurnText">あなたのターン</span>
        </div>
        <div class="myJackpotBoxWoodGame-progress" id="myJackpotBoxWoodProgress">倒れた札 0 / 9</div>
      </div>
      <div class="myJackpotBoxWoodGame-message" id="myJackpotBoxWoodMessage">「サイコロを振る」を押して開始してください。</div>
    </div>

    <div class="myJackpotBoxWoodGame-panel">
      <div class="myJackpotBoxWoodGame-logTitle">ルール</div>
      <div style="font-size:14px; line-height:1.8; color:#e6d5c2;">
        サイコロは2個。毎ターン1回だけ振って交代。<br>
        出た <strong>左の目</strong>、<strong>右の目</strong>、<strong>合計</strong> のどれか1つに対応する札を倒せます。<br>
        倒せる札がなくてもそのターンで終了。最後の1枚を倒した方の勝ちです。
      </div>
    </div>
  </div>

  <div class="myJackpotBoxWoodGame-boardWrap">
    <div class="myJackpotBoxWoodGame-board" id="myJackpotBoxWoodBoard"></div>
  </div>

  <div class="myJackpotBoxWoodGame-main">
    <div class="myJackpotBoxWoodGame-panel">
      <div class="myJackpotBoxWoodGame-diceArea">
        <div class="myJackpotBoxWoodGame-die" id="myJackpotBoxWoodDie1"></div>
        <div class="myJackpotBoxWoodGame-diceLabel">+</div>
        <div class="myJackpotBoxWoodGame-die" id="myJackpotBoxWoodDie2"></div>
        <div class="myJackpotBoxWoodGame-diceLabel">=</div>
        <div class="myJackpotBoxWoodGame-diceLabel" id="myJackpotBoxWoodSum" style="min-width:44px;">&#8211;</div>
      </div>

      <div class="myJackpotBoxWoodGame-choices" id="myJackpotBoxWoodChoices"></div>

      <div class="myJackpotBoxWoodGame-actions">
        <button class="myJackpotBoxWoodGame-btn myJackpotBoxWoodGame-btnRoll" id="myJackpotBoxWoodRollBtn">サイコロを振る</button>
        <button class="myJackpotBoxWoodGame-btn myJackpotBoxWoodGame-btnReset" id="myJackpotBoxWoodResetBtn">最初から</button>
      </div>

      <div class="myJackpotBoxWoodGame-note">
        木札を直接クリックしても選べます。<br>
        コンピューターは少しだけ大きい数字を優先します。
      </div>
    </div>

    <div class="myJackpotBoxWoodGame-panel">
      <div class="myJackpotBoxWoodGame-logTitle">対戦ログ</div>
      <div class="myJackpotBoxWoodGame-log" id="myJackpotBoxWoodLog"></div>
    </div>
  </div>

  <script>
    (function(){
      var boardEl = document.getElementById("myJackpotBoxWoodBoard");
      var die1El = document.getElementById("myJackpotBoxWoodDie1");
      var die2El = document.getElementById("myJackpotBoxWoodDie2");
      var sumEl = document.getElementById("myJackpotBoxWoodSum");
      var choicesEl = document.getElementById("myJackpotBoxWoodChoices");
      var logEl = document.getElementById("myJackpotBoxWoodLog");
      var msgEl = document.getElementById("myJackpotBoxWoodMessage");
      var turnTextEl = document.getElementById("myJackpotBoxWoodTurnText");
      var turnDotEl = document.getElementById("myJackpotBoxWoodTurnDot");
      var progressEl = document.getElementById("myJackpotBoxWoodProgress");
      var rollBtn = document.getElementById("myJackpotBoxWoodRollBtn");
      var resetBtn = document.getElementById("myJackpotBoxWoodResetBtn");

      var state = {};

      function init(){
        state = {
          downMap:{},
          downOrder:[],
          turn:"player",
          finished:false,
          rolling:false,
          die1:null,
          die2:null,
          validChoices:[]
        };

        createBoard();
        createDieFace(die1El);
        createDieFace(die2El);
        setDieFace(die1El, 0);
        setDieFace(die2El, 0);
        sumEl.textContent = "-";
        choicesEl.innerHTML = "";
        logEl.innerHTML = "";
        setMessage("「サイコロを振る」を押して開始してください。");
        addLog("ゲーム開始。あなたの先手です。");
        updateAll();
      }

      function createBoard(){
        boardEl.innerHTML = "";
        var i = 1;
        for(i = 1; i <= 9; i++){
          var btn = document.createElement("button");
          btn.type = "button";
          btn.className = "myJackpotBoxWoodGame-tile";
          btn.textContent = String(i);
          btn.setAttribute("data-num", String(i));
          btn.addEventListener("click", function(){
            var n = Number(this.getAttribute("data-num"));
            if(state.finished === true){
              return;
            }
            if(state.turn !== "player"){
              return;
            }
            if(state.rolling === true){
              return;
            }
            if(state.validChoices.indexOf(n) === -1){
              return;
            }
            playerChoose(n);
          });
          boardEl.appendChild(btn);
        }
      }

      function createDieFace(el){
        el.innerHTML = "";
        var i = 0;
        for(i = 0; i < 9; i++){
          var pip = document.createElement("span");
          pip.className = "myJackpotBoxWoodGame-pip";
          el.appendChild(pip);
        }
      }

      function setDieFace(el, value){
        var map = {
          0:[],
          1:[4],
          2:[0,8],
          3:[0,4,8],
          4:[0,2,6,8],
          5:[0,2,4,6,8],
          6:[0,2,3,5,6,8]
        };
        var pips = el.querySelectorAll(".myJackpotBoxWoodGame-pip");
        var i = 0;
        for(i = 0; i < pips.length; i++){
          pips[i].classList.remove("is-on");
        }
        var onList = map[value] || [];
        for(i = 0; i < onList.length; i++){
          pips[onList[i]].classList.add("is-on");
        }
      }

      function randomDie(){
        return Math.floor(Math.random() * 6) + 1;
      }

      function getValidChoices(d1, d2){
        var arr = [];
        var sum = d1 + d2;

        if(state.downMap[d1] !== true){
          arr.push(d1);
        }

        if(d2 !== d1){
          if(state.downMap[d2] !== true){
            arr.push(d2);
          }
        }

        if(sum <= 9){
          if(state.downMap[sum] !== true){
            if(arr.indexOf(sum) === -1){
              arr.push(sum);
            }
          }
        }

        arr.sort(function(a,b){
          return a - b;
        });

        return arr;
      }

      function updateBoard(){
        var tiles = boardEl.querySelectorAll(".myJackpotBoxWoodGame-tile");
        var i = 0;
        for(i = 0; i < tiles.length; i++){
          var tile = tiles[i];
          var num = Number(tile.getAttribute("data-num"));
          tile.classList.remove("is-down");
          tile.classList.remove("is-choice");

          if(state.downMap[num] === true){
            tile.classList.add("is-down");
          } else {
            if(state.turn === "player"){
              if(state.rolling !== true){
                if(state.validChoices.indexOf(num) !== -1){
                  tile.classList.add("is-choice");
                }
              }
            }
          }
        }
      }

      function updateChoices(){
        choicesEl.innerHTML = "";

        if(state.turn !== "player"){
          return;
        }
        if(state.rolling === true){
          return;
        }
        if(state.validChoices.length === 0){
          return;
        }

        var i = 0;
        for(i = 0; i < state.validChoices.length; i++){
          (function(num){
            var btn = document.createElement("button");
            btn.type = "button";
            btn.className = "myJackpotBoxWoodGame-choice";
            btn.textContent = num + " を倒す";
            btn.addEventListener("click", function(){
              if(state.finished === true){
                return;
              }
              if(state.turn !== "player"){
                return;
              }
              if(state.rolling === true){
                return;
              }
              playerChoose(num);
            });
            choicesEl.appendChild(btn);
          })(state.validChoices[i]);
        }
      }

      function updateTurnUi(){
        if(state.turn === "player"){
          turnTextEl.textContent = "あなたのターン";
          turnDotEl.style.background = "#e6ba86";
          turnDotEl.style.boxShadow = "0 0 0 5px rgba(230,186,134,0.12)";
        } else {
          turnTextEl.textContent = "コンピューターのターン";
          turnDotEl.style.background = "#ccb08b";
          turnDotEl.style.boxShadow = "0 0 0 5px rgba(204,176,139,0.12)";
        }
      }

      function updateProgress(){
        var downCount = state.downOrder.length;
        progressEl.textContent = "倒れた札 " + downCount + " / 9";
      }

      function updateButtons(){
        if(state.finished === true){
          rollBtn.disabled = true;
          return;
        }

        if(state.turn !== "player"){
          rollBtn.disabled = true;
          return;
        }

        if(state.rolling === true){
          rollBtn.disabled = true;
          return;
        }

        if(state.die1 !== null){
          rollBtn.disabled = true;
          return;
        }

        rollBtn.disabled = false;
      }

      function updateAll(){
        updateBoard();
        updateChoices();
        updateTurnUi();
        updateProgress();
        updateButtons();
      }

      function setMessage(text){
        msgEl.innerHTML = text;
      }

      function addLog(text){
        var div = document.createElement("div");
        div.className = "myJackpotBoxWoodGame-logItem";
        div.innerHTML = text;
        logEl.prepend(div);
      }

      function markDown(num, byWhom){
        state.downMap[num] = true;
        state.downOrder.push({
          num:num,
          by:byWhom
        });
      }

      function finishGame(winner){
        state.finished = true;
        state.validChoices = [];
        updateAll();

        if(winner === "player"){
          setMessage("&#x1f389; あなたが最後の1枚を倒しました。<span class='myJackpotBoxWoodGame-strongWin'>JACKPOT！ あなたの勝ちです。</span>");
          addLog("<span class='myJackpotBoxWoodGame-strongWin'>あなたが JACKPOT！</span>");
        } else {
          setMessage("コンピューターが最後の1枚を倒しました。<span class='myJackpotBoxWoodGame-strongLose'>今回は負けです。</span>");
          addLog("<span class='myJackpotBoxWoodGame-strongLose'>コンピューターが JACKPOT。</span>");
        }
      }

      function startRollingAnimation(callback){
        state.rolling = true;
        state.validChoices = [];
        updateAll();

        die1El.classList.add("is-rolling");
        die2El.classList.add("is-rolling");

        var tickCount = 0;
        var timer = setInterval(function(){
          tickCount++;
          setDieFace(die1El, randomDie());
          setDieFace(die2El, randomDie());
          sumEl.textContent = String(randomDie() + randomDie());

          if(tickCount >= 20){
            clearInterval(timer);
            die1El.classList.remove("is-rolling");
            die2El.classList.remove("is-rolling");
            state.rolling = false;
            callback();
          }
        }, 100);
      }

      function playerRoll(){
        if(state.finished === true){
          return;
        }
        if(state.turn !== "player"){
          return;
        }
        if(state.rolling === true){
          return;
        }
        if(state.die1 !== null){
          return;
        }

        setMessage("サイコロを振っています…");

        startRollingAnimation(function(){
          state.die1 = randomDie();
          state.die2 = randomDie();
          setDieFace(die1El, state.die1);
          setDieFace(die2El, state.die2);
          sumEl.textContent = String(state.die1 + state.die2);

          state.validChoices = getValidChoices(state.die1, state.die2);
          addLog("<span class='myJackpotBoxWoodGame-mark myJackpotBoxWoodGame-markPlayer'>あなた</span>" + state.die1 + " と " + state.die2 + " → 候補 [" + state.validChoices.join(", ") + "]");

          if(state.validChoices.length === 0){
            setMessage("あなたは " + state.die1 + " と " + state.die2 + "。倒せる札がありません。コンピューターの番です。");
            addLog("<span class='myJackpotBoxWoodGame-mark myJackpotBoxWoodGame-markPlayer'>あなた</span>倒せる札なし");
            state.die1 = null;
            state.die2 = null;
            state.validChoices = [];
            updateAll();
            setTimeout(function(){
              state.turn = "cpu";
              updateAll();
              cpuTurn();
            }, 900);
            return;
          }

          setMessage("あなたは " + state.die1 + " と " + state.die2 + "。倒す数字を1つ選んでください。");
          updateAll();
        });
      }

      function playerChoose(num){
        markDown(num, "player");
        addLog("<span class='myJackpotBoxWoodGame-mark myJackpotBoxWoodGame-markPlayer'>あなた</span><strong>" + num + "</strong> を倒した");

        state.die1 = null;
        state.die2 = null;
        state.validChoices = [];
        setDieFace(die1El, 0);
        setDieFace(die2El, 0);
        sumEl.textContent = "-";
        updateAll();

        if(state.downOrder.length >= 9){
          finishGame("player");
          return;
        }

        setMessage("あなたは " + num + " を倒しました。コンピューターの番です。");
        state.turn = "cpu";
        updateAll();

        setTimeout(function(){
          cpuTurn();
        }, 900);
      }

      function cpuTurn(){
        if(state.finished === true){
          return;
        }

        setMessage("コンピューターがサイコロを振っています…");
        updateAll();

        startRollingAnimation(function(){
          var d1 = randomDie();
          var d2 = randomDie();
          var valid = [];

          state.die1 = d1;
          state.die2 = d2;

          setDieFace(die1El, d1);
          setDieFace(die2El, d2);
          sumEl.textContent = String(d1 + d2);

          valid = getValidChoices(d1, d2);
          addLog("<span class='myJackpotBoxWoodGame-mark myJackpotBoxWoodGame-markCpu'>CPU</span>" + d1 + " と " + d2 + " → 候補 [" + valid.join(", ") + "]");

          if(valid.length === 0){
            setMessage("コンピューターは " + d1 + " と " + d2 + "。倒せる札がありません。あなたの番です。");
            addLog("<span class='myJackpotBoxWoodGame-mark myJackpotBoxWoodGame-markCpu'>CPU</span>倒せる札なし");

            setTimeout(function(){
              state.turn = "player";
              state.die1 = null;
              state.die2 = null;
              state.validChoices = [];
              setDieFace(die1El, 0);
              setDieFace(die2El, 0);
              sumEl.textContent = "-";
              updateAll();
            }, 900);
            return;
          }

          var chosen = chooseCpuMove(valid);
          markDown(chosen, "cpu");
          addLog("<span class='myJackpotBoxWoodGame-mark myJackpotBoxWoodGame-markCpu'>CPU</span><strong>" + chosen + "</strong> を倒した");

          updateAll();

          if(state.downOrder.length >= 9){
            finishGame("cpu");
            return;
          }

          setMessage("コンピューターは " + chosen + " を倒しました。あなたの番です。");

          setTimeout(function(){
            state.turn = "player";
            state.die1 = null;
            state.die2 = null;
            state.validChoices = [];
            setDieFace(die1El, 0);
            setDieFace(die2El, 0);
            sumEl.textContent = "-";
            updateAll();
          }, 900);
        });
      }

      function chooseCpuMove(valid){
        var i = 0;
        var best = valid[0];
        var bestScore = -999999;

        for(i = 0; i < valid.length; i++){
          var n = valid[i];
          var score = n * 10;

          if(n >= 7){
            score += 14;
          }

          if(n <= 3){
            score -= 4;
          }

          if(state.downOrder.length >= 6){
            score += n * 2;
          }

          if(score > bestScore){
            bestScore = score;
            best = n;
          }
        }

        return best;
      }

      rollBtn.addEventListener("click", function(){
        playerRoll();
      });

      resetBtn.addEventListener("click", function(){
        init();
      });

      init();
    })();
  </script>
</div>


<div class="p-blogParts post_content" data-partsID="55773">
<p><div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（固定 728×180） -->
<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:180px"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="1979737405"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div --></p>
</div>



<h2 class="wp-block-heading">ジャックポットダイスゲームの遊び方（ルール）</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">遊び方</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<p>ジャックポットダイスゲームは、<strong><span class="swl-marker mark_orange">1〜9の木札を使って遊ぶシンプルなダイスゲーム</span></strong>です。見た目はかわいらしいですが、どの数字を倒すかで勝敗が変わる、運とちょっとした判断力の両方が楽しめるゲームです。</p>



<p>このゲームでは、<strong>1つの箱をプレイヤー全員で共有</strong>して使います。木札は最初すべて立てた状態からスタートし、順番にサイコロを振って、出た目に応じた数字の札を倒していきます。そして、<strong><span class="swl-inline-color has-swl-deep-01-color">最後の1枚を倒して「JACKPOT」にした人が勝ち</span></strong>です。</p>



<h3 class="wp-block-heading">基本の準備</h3>



<p>ゲーム開始前に、数字が書かれた<strong>1〜9の木札をすべて立てて</strong>おきます。使うサイコロは<strong>2個</strong>です。</p>



<h3 class="wp-block-heading">基本の流れ</h3>



<p>プレイヤーは順番に、<strong>1ターンにつき1回だけ</strong>サイコロを2個振ります。サイコロを振ったら、出た目を見て倒せる札を1枚選びます。</p>



<p>倒せるのは、次のいずれかです。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list is-style-good_list -list-under-dashed">
<li>サイコロ1個目の数字</li>



<li>サイコロ2個目の数字</li>



<li>2個のサイコロの合計</li>
</ul>
</div></div>



<p>たとえば、<strong>3と5</strong>が出た場合は、<strong>3</strong>、<strong>5</strong>、<strong>8</strong> のいずれか1枚を倒せます。ただし、すでに倒れている数字は選べません。</p>



<h3 class="wp-block-heading">倒せる札がない場合</h3>



<p>出た目に対応する数字がすでに倒れていて、<strong><span class="swl-marker mark_blue">どの数字も倒せない場合はそのままターン終了</span></strong>です。続けて振ることはできず、次のプレイヤーに交代します。</p>



<h3 class="wp-block-heading">勝敗の決まり方</h3>



<p>こうして順番に木札を倒していき、<strong><span class="swl-inline-color has-swl-deep-01-color">最後に残った1枚を倒したプレイヤーが勝ち</span></strong>です。すべての札が倒れた状態、つまり「JACKPOT」を完成させた人が勝者になります。</p>



<h3 class="wp-block-heading">遊ぶときのポイント</h3>



<p>ルール自体はとても簡単ですが、意外と迷うのが「どの数字を倒すか」です。同じ出目でも、単体の数字を倒すか、合計の数字を倒すかで、次の展開が変わってきます。特に後半になるほど倒せる数字が減っていくため、<strong><span class="swl-marker mark_orange">大きい数字を先に処理するか、小さい数字を残すか</span></strong>でゲームの面白さが出てきます。</p>



<p>家族や友人と気軽に遊べるうえに、運だけでは終わらないのが、このジャックポットダイスゲームの魅力です。</p>



<h2 class="wp-block-heading">ジャックポットダイスゲームの必勝法</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">必勝法</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<p>このゲームはサイコロ運が大きく、絶対的な必勝法はありません。ただし、<strong><span class="swl-inline-color has-swl-deep-01-color">数字ごとに「出やすさ（倒しやすさ）」が違う</span></strong>ため、残り札の選び方で勝率は変わります。</p>



<p>基本は、<strong>終盤に詰みやすい数字を先に処理すること</strong>。逆に、出やすい数字はあえて残す判断も有効です。「今どれを倒すか」で最後の1枚が決まるゲームです。</p>



<p><a href="https://dondonbangkok.com/jackpot-game-bangkok/">詳しい作戦（勝つ確率を上げる方法）はこちらです。</a></p>



<div id="myLinkBox" class="myLinkBox-container">
  <div class="myLinkBox-header">
    <span class="myLinkBox-tag">おすすめ</span>
    <div class="myLinkBox-title">ジャックポットダイスゲーム攻略法</div>
  </div>

  <p class="myLinkBox-text">
ジャックポットダイスゲームはサイコロゲームですから運の要素が大きいですが、どの数字を選ぶかで勝てる確率が変わってきます。
  </p>

  <div class="myLinkBox-copy">
    ＼読めば勝率が上がる！／
  </div>

  <div class="myLinkBox-btn-wrap">
    <a class="my-common-apealbar myLinkBox-btn" href="https://dondonbangkok.com/jackpot-game-bangkok/">
      【初心者OK】バンコク ジャックポット攻略｜ルール・勝ち方・注意点はこちら
      <img decoding="async" src="https://boonboonblog.com/wp-content/uploads/common_buttonicon01.png" alt="" class="myLinkBox-icon">
    </a>
  </div>

  <div class="myLinkBox-footer">
    <p>強い方がモテるよ！</p>
  </div>
</div>



<div class="p-blogParts post_content" data-partsID="56213">
<h2 class="wp-block-heading">実際に遊べるシンプルゲーム一覧</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">ゲーム一覧</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-55881.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022055993-1024x576.jpg" alt="重力付き４目並べ" class="wp-image-55991" srcset="https://boonboonblog.com/wp-content/uploads/2022055993-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022055993-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022055993-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022055993.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べる重力付き4目並べゲーム・プレイ版（強いです！）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-55881.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56141.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022058697-1024x576.jpg" alt="ブロック崩しゲーム" class="wp-image-56212" srcset="https://boonboonblog.com/wp-content/uploads/2022058697-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022058697-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022058697-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022058697.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるブロック崩しゲーム（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56141.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56222.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022058698-1024x576.jpg" alt="インベーダーもどき" class="wp-image-56244" srcset="https://boonboonblog.com/wp-content/uploads/2022058698-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022058698-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022058698-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022058698.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるインベーダーもどきゲーム（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56222.html">ゲームはこちら</a></p>
</div>
</div>



<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56365.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022060372-1024x576.jpg" alt="" class="wp-image-56378" srcset="https://boonboonblog.com/wp-content/uploads/2022060372-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022060372-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022060372-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022060372.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるブラックジャックゲームと攻略法の解説です。（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56365.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56451.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg" alt="" class="wp-image-56479" srcset="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022060576-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022060576-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022060576.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べる JackPot Dice ゲームです。（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56451.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">

</div>
</div>




</div>


<div class="p-blogParts post_content" data-partsID="53518">
<p class="has-text-align-center has-border -border01 has-swl-pale-03-background-color has-background"><strong>40代・50代「会社員におすすめ」の在宅でできる副業５選</strong></p>



<p class="has-text-align-center"><strong><a href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/">40代・50代「会社員におすすめ」の在宅でできる副業５選はこちら</a></strong></p>



<figure class="wp-block-image size-full is-resized my-common-apealbar"><a href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/"><img decoding="async" width="550" height="190" src="https://boonboonblog.com/wp-content/uploads/common_click01-1.png" alt="おすすめ" class="wp-image-56308" style="aspect-ratio:2.8952725627686045;width:200px;height:auto" srcset="https://boonboonblog.com/wp-content/uploads/common_click01-1.png 550w, https://boonboonblog.com/wp-content/uploads/common_click01-1-300x104.png 300w" sizes="(max-width: 550px) 100vw, 550px" /></a></figure>


<div class="swell-block-postLink">			<div class="p-blogCard -external" data-type="type3" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">ドンドン！副業情報局</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://irojiroharaguro.com/wp-content/uploads/2022026680.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/" target="_blank" rel="noopener ">40代・50代「会社員におすすめ」の在宅でできる副業５選（初心者でもできる） | ドンドン！副業情報局</a>
						<span class="p-blogCard__excerpt">４０代・５０代の会社員、今の給料で満足して生活できていますか？さらに、老後に不安なく貯金できていますか？４０代、５０代だからこそ気が付く、不安に思う将来設計、し...</span>					</div>
				</div>
			</div>
		</div>


<p class="has-text-align-center has-border -border01 has-swl-pale-03-background-color has-background"><strong>20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選</strong></p>



<p class="has-text-align-center"><strong><a href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/">20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選はこちら</a></strong></p>



<figure class="wp-block-image size-full is-resized my-common-apealbar"><a href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/"><img decoding="async" width="550" height="190" src="https://boonboonblog.com/wp-content/uploads/common_click01-1.png" alt="おすすめ" class="wp-image-56308" style="aspect-ratio:2.8952725627686045;width:200px;height:auto" srcset="https://boonboonblog.com/wp-content/uploads/common_click01-1.png 550w, https://boonboonblog.com/wp-content/uploads/common_click01-1-300x104.png 300w" sizes="(max-width: 550px) 100vw, 550px" /></a></figure>


<div class="swell-block-postLink">			<div class="p-blogCard -external" data-type="type3" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">ドンドン！副業情報局</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://irojiroharaguro.com/wp-content/uploads/2022026650.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/" target="_blank" rel="noopener ">20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選（初心者でもできる） | ドンドン！副業情...</a>
						<span class="p-blogCard__excerpt">２０代、３０代の主婦にとって、これからの人生設計、お金は心配ごとの一つです。２０代、３０代の主婦が不安に思うお金の問題を少しでも解決するべく、初期投資が無い（ま...</span>					</div>
				</div>
			</div>
		</div>


<div style="height:24px" aria-hidden="true" class="wp-block-spacer"></div>
</div>



<div class="p-blogParts post_content" data-partsID="53487">
<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-10517.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_fukugyou1.gif" alt="この副業" class="wp-image-43432"/></a></figure>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-39965.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_school1.gif" alt="アフィリエイトスクール" class="wp-image-43429"/></a></figure>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-19279.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_notepc1.gif" alt="ノートパソコン" class="wp-image-43430"/></a></figure>
</div>
</div>
</div>



<div class="p-blogParts post_content" data-partsID="53488">
<p class="has-text-align-center has-large-font-size">ブログの作り方などについてココナラにて「支援作業」を販売しております。</p>



<p class="has-text-align-center">よかったらご利用くださいませ。</p>



<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://coconala.com/services/2968130"    ><img decoding="async" width="600" height="600" src="https://boonboonblog.com/wp-content/uploads/common_coconara_blogqa.jpg" alt="ブログ運営（質問・相談お受けします）" class="wp-image-48806" srcset="https://boonboonblog.com/wp-content/uploads/common_coconara_blogqa.jpg 600w, https://boonboonblog.com/wp-content/uploads/common_coconara_blogqa-300x300.jpg 300w, https://boonboonblog.com/wp-content/uploads/common_coconara_blogqa-150x150.jpg 150w, https://boonboonblog.com/wp-content/uploads/common_coconara_blogqa-100x100.jpg 100w" sizes="(max-width: 600px) 100vw, 600px" /></a></figure>



<div class="swell-block-button green_ -size-custom is-style-btn_shiny"><a href="https://coconala.com/services/2968130" class="swell-block-button__link"><span>詳しくはこちら</span></a></div>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://coconala.com/services/2967525"    ><img decoding="async" width="600" height="600" src="https://boonboonblog.com/wp-content/uploads/common_coconara_swellstart.jpg" alt="SWELL（ブログ開設します）" class="wp-image-48807" srcset="https://boonboonblog.com/wp-content/uploads/common_coconara_swellstart.jpg 600w, https://boonboonblog.com/wp-content/uploads/common_coconara_swellstart-300x300.jpg 300w, https://boonboonblog.com/wp-content/uploads/common_coconara_swellstart-150x150.jpg 150w, https://boonboonblog.com/wp-content/uploads/common_coconara_swellstart-100x100.jpg 100w" sizes="(max-width: 600px) 100vw, 600px" /></a></figure>



<div class="swell-block-button green_ -size-custom is-style-btn_shiny"><a href="https://coconala.com/services/2967525" class="swell-block-button__link"><span>詳しくはこちら</span></a></div>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://coconala.com/services/2943246"    ><img decoding="async" width="600" height="600" src="https://boonboonblog.com/wp-content/uploads/common_coconara_affingerstart.jpg" alt="AFFINGER（ブログ開設します）" class="wp-image-48808" srcset="https://boonboonblog.com/wp-content/uploads/common_coconara_affingerstart.jpg 600w, https://boonboonblog.com/wp-content/uploads/common_coconara_affingerstart-300x300.jpg 300w, https://boonboonblog.com/wp-content/uploads/common_coconara_affingerstart-150x150.jpg 150w, https://boonboonblog.com/wp-content/uploads/common_coconara_affingerstart-100x100.jpg 100w" sizes="(max-width: 600px) 100vw, 600px" /></a></figure>



<div class="swell-block-button green_ -size-custom is-style-btn_shiny"><a href="https://coconala.com/services/2943246" class="swell-block-button__link"><span>詳しくはこちら</span></a></div>
</div>
</div>



<div style="height:48px" aria-hidden="true" class="wp-block-spacer"></div>
</div>



<div class="p-blogParts post_content" data-partsID="53489"><div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><a href="http://boonboonblog.com/topics/web-it/wordpress"><img decoding="async" width="720" height="485" src="http://boonboonblog.com/wp-content/uploads/2022021963.png" alt="もっと WordPress のノウハウを知りたいときは" class="wp-image-36376" style="width:540px;height:364px" srcset="https://boonboonblog.com/wp-content/uploads/2022021963.png 720w, https://boonboonblog.com/wp-content/uploads/2022021963-300x202.png 300w" sizes="(max-width: 720px) 100vw, 720px" /></a></figure>
</div>


<div class="wp-block-group myAdjustGroupWidth"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="swell-block-button green_ -size-custom my-common-apealbar is-style-btn_shiny u-mb-ctrl u-mb-0" style="--the-fz:26px"><a href="http://boonboonblog.com/topics/web-it/wordpress" class="swell-block-button__link"><span>WordPress の情報、テクニック一覧はこちらをクリック！</span></a></div>
</div></div>



<div class="wp-block-group is-st-justify is-st-justify-center"><div class="wp-block-group__inner-container"><div class="wp-block-image animated backInLeft">
<figure class="aligncenter size-full is-resized"><a href="http://boonboonblog.com/topics/web-it/wordpress"><img decoding="async" width="240" height="169" src="http://boonboonblog.com/wp-content/uploads/common_click02.png" alt="クリックアイコン" class="wp-image-35546" style="width:180px;height:127px"/></a></figure>
</div></div></div>
</div>



<div class="p-blogParts post_content" data-partsID="53459">
<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-columns">
<div class="wp-block-column" style="flex-basis:33.33%">
<figure class="wp-block-image size-full"><img decoding="async" width="800" height="800" src="https://boonboonblog.com/wp-content/uploads/2022055626.png" alt="どんどん情報局" class="wp-image-55650" srcset="https://boonboonblog.com/wp-content/uploads/2022055626.png 800w, https://boonboonblog.com/wp-content/uploads/2022055626-300x300.png 300w, https://boonboonblog.com/wp-content/uploads/2022055626-150x150.png 150w, https://boonboonblog.com/wp-content/uploads/2022055626-768x768.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</div>



<div class="wp-block-column" style="flex-basis:66.66%">
<p class="has-border -border01"><strong>本サイトは「どんどん情報局」が運営しています。</strong></p>



<p><strong>著作者：Boon ☆</strong></p>



<p>どんどん情報局はメディア記事の執筆を通して世の中に有益な情報を発信することを心がけています。</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/about-us">「どんどん情報局」の紹介はこちら</a></p>
</div>
</div>
</div></div>


<p><div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（レスポンシブ） -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="9677856269"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div --></p>
</div>



<div class="p-blogParts post_content" data-partsID="53460"></div>



<div class="p-blogParts post_content" data-partsID="53458">
<div style="text-align:center">

</div>
</div>



<div class="p-blogParts post_content" data-partsID="53456">
<div class="wp-block-group is-row is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-94bc23d7 wp-block-group-is-layout-flex">
<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>広告の設置・収入について</span></div><div class="cap_box_content">
<p>当サイトは Amazonのアソシエイトとして、適格販売により収入を得ています。</p>



<p>当サイトは Google アドセンスを利用し、広告により収入を得ています。</p>



<p>当サイトは ASP が提供するサービスを利用し、広告、適格販売により収入を得ています。</p>
</div></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>



<script>
var varHtagElements = null;
var varHtagPosition = null;
var varSideBarItem = null;

window.addEventListener('load', function () {
    setTimeout(function(){fnAfterContents();}, 10);
});

function fnAfterContents() {
    // H2、H3 を全て取得する（位置を計算する）
    varHtagElements = document.querySelectorAll('h2, h3');
    var varHtagArray = Array.from(varHtagElements);
    var varHtagPosition = varHtagArray.map(item => item.getBoundingClientRect().top);
    var varHtagPositionWithScroll = varHtagPosition.map(top => Math.floor(top + window.scrollY));
	
    // サイドバーの目次のリストを取得する
    varSideBarItem = document.querySelectorAll('#sidebar .p-toc__link');
  
    if (varSideBarItem == null || varSideBarItem.length == 0) {
        // 目次が無ければ終了
        return;
    }

    // 個数を取得
    const countHtag = varHtagElements.length;
    const countSideBarItem = varSideBarItem.length;
    const iMaxLoop = countHtag > countSideBarItem ? countSideBarItem : countHtag;

    window.addEventListener('scroll', () => {
        // 計算する位置
        const currentPosition = window.scrollY + 300;

        for (let iCount = 0; iCount < iMaxLoop; iCount++) {
            // 現在位置の表示を消す
            varSideBarItem[iCount].classList.remove('currentTocPosition');
            if (iCount >= iMaxLoop - 1 ) {
                // 要素の最後は、次の要素が無いので範囲外のみ判定
                if (currentPosition >= varHtagPositionWithScroll[iCount]) {
                    varSideBarItem[iCount].classList.add('currentTocPosition');
                }
            } else {
                // 要素の途中は、範囲内かどうかを判定
                if (currentPosition >= varHtagPositionWithScroll[iCount] && currentPosition < varHtagPositionWithScroll[iCount + 1]) {
                    varSideBarItem[iCount].classList.add('currentTocPosition');
                } 
            }
        }
    });
}
</script>



<p class="has-text-align-center"><a href="https://boonboonblog.com/privacypolicy#denkitsushin">電気通信事業法改正に伴う表記</a></p>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【無料・攻略法】ブラックジャックを実際に遊べる＋ベーシックストラテジー攻略法解説</title>
		<link>https://boonboonblog.com/entries/entry-56365.html</link>
		
		<dc:creator><![CDATA[Boon ☆《ブログ魂》]]></dc:creator>
		<pubDate>Sat, 21 Mar 2026 16:40:54 +0000</pubDate>
				<category><![CDATA[情報・遊び・ツールなど]]></category>
		<guid isPermaLink="false">https://boonboonblog.com/?p=56365</guid>

					<description><![CDATA[<p><img src="https://boonboonblog.com/wp-content/uploads/2022055844-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>友達同士などで気軽に楽しめるトランプゲームの中でも代表的なゲームに「ブラックジャック」があります。ブラックジャックは親と子で勝負するために、出ている数字によってヒットとステイの使い分けが重要になってきます。楽しくゲームするためにも、ブラックジャックの攻略法「ベーシックストラテジー」を用いた行動パターンのシュミレーションです。遊びにご活用ください。]]></description>
										<content:encoded><![CDATA[<p><img src="https://boonboonblog.com/wp-content/uploads/2022055844-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<div class="p-blogParts post_content" data-partsID="53455">
<p>広告：ページ内にてアフィリエイト広告を利用しています。</p>
</div>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022055844-1024x576.jpg" alt="" class="wp-image-56369" srcset="https://boonboonblog.com/wp-content/uploads/2022055844-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022055844-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022055844-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022055844.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div class="p-blogParts post_content" data-partsID="53457"></div>



<p>ブラックジャックは、プレイヤーの選択次第で<strong><span class="swl-inline-color has-swl-deep-01-color">還元率を理論上100%近くまで引き上げられる数少ないゲーム</span></strong>です。</p>



<p class="has-border -border01 has-swl-pale-01-background-color has-background">勝利のカギを握るのは、自分の手札とディーラーのアップカードから導き出される統計的な最適解<strong>「ベーシックストラテジー」</strong>の徹底にあります。</p>



<p><strong><span class="swl-fz u-fz-l">本ページでは、<span class="swl-inline-color has-swl-deep-01-color">実際にブラックジャックゲームが遊べます</span>。ベーシックストラテジーに基づく「理論上の正解」を参考情報をして表示することができるシュミレーション付きです。</span></strong></p>



<h2 class="wp-block-heading">実際のゲームとベーシックストラテジーのシュミレーション</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">やってみよう！</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<p>実際のブラックジャックゲーム（ 52枚のカード×8組を 1シューとしてシャッフルし、残りが少なくなったらシャッフルし直しています）と、ディーラーの手役と、プレイヤーの手役を押すことで、「ベーシックストラテジー」理論に基づいて<strong><span class="swl-inline-color has-swl-deep-01-color">最も適切な選択肢を示すプログラム</span></strong>を実装しました。試してみてください。</p>



<p class="has-border -border01">攻略表示ONにすると「ベーシックストラテジー」理論によるおすすめアクション（1手目のみ）を表示します。</p>



<h3 class="wp-block-heading">ブラックジャックゲーム（実際に遊べる）</h3>



<div class="myBJWrap" id="myBJApp">
  <div class="myBJTopBar">
    <div class="myBJTopInfo">
      <div class="myBJTopItem">
        <span class="myBJTopLabel">所持チップ</span>
        <span class="myBJTopValue" id="myBJChips">100</span>
      </div>
      <div class="myBJTopItem">
        <span class="myBJTopLabel">ベット</span>
        <span class="myBJTopValue" id="myBJBet">5</span>
      </div>
      <div class="myBJTopItem myBJTopItemWide">
        <span class="myBJTopLabel">状態</span>
        <span class="myBJTopValue myBJTopMessage" id="myBJMessage">「ディール開始」でゲーム開始</span>
      </div>
    </div>
  </div>

  <div class="myBJTable">
    <div class="myBJDealerArea">
      <div class="myBJSectionHead">
        <span>ディーラー</span>
        <span class="myBJPoint" id="myBJDealerPoints">?</span>
      </div>
      <div class="myBJCards" id="myBJDealerCards"></div>
    </div>

    <div class="myBJPlayerArea">
      <div class="myBJSectionHead">
        <span>プレイヤー</span>
        <span class="myBJPoint" id="myBJPlayerInfo">手札を配ってください</span>
      </div>
      <div class="myBJHandsWrap" id="myBJHandsWrap"></div>
      <div class="myBJStrategyBox" id="myBJStrategyBox" style="display:none;">
        <div class="myBJStrategyTopRow">
          <div class="myBJStrategyMain">
            <div class="myBJStrategyHead">ベーシックストラテジー参考</div>
            <div class="myBJStrategyText" id="myBJStrategyText">―</div>
          </div>
          <button class="myBJExplainBtn" id="myBJExplainBtn" type="button">解説</button>
        </div>
      </div>
    </div>
  </div>

  <div class="myBJControls">
    <button class="myBJBtn myBJBtnPrimary" id="myBJDealBtn">ディール開始</button>
    <button class="myBJBtn" id="myBJHitBtn">ヒット</button>
    <button class="myBJBtn" id="myBJStandBtn">スタンド</button>
    <button class="myBJBtn" id="myBJSplitBtn">スプリット</button>
    <button class="myBJBtn" id="myBJDoubleBtn">ダブルダウン</button>
    <button class="myBJBtn" id="myBJStrategyToggleBtn">攻略表示：OFF</button>
  </div>

  <div class="myBJLogCard">
    <div class="myBJLogHead">ログ</div>
    <div class="myBJLog" id="myBJLog"></div>
  </div>
</div>

<style>
.myBJWrap {
  max-width: 1100px;
  margin: 24px auto;
  padding: 24px;
  border-radius: 26px;
  background:
    radial-gradient(circle at top left, rgba(255,255,255,0.10), transparent 28%),
    radial-gradient(circle at top right, rgba(255,215,120,0.14), transparent 22%),
    linear-gradient(135deg, #0e3b2f, #07291f);
  color: #f7fbf9;
  box-shadow: 0 20px 50px rgba(0,0,0,0.24);
  font-family: "Hiragino Sans", "Yu Gothic", "Meiryo", sans-serif;
  overflow: hidden;
  position: relative;
}

.myBJWrap * {
  box-sizing: border-box;
}

.myBJTopBar {
  margin-bottom: 20px;
}

.myBJTopInfo {
  display: grid;
  grid-template-columns: 1fr 1fr 2fr;
  gap: 14px;
}

.myBJTopItem {
  padding: 16px 18px;
  border-radius: 18px;
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.10);
  backdrop-filter: blur(8px);
  min-height: 90px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}

.myBJTopItemWide {
  min-width: 0;
}

.myBJTopLabel {
  font-size: 14px;
  color: rgba(255,255,255,0.76);
}

.myBJTopValue {
  font-size: 38px;
  font-weight: 800;
  line-height: 1.1;
}

.myBJTopMessage {
  font-size: 24px;
  line-height: 1.45;
  word-break: break-word;
}

.myBJTable {
  padding: 22px;
  margin-bottom: 20px;
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.12);
  border-radius: 24px;
  backdrop-filter: blur(8px);
}

.myBJDealerArea {
  margin-bottom: 24px;
  padding-bottom: 22px;
  border-bottom: 1px solid rgba(255,255,255,0.12);
}

.myBJSectionHead {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  margin-bottom: 14px;
  font-size: 20px;
  font-weight: 700;
}

.myBJPoint {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 68px;
  padding: 10px 16px;
  border-radius: 999px;
  background: rgba(255,255,255,0.11);
  font-size: 16px;
  font-weight: 700;
}

.myBJCards {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  min-height: 118px;
}

.myBJHandsWrap {
  display: grid;
  gap: 18px;
}

.myBJStrategyBox {
  margin-top: 16px;
  padding: 14px 16px;
  border-radius: 16px;
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.12);
}

.myBJStrategyHead {
  font-size: 14px;
  color: rgba(255,255,255,0.74);
  margin-bottom: 6px;
}

.myBJStrategyText {
  font-size: 20px;
  font-weight: 800;
  line-height: 1.4;
}

.myBJStrategyOn {
  background: linear-gradient(135deg, #7be0a8, #42c883);
  color: #143024;
}

.myBJHandBox {
  padding: 16px;
  border-radius: 20px;
  background: rgba(255,255,255,0.06);
  border: 2px solid transparent;
}

.myBJHandActive {
  border-color: #ffd36a;
  box-shadow: 0 0 0 4px rgba(255,211,106,0.10);
}

.myBJHandTitle {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  margin-bottom: 12px;
  font-weight: 700;
  flex-wrap: wrap;
}

.myBJHandMeta {
  font-size: 14px;
  color: rgba(255,255,255,0.86);
}

.myBJCard {
  width: 78px;
  height: 108px;
  border-radius: 16px;
  background: linear-gradient(180deg, #ffffff, #f3f4f7);
  color: #1a2430;
  padding: 8px;
  display: grid;
  grid-template-rows: 20px 1fr 20px;
  box-shadow: 0 8px 18px rgba(0,0,0,0.18);
  position: relative;
  overflow: hidden;
  transform-origin: center center;
}

.myBJCard.myBJRed {
  color: #cf364b;
}

.myBJCardCorner {
  font-size: 16px;
  font-weight: 700;
  line-height: 0.9;
  align-self: start;
}

.myBJCardSuit {
  font-size: 28px;
  line-height: 1;
  align-self: center;
  justify-self: center;
}

.myBJCardCornerBottom {
  font-size: 16px;
  font-weight: 700;
  line-height: 0.9;
  justify-self: end;
  align-self: end;
  transform: rotate(180deg);
}

.myBJCardBack {
  background: linear-gradient(135deg, #17395e, #204c7b);
  color: transparent;
}

.myBJCardBack::before {
  content: "";
  position: absolute;
  inset: 8px;
  border-radius: 12px;
  border: 2px solid rgba(255,255,255,0.25);
}

.myBJControls {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-bottom: 20px;
}

.myBJBtn {
  appearance: none;
  border: 0;
  border-radius: 16px;
  padding: 14px 20px;
  font-size: 15px;
  font-weight: 700;
  color: #f7fbf9;
  background: rgba(255,255,255,0.1);
  cursor: pointer;
  transition: 0.18s ease;
  box-shadow: 0 8px 18px rgba(0,0,0,0.12);
}

.myBJBtn:hover {
  transform: translateY(-1px);
  background: rgba(255,255,255,0.16);
}

.myBJBtn:disabled {
  opacity: 0.45;
  cursor: not-allowed;
  transform: none;
}

.myBJBtnPrimary {
  background: linear-gradient(135deg, #ffd870, #ffbf3f);
  color: #183127;
}

.myBJLogCard {
  padding: 18px;
  background: rgba(255,255,255,0.08);
  border: 1px solid rgba(255,255,255,0.12);
  border-radius: 22px;
}

.myBJLogHead {
  font-size: 18px;
  font-weight: 700;
  margin-bottom: 10px;
}

.myBJLog {
  max-height: 220px;
  overflow: auto;
  display: grid;
  gap: 8px;
  font-size: 14px;
  color: rgba(255,255,255,0.9);
}

.myBJLogItem {
  padding: 10px 12px;
  border-radius: 12px;
  background: rgba(255,255,255,0.06);
  line-height: 1.5;
}

.myBJResultWin {
  color: #9ff0c6;
}

.myBJResultLose {
  color: #ff9d9d;
}

.myBJResultPush {
  color: #ffe39a;
}

.myBJCard.myBJDealAnim {
  animation: myBJDealPop 0.45s ease;
}

.myBJCard.myBJDealerDrawAnim {
  animation: myBJDealerDraw 0.45s ease;
}

@keyframes myBJDealPop {
  0% {
    opacity: 0;
    transform: translateY(-24px) scale(0.88) rotate(-6deg);
  }
  60% {
    opacity: 1;
    transform: translateY(4px) scale(1.03) rotate(1deg);
  }
  100% {
    opacity: 1;
    transform: translateY(0) scale(1) rotate(0deg);
  }
}

@keyframes myBJDealerDraw {
  0% {
    opacity: 0;
    transform: translateX(-28px) translateY(-8px) scale(0.9);
  }
  100% {
    opacity: 1;
    transform: translateX(0) translateY(0) scale(1);
  }
}

.myBJFxLayer {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
  z-index: 30;
}

.myBJFxMessage {
  position: absolute;
  left: 50%;
  top: 42%;
  transform: translate(-50%, -50%) scale(0.8);
  min-width: 220px;
  max-width: calc(100% - 40px);
  padding: 18px 28px;
  border-radius: 20px;
  text-align: center;
  font-size: 32px;
  font-weight: 800;
  letter-spacing: 0.04em;
  color: #fff;
  opacity: 0;
  box-shadow: 0 20px 45px rgba(0,0,0,0.28);
  backdrop-filter: blur(8px);
}

.myBJFxMessage.myBJFxWin {
  background: linear-gradient(135deg, rgba(44,178,110,0.96), rgba(79,212,144,0.96));
  border: 2px solid rgba(255,255,255,0.18);
  animation: myBJFxMessageShow 1.2s ease forwards;
}

.myBJFxMessage.myBJFxLose {
  background: linear-gradient(135deg, rgba(179,56,56,0.96), rgba(228,92,92,0.96));
  border: 2px solid rgba(255,255,255,0.18);
  animation: myBJFxMessageShow 1.2s ease forwards;
}

.myBJFxMessage.myBJFxPush {
  background: linear-gradient(135deg, rgba(180,140,48,0.95), rgba(233,192,77,0.95));
  border: 2px solid rgba(255,255,255,0.18);
  animation: myBJFxMessageShow 1.2s ease forwards;
}

@keyframes myBJFxMessageShow {
  0% {
    opacity: 0;
    transform: translate(-50%, -50%) scale(0.72);
  }
  18% {
    opacity: 1;
    transform: translate(-50%, -50%) scale(1.06);
  }
  32% {
    opacity: 1;
    transform: translate(-50%, -50%) scale(1);
  }
  75% {
    opacity: 1;
    transform: translate(-50%, -50%) scale(1);
  }
  100% {
    opacity: 0;
    transform: translate(-50%, -50%) scale(0.94);
  }
}

.myBJFxBurst {
  position: absolute;
  width: 14px;
  height: 14px;
  border-radius: 999px;
  opacity: 0.95;
}

.myBJFxBurst.myBJFxBurstWin {
  background: radial-gradient(circle, #fff6b3 0%, #a4ffd0 42%, #35d07f 100%);
  animation: myBJFxBurstAnim 0.95s ease-out forwards;
}

.myBJFxBurst.myBJFxBurstLose {
  background: radial-gradient(circle, #ffd0d0 0%, #ff8a8a 45%, #d94747 100%);
  animation: myBJFxBurstAnim 0.95s ease-out forwards;
}

.myBJFxBurst.myBJFxBurstPush {
  background: radial-gradient(circle, #fff3c9 0%, #ffd468 45%, #d9a832 100%);
  animation: myBJFxBurstAnim 0.95s ease-out forwards;
}

@keyframes myBJFxBurstAnim {
  0% {
    opacity: 0;
    transform: translate(0, 0) scale(0.3);
  }
  15% {
    opacity: 1;
    transform: translate(var(--myBJx), var(--myBJy)) scale(1);
  }
  100% {
    opacity: 0;
    transform: translate(var(--myBJx), var(--myBJy)) scale(0.55);
  }
}


.myBJStrategyTopRow {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}

.myBJStrategyMain {
  min-width: 0;
  flex: 1;
}

.myBJExplainBtn {
  appearance: none;
  border: 1px solid rgba(255,255,255,0.16);
  border-radius: 14px;
  padding: 14px 20px;
  min-width: 120px;
  font-size: 16px;
  font-weight: 800;
  color: #eef8f2;
  background: linear-gradient(135deg, rgba(62, 116, 95, 0.96), rgba(32, 78, 61, 0.96));
  box-shadow: 0 8px 18px rgba(0,0,0,0.14);
  cursor: pointer;
  transition: 0.18s ease;
}

.myBJExplainBtn:hover {
  transform: translateY(-1px);
  background: linear-gradient(135deg, rgba(78, 136, 112, 0.98), rgba(38, 90, 70, 0.98));
}

.myBJExplainBtn:disabled {
  opacity: 0.45;
  cursor: not-allowed;
  transform: none;
}

.myBJExplainOverlay {
  position: absolute;
  inset: 0;
  z-index: 45;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(4, 18, 14, 0.62);
  backdrop-filter: blur(6px);
}

.myBJExplainOverlay.myBJExplainOverlayShow {
  display: flex;
}

.myBJExplainCard {
  width: min(720px, 100%);
  max-height: min(78vh, 760px);
  overflow: auto;
  background: radial-gradient(circle at top left, rgba(255,255,255,0.10), transparent 30%), linear-gradient(135deg, rgba(18, 74, 58, 0.98), rgba(8, 42, 31, 0.98));
  border: 1px solid rgba(255,255,255,0.16);
  border-radius: 24px;
  padding: 26px 24px 22px;
  color: #f7fbf9;
  box-shadow: 0 22px 48px rgba(0,0,0,0.30);
}

.myBJExplainTitle {
  font-size: 30px;
  font-weight: 800;
  margin-bottom: 10px;
}

.myBJExplainAction {
  display: inline-block;
  margin-bottom: 16px;
  padding: 8px 14px;
  border-radius: 999px;
  background: rgba(255,255,255,0.10);
  font-size: 15px;
  font-weight: 700;
}

.myBJExplainBody {
  font-size: 18px;
  line-height: 1.9;
  color: rgba(255,255,255,0.94);
  white-space: pre-wrap;
}

.myBJExplainButtons {
  margin-top: 20px;
  display: flex;
  justify-content: center;
}

.myBJExplainCloseBtn {
  appearance: none;
  border: 0;
  border-radius: 16px;
  padding: 14px 24px;
  font-size: 16px;
  font-weight: 800;
  color: #183127;
  background: linear-gradient(135deg, #ffd870, #ffbf3f);
  cursor: pointer;
  box-shadow: 0 8px 18px rgba(0,0,0,0.16);
}

.myBJOverlay {
  position: absolute;
  inset: 0;
  z-index: 40;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(4, 18, 14, 0.62);
  backdrop-filter: blur(6px);
}

.myBJOverlay.myBJOverlayShow {
  display: flex;
}

.myBJOverlayCard {
  width: min(520px, 100%);
  background: linear-gradient(180deg, rgba(255,255,255,0.14), rgba(255,255,255,0.08));
  border: 1px solid rgba(255,255,255,0.16);
  border-radius: 24px;
  padding: 28px 24px;
  text-align: center;
  box-shadow: 0 18px 40px rgba(0,0,0,0.25);
}

.myBJOverlayTitle {
  font-size: 32px;
  font-weight: 800;
  margin-bottom: 12px;
}

.myBJOverlayText {
  font-size: 18px;
  line-height: 1.6;
  color: rgba(255,255,255,0.92);
  margin-bottom: 18px;
}

.myBJRestartBtn {
  appearance: none;
  border: 0;
  border-radius: 16px;
  padding: 14px 24px;
  font-size: 16px;
  font-weight: 800;
  color: #183127;
  background: linear-gradient(135deg, #ffd870, #ffbf3f);
  cursor: pointer;
  box-shadow: 0 8px 18px rgba(0,0,0,0.16);
}

@media (max-width: 860px) {
  .myBJTopInfo {
    grid-template-columns: 1fr;
  }

  .myBJTopValue {
    font-size: 30px;
  }

  .myBJTopMessage {
    font-size: 20px;
  }
}

@media (max-width: 520px) {
  .myBJWrap {
    padding: 16px;
    border-radius: 18px;
  }

  .myBJTable {
    padding: 16px;
  }

  .myBJCard {
    width: 58px;
    height: 84px;
    padding: 6px;
    grid-template-rows: 16px 1fr 16px;
  }

  .myBJCardCorner,
  .myBJCardCornerBottom {
    font-size: 13px;
    line-height: 0.9;
  }

  .myBJCardSuit {
    font-size: 20px;
  }

  .myBJBtn {
    width: calc(50% - 6px);
    text-align: center;
    padding: 13px 10px;
  }

  .myBJBtnPrimary {
    width: 100%;
  }

  .myBJFxMessage {
    font-size: 24px;
    min-width: 180px;
    padding: 14px 20px;
    top: 39%;
  }

  .myBJOverlayTitle {
    font-size: 26px;
  }

  .myBJOverlayText {
    font-size: 16px;
  }
}

@media screen and (max-width: 768px) {
  .myBJControls {
    display: flex;
    flex-wrap: nowrap;
    gap: 6px;
  }

  .myBJControls .myBJBtn {
    flex: 1;
    padding: 10px 0;
    font-size: 12px;
  }
}

@media screen and (max-width: 768px) {
  .myBJControls .myBJBtn {
    border-radius: 12px;
    font-weight: bold;
  }
}
</style>

<script>
(function () {
  const myBJApp = document.getElementById("myBJApp");
  if (!myBJApp) return;

  const myBJDealBtn = document.getElementById("myBJDealBtn");
  const myBJHitBtn = document.getElementById("myBJHitBtn");
  const myBJStandBtn = document.getElementById("myBJStandBtn");
  const myBJSplitBtn = document.getElementById("myBJSplitBtn");
  const myBJDoubleBtn = document.getElementById("myBJDoubleBtn");
  const myBJStrategyToggleBtn = document.getElementById("myBJStrategyToggleBtn");

  const myBJDealerCards = document.getElementById("myBJDealerCards");
  const myBJHandsWrap = document.getElementById("myBJHandsWrap");
  const myBJChips = document.getElementById("myBJChips");
  const myBJBet = document.getElementById("myBJBet");
  const myBJMessage = document.getElementById("myBJMessage");
  const myBJDealerPoints = document.getElementById("myBJDealerPoints");
  const myBJPlayerInfo = document.getElementById("myBJPlayerInfo");
  const myBJLog = document.getElementById("myBJLog");
  const myBJStrategyBox = document.getElementById("myBJStrategyBox");
  const myBJStrategyText = document.getElementById("myBJStrategyText");
  const myBJExplainBtn = document.getElementById("myBJExplainBtn");

  let myBJFxLayer = myBJApp.querySelector(".myBJFxLayer");
  if (!myBJFxLayer) {
    myBJFxLayer = document.createElement("div");
    myBJFxLayer.className = "myBJFxLayer";
    myBJApp.appendChild(myBJFxLayer);
  }

  let myBJOverlay = myBJApp.querySelector(".myBJOverlay");
  if (!myBJOverlay) {
    myBJOverlay = document.createElement("div");
    myBJOverlay.className = "myBJOverlay";
    myBJOverlay.innerHTML =
      '<div class="myBJOverlayCard">' +
        '<div class="myBJOverlayTitle" id="myBJOverlayTitle"></div>' +
        '<div class="myBJOverlayText" id="myBJOverlayText"></div>' +
        '<button class="myBJRestartBtn" id="myBJRestartBtn">再勝負（100から）</button>' +
      '</div>';
    myBJApp.appendChild(myBJOverlay);
  }

  const myBJOverlayTitle = document.getElementById("myBJOverlayTitle");
  const myBJOverlayText = document.getElementById("myBJOverlayText");
  const myBJRestartBtn = document.getElementById("myBJRestartBtn");

  let myBJExplainOverlay = myBJApp.querySelector(".myBJExplainOverlay");
  if (!myBJExplainOverlay) {
    myBJExplainOverlay = document.createElement("div");
    myBJExplainOverlay.className = "myBJExplainOverlay";
    myBJExplainOverlay.innerHTML =
      '<div class="myBJExplainCard">' +
        '<div class="myBJExplainTitle" id="myBJExplainTitle">攻略の解説</div>' +
        '<div class="myBJExplainAction" id="myBJExplainAction">―</div>' +
        '<div class="myBJExplainBody" id="myBJExplainBody">ここに解説が表示されます。</div>' +
        '<div class="myBJExplainButtons">' +
          '<button class="myBJExplainCloseBtn" id="myBJExplainCloseBtn" type="button">閉じる</button>' +
        '</div>' +
      '</div>';
    myBJApp.appendChild(myBJExplainOverlay);
  }

  const myBJExplainTitle = document.getElementById("myBJExplainTitle");
  const myBJExplainAction = document.getElementById("myBJExplainAction");
  const myBJExplainBody = document.getElementById("myBJExplainBody");
  const myBJExplainCloseBtn = document.getElementById("myBJExplainCloseBtn");

  let myBJState = {
    myBJChips: 100,
    myBJBaseBet: 5,
    myBJDeckCount: 8,
    myBJReshuffleThreshold: 52,
    myBJDeck: [],
    myBJDealer: [],
    myBJHands: [],
    myBJCurrentHandIndex: 0,
    myBJInRound: false,
    myBJDealerHidden: true,
    myBJIsBusy: false,
    myBJIsFinished: false,
    myBJShowStrategy: true
  };

  function myBJInit() {
    myBJState.myBJDeck = myBJCreateDeck();
    myBJRenderAll();
    myBJSetMessage("「ディール開始」でゲーム開始");
    myBJAddLog("ゲームを開始しました。所持チップは100です。");
    myBJAddLog("8デッキのシューをシャッフルしました。");
    myBJUpdateButtons();
  }

  function myBJResetGame() {
    myBJState.myBJChips = 100;
    myBJState.myBJDeck = myBJCreateDeck();
    myBJState.myBJDealer = [];
    myBJState.myBJHands = [];
    myBJState.myBJCurrentHandIndex = 0;
    myBJState.myBJInRound = false;
    myBJState.myBJDealerHidden = true;
    myBJState.myBJIsBusy = false;
    myBJState.myBJIsFinished = false;
    myBJHideOverlay();
    myBJHideExplainOverlay();
    myBJHideStrategyDisplay();
    myBJSetMessage("「ディール開始」でゲーム開始");
    myBJAddLog("再勝負を開始しました。チップを100にリセット。");
    myBJRenderAll();
    myBJUpdateButtons();
  }

  function myBJCreateDeck() {
    const myBJSuits = ["spade", "heart", "diamond", "club"];
    const myBJRanks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
    const myBJDeck = [];
    let myBJDeckIndex;
    let myBJSuitIndex;
    let myBJRankIndex;

    for (myBJDeckIndex = 0; myBJDeckIndex < myBJState.myBJDeckCount; myBJDeckIndex++) {
      for (myBJSuitIndex = 0; myBJSuitIndex < myBJSuits.length; myBJSuitIndex++) {
        for (myBJRankIndex = 0; myBJRankIndex < myBJRanks.length; myBJRankIndex++) {
          myBJDeck.push({
            myBJSuit: myBJSuits[myBJSuitIndex],
            myBJRank: myBJRanks[myBJRankIndex]
          });
        }
      }
    }

    myBJShuffleDeck(myBJDeck);
    return myBJDeck;
  }

  function myBJGetSuitSymbol(myBJSuit) {
    if (myBJSuit === "spade") return "\u2660";
    if (myBJSuit === "heart") return "\u2665";
    if (myBJSuit === "diamond") return "\u2666";
    if (myBJSuit === "club") return "\u2663";
    return "?";
  }

  function myBJIsRedSuit(myBJSuit) {
    if (myBJSuit === "heart") return true;
    if (myBJSuit === "diamond") return true;
    return false;
  }

  function myBJShuffleDeck(myBJDeck) {
    let myBJI;
    let myBJJ;
    let myBJTemp;

    for (myBJI = myBJDeck.length - 1; myBJI > 0; myBJI--) {
      myBJJ = Math.floor(Math.random() * (myBJI + 1));
      myBJTemp = myBJDeck[myBJI];
      myBJDeck[myBJI] = myBJDeck[myBJJ];
      myBJDeck[myBJJ] = myBJTemp;
    }
  }

  function myBJEnsureDeck() {
    if (myBJState.myBJDeck.length < myBJState.myBJReshuffleThreshold) {
      myBJState.myBJDeck = myBJCreateDeck();
      myBJAddLog("残り枚数が少なくなったため、8デッキを再シャッフルしました。");
    }
  }

  function myBJCardValue(myBJCard) {
    if (myBJCard.myBJRank === "J") return 10;
    if (myBJCard.myBJRank === "Q") return 10;
    if (myBJCard.myBJRank === "K") return 10;
    if (myBJCard.myBJRank === "A") return 11;
    return Number(myBJCard.myBJRank);
  }

  function myBJHandValue(myBJHand) {
    let myBJTotal = 0;
    let myBJAces = 0;
    let myBJIndex;
    let myBJCard;

    for (myBJIndex = 0; myBJIndex < myBJHand.length; myBJIndex++) {
      myBJCard = myBJHand[myBJIndex];
      myBJTotal += myBJCardValue(myBJCard);

      if (myBJCard.myBJRank === "A") {
        myBJAces++;
      }
    }

    while (myBJTotal > 21) {
      if (myBJAces <= 0) break;
      myBJTotal -= 10;
      myBJAces--;
    }

    return myBJTotal;
  }

  function myBJIsBlackjack(myBJHand) {
    if (myBJHand.length !== 2) return false;
    if (myBJHandValue(myBJHand) !== 21) return false;
    return true;
  }

  function myBJIsBust(myBJHand) {
    if (myBJHandValue(myBJHand) > 21) return true;
    return false;
  }

  function myBJDrawCard() {
    myBJEnsureDeck();
    return myBJState.myBJDeck.pop();
  }

  function myBJWait(myBJMs) {
    return new Promise(function (myBJResolve) {
      window.setTimeout(myBJResolve, myBJMs);
    });
  }

  function myBJConvertRankToStrategyValue(myBJCard) {
    if (!myBJCard) return 0;
    if (myBJCard.myBJRank === "A") return 1;
    if (myBJCard.myBJRank === "J") return 10;
    if (myBJCard.myBJRank === "Q") return 10;
    if (myBJCard.myBJRank === "K") return 10;
    return Number(myBJCard.myBJRank);
  }

  function myBJStrategyConvertTen(myBJValue) {
    if (myBJValue >= 10) return 10;
    return myBJValue;
  }

  function myBJStrategyIsAce(myBJValue) {
    if (myBJValue === 1) return true;
    return false;
  }

  function myBJCalcStrategyAction(myBJC1, myBJC2, myBJDlr) {
    let myBJAce = false;
    let myBJTotal;
    let myBJSoft = false;

    myBJC1 = myBJStrategyConvertTen(myBJC1);
    myBJC2 = myBJStrategyConvertTen(myBJC2);
    myBJDlr = myBJStrategyConvertTen(myBJDlr);

    if (myBJC1 === myBJC2) {
      switch (myBJC1) {
        case 1: return "P";
        case 10: return "S";
        case 9:
          if (myBJDlr === 7 || myBJDlr >= 10) return "S";
          return "P";
        case 8: return "P";
        case 7:
          if (myBJDlr <= 7) return "P";
          return "H";
        case 6:
          if (myBJDlr <= 6) return "P";
          return "H";
        case 5:
          if (myBJDlr <= 9) return "D";
          return "H";
        case 4:
          if (myBJDlr === 5 || myBJDlr === 6) return "P";
          return "H";
        case 3:
        case 2:
          if (myBJDlr <= 7) return "P";
          return "H";
      }
    }

    if (myBJStrategyIsAce(myBJC1)) {
      myBJAce = true;
    } else {
      if (myBJStrategyIsAce(myBJC2)) {
        myBJAce = true;
      }
    }

    myBJTotal = myBJC1 + myBJC2;

    if (myBJAce) {
      if (myBJTotal + 10 <= 21) {
        myBJTotal += 10;
        myBJSoft = true;
      }
    }

    if (myBJSoft) {
      if (myBJTotal === 20) return "S";
      if (myBJTotal === 19) {
        if (myBJDlr === 6) return "D";
        return "S";
      }
      if (myBJTotal === 18) {
        if (myBJDlr >= 3) {
          if (myBJDlr <= 6) return "D";
        }
        if (myBJDlr === 2 || myBJDlr === 7 || myBJDlr === 8) return "S";
        return "H";
      }
      if (myBJTotal === 17) {
        if (myBJDlr >= 3) {
          if (myBJDlr <= 6) return "D";
        }
        return "H";
      }
      if (myBJTotal === 16 || myBJTotal === 15) {
        if (myBJDlr >= 4) {
          if (myBJDlr <= 6) return "D";
        }
        return "H";
      }
      if (myBJTotal === 14 || myBJTotal === 13) {
        if (myBJDlr === 5 || myBJDlr === 6) return "D";
        return "H";
      }
    }

    if (myBJTotal >= 17) return "S";
    if (myBJTotal === 16 || myBJTotal === 15 || myBJTotal === 14 || myBJTotal === 13) {
      if (myBJDlr <= 6) return "S";
      return "H";
    }
    if (myBJTotal === 12) {
      if (myBJDlr >= 4) {
        if (myBJDlr <= 6) return "S";
      }
      return "H";
    }
    if (myBJTotal === 11) return "D";
    if (myBJTotal === 10) {
      if (myBJDlr === 1) return "H";
      if (myBJDlr <= 9) return "D";
      return "H";
    }
    if (myBJTotal === 9) {
      if (myBJDlr >= 3) {
        if (myBJDlr <= 6) return "D";
      }
      return "H";
    }

    return "H";
  }

  function myBJGetStrategyLabel(myBJAction) {
    if (myBJAction === "H") return "ヒット";
    if (myBJAction === "S") return "スタンド";
    if (myBJAction === "D") return "ダブルダウン";
    if (myBJAction === "P") return "スプリット";
    return "―";
  }

  function myBJGetDealerStrengthText(myBJDlr) {
    if (myBJDlr >= 2) {
      if (myBJDlr <= 6) {
        return "弱め";
      }
    }
    return "強め";
  }

  function myBJGetStrategyActionSummary(myBJAction) {
    if (myBJAction === "H") return "H ： ヒット";
    if (myBJAction === "S") return "S ： スタンド";
    if (myBJAction === "D") return "D ： ダブルダウン";
    if (myBJAction === "P") return "P ： スプリット";
    return "―";
  }

  function myBJGetSoftInfo(myBJCards) {
    let myBJValue = myBJHandValue(myBJCards);
    let myBJHasAce = false;
    let myBJRawTotal = 0;
    let myBJIndex;
    let myBJCard;

    for (myBJIndex = 0; myBJIndex < myBJCards.length; myBJIndex++) {
      myBJCard = myBJCards[myBJIndex];
      if (myBJCard.myBJRank === "A") {
        myBJHasAce = true;
        myBJRawTotal += 1;
      } else {
        myBJRawTotal += myBJCardValue(myBJCard);
      }
    }

    if (!myBJHasAce) {
      return {
        myBJIsSoft: false,
        myBJValue: myBJValue
      };
    }

    if (myBJRawTotal + 10 <= 21) {
      return {
        myBJIsSoft: true,
        myBJValue: myBJRawTotal + 10
      };
    }

    return {
      myBJIsSoft: false,
      myBJValue: myBJValue
    };
  }

  function myBJGetHandShortText(myBJHand) {
    let myBJInfo = myBJGetSoftInfo(myBJHand.myBJCards);
    let myBJValue = myBJHandValue(myBJHand.myBJCards);

    if (myBJInfo.myBJIsSoft) {
      return "あなたの手札はソフト " + myBJInfo.myBJValue + " です。";
    }

    return "あなたの手札は " + myBJValue + " です。";
  }

  function myBJGetPairExplainText(myBJPairValue, myBJDlr) {
    if (myBJPairValue === 1) {
      return "A,A はスプリットです。A を分けると、それぞれが 11 スタートに近い強い形になります。1つの手札で 12 として抱えるより、2つの強い手札に分けた方が期待値が高いです。";
    }

    if (myBJPairValue === 8) {
      return "8,8 はスプリットです。16 のまま抱えると非常に苦しい手札ですが、8 を2つに分ければ立て直しの余地が生まれます。弱い 16 を続けるより、2つの手札に分けた方が有利です。";
    }

    if (myBJPairValue === 9) {
      return "9,9 はスプリット推奨の場面です。18 のままでも強そうに見えますが、相手がこの程度なら 9 を2つに分けて、より大きな期待値を狙えます。";
    }

    if (myBJPairValue === 7 || myBJPairValue === 6 || myBJPairValue === 4 || myBJPairValue === 3 || myBJPairValue === 2) {
      if (myBJGetDealerStrengthText(myBJDlr) === "弱め") {
        return "同じ数字が2枚そろっており、相手のアップカードも弱めです。ここはスプリットして手札を2回戦える形にした方が有利です。";
      }
      return "同じ数字が2枚そろっています。この場面は、そのまま抱えるより分けた方が期待値が高くなるため、スプリットが推奨です。";
    }

    return "この場面はスプリットが最適です。同じ数字のペアをそのまま抱えるより、2つの手札に分けた方が期待値が高くなります。";
  }

  function myBJGetDoubleExplainText(myBJHand, myBJDlr) {
    let myBJInfo = myBJGetSoftInfo(myBJHand.myBJCards);
    let myBJValue = myBJHandValue(myBJHand.myBJCards);

    if (myBJInfo.myBJIsSoft) {
      return "ソフト " + myBJInfo.myBJValue + " で、相手のアップカードも強すぎません。A が入っているので 1 枚引いても大きく崩れにくく、追加の 1 枚で伸ばしやすい局面です。ここはベットを増やしてダブルダウンを取る価値があります。";
    }

    if (myBJValue === 11) {
      return "11 はダブルダウンの代表的な好形です。1 枚引けば 20 や 21 に届く可能性が高く、相手より先に強い数字を作りやすいので、ここはダブルダウンを行いより多くの勝ちを狙う場面です。";
    }

    if (myBJValue === 10) {
      return "10 はかなり伸びやすい数字です。相手が 10 や A ではないので押し返されにくく、1 枚で 20 前後まで持っていける期待があります。ここはダブルダウンが有利です。";
    }

    if (myBJValue === 9) {
      return "9 で相手が 3〜6 なら、ディーラーが崩れやすい上に、こちらも 1 枚で強い数字に届きやすい局面です。守るより攻めた方が期待値が高いので、ここはダブルダウンが適しています。";
    }

    return "この場面は、もう 1 枚で手札がかなり良くなる見込みがあり、相手の形も強すぎません。追加の 1 枚に期待ができるため、ダブルダウンが推奨です。";
  }

  function myBJGetStandExplainText(myBJHand, myBJDlr) {
    let myBJInfo = myBJGetSoftInfo(myBJHand.myBJCards);
    let myBJValue = myBJHandValue(myBJHand.myBJCards);

    if (myBJValue >= 17) {
      return "17 以上なので、これ以上引くとバーストの危険が高くなります。十分勝負できる数字があるため、ここはスタンドが基本です。";
    }

    if (myBJInfo.myBJIsSoft) {
      return "A を含む手札で、いまの合計は十分戦える数字です。無理にもう 1 枚取りにいくより、この強さで止めてディーラーの動きを待つ方が有利です。";
    }

    if (myBJDlr >= 2) {
      if (myBJDlr <= 6) {
        return "ディーラーのアップカードが " + myBJGetCardLabelByValue(myBJDlr) + " で弱めです。相手はここからバーストする見込みがあり、あなたの手札も十分に受けられるので、無理に引かずスタンドするのが良い場面です。";
      }
    }

    return "いまの数字なら十分に勝負になり、ここで引くと自分から崩れる危険が高まります。相手の出方を待つため、スタンドが妥当です。";
  }

  function myBJGetHitExplainText(myBJHand, myBJDlr) {
    let myBJInfo = myBJGetSoftInfo(myBJHand.myBJCards);
    let myBJValue = myBJHandValue(myBJHand.myBJCards);

    if (myBJValue <= 9) {
      return "9 以下ではまだ数字が弱く、このままでは勝負になりにくいです。まずは合計を伸ばす必要があるため、ヒットが必須です。";
    }

    if (myBJInfo.myBJIsSoft) {
      return "A を含むソフトハンドで、まだ十分な強さには届いていません。A があるぶん崩れにくいので、ここはもう 1 枚取りにいくのが有利です。";
    }

    if (myBJDlr >= 7 || myBJDlr === 1) {
      return "ディーラーのアップカードが強く、このままでは押し負ける見込みが高いです。現在の手札では受け身に回れないため、バーストのリスクを負ってでもヒットして強化する必要があります。";
    }

    if (myBJValue === 12) {
      return "12 は中途半端な数字で、相手が 4〜6 以外なら安心して止まれません。このままでは勝ち切りにくいため、ヒットで上積みを狙います。";
    }

    return "現在の手札ではまだ弱く、このまま立っても勝ち切りにくい状況です。もう 1 枚引いて強い数字へ伸ばす必要があるため、ヒットが推奨です。";
  }

  function myBJGetStrategyExplainText(myBJHand, myBJDlr, myBJAction) {
    let myBJCards;
    let myBJC1;
    let myBJC2;
    let myBJPairValue;
    let myBJLead;
    let myBJDealerText;

    if (!myBJHand) {
      return "まだ解説できる手札がありません。ディール後に確認してください。";
    }

    myBJCards = myBJHand.myBJCards;
    myBJLead = myBJGetHandShortText(myBJHand);
    myBJDealerText = "ディーラーのアップカードは " + myBJGetCardLabelByValue(myBJDlr) + " です。";

    if (myBJCards.length === 2) {
      myBJC1 = myBJConvertRankToStrategyValue(myBJCards[0]);
      myBJC2 = myBJConvertRankToStrategyValue(myBJCards[1]);

      if (myBJC1 === myBJC2) {
        myBJPairValue = myBJStrategyConvertTen(myBJC1);

        if (myBJAction === "P") {
          return myBJLead + "\n" + myBJDealerText + "\n" + myBJGetPairExplainText(myBJPairValue, myBJDlr);
        }

        if (myBJPairValue === 10) {
          return myBJLead + "\n" + myBJDealerText + "\n10,10 はすでに非常に強い 20 です。ここで分ける必要はなく、そのままスタンドして十分戦えます。";
        }

        if (myBJPairValue === 5) {
          return myBJLead + "\n" + myBJDealerText + "\n5,5 は 10 として扱う方が強い場面です。ペアとして割るより、強い合計 10 を活かして攻めるのが基本です。";
        }
      }
    }

    if (myBJAction === "H") {
      return myBJLead + "\n" + myBJDealerText + "\n" + myBJGetHitExplainText(myBJHand, myBJDlr);
    }

    if (myBJAction === "S") {
      return myBJLead + "\n" + myBJDealerText + "\n" + myBJGetStandExplainText(myBJHand, myBJDlr);
    }

    if (myBJAction === "D") {
      return myBJLead + "\n" + myBJDealerText + "\n" + myBJGetDoubleExplainText(myBJHand, myBJDlr);
    }

    if (myBJAction === "P") {
      return myBJLead + "\n" + myBJDealerText + "\n" + myBJGetPairExplainText(0, myBJDlr);
    }

    return "この局面の解説を表示できません。";
  }

  function myBJGetCardLabelByValue(myBJValue) {
    if (myBJValue === 1) return "A";
    return String(myBJValue);
  }

  function myBJShowExplainOverlay() {
    let myBJHand;
    let myBJDealerUpCard;
    let myBJDlr;
    let myBJAction;

    if (!myBJState.myBJShowStrategy) {
      return;
    }

    if (myBJState.myBJDealer.length < 1) {
      return;
    }

    myBJHand = myBJGetCurrentHand();

    if (!myBJHand) {
      return;
    }

    myBJDealerUpCard = myBJState.myBJDealer[0];
    myBJDlr = myBJConvertRankToStrategyValue(myBJDealerUpCard);
    myBJAction = myBJGetDisplayStrategyAction(myBJHand, myBJDlr);

    myBJExplainTitle.textContent = "攻略の解説";
    myBJExplainAction.textContent = myBJGetStrategyActionSummary(myBJAction);
    myBJExplainBody.textContent = myBJGetStrategyExplainText(myBJHand, myBJDlr, myBJAction);
    myBJExplainOverlay.classList.add("myBJExplainOverlayShow");
  }

  function myBJHideExplainOverlay() {
    myBJExplainOverlay.classList.remove("myBJExplainOverlayShow");
  }

  function myBJCalcPostDrawStrategyAction(myBJCards, myBJDlr) {
    let myBJTotal;
    let myBJAction;

    myBJTotal = myBJHandValue(myBJCards);
    myBJDlr = myBJStrategyConvertTen(myBJDlr);

    if (myBJTotal >= 17) {
      return "S";
    }

    if (myBJTotal >= 13) {
      if (myBJTotal <= 16) {
        if (myBJDlr >= 2) {
          if (myBJDlr <= 6) {
            return "S";
          }
        }
        return "H";
      }
    }

    if (myBJTotal === 12) {
      if (myBJDlr >= 4) {
        if (myBJDlr <= 6) {
          return "S";
        }
      }
      return "H";
    }

    return "H";
  }

  function myBJGetDisplayStrategyAction(myBJHand, myBJDlr) {
    let myBJC1;
    let myBJC2;
    let myBJAction;

    if (!myBJHand) {
      return "";
    }

    if (myBJHand.myBJCards.length === 2) {
      myBJC1 = myBJConvertRankToStrategyValue(myBJHand.myBJCards[0]);
      myBJC2 = myBJConvertRankToStrategyValue(myBJHand.myBJCards[1]);
      myBJAction = myBJCalcStrategyAction(myBJC1, myBJC2, myBJDlr);
      return myBJAction;
    }

    return myBJCalcPostDrawStrategyAction(myBJHand.myBJCards, myBJDlr);
  }

  function myBJUpdateStrategyDisplay() {
    let myBJHand;
    let myBJDealerUpCard;
    let myBJDlr;
    let myBJAction;
    let myBJLabel;

    if (!myBJState.myBJShowStrategy) {
      myBJStrategyBox.style.display = "none";
      myBJExplainBtn.disabled = true;
      return;
    }

    myBJStrategyBox.style.display = "block";

    if (myBJState.myBJDealer.length < 1) {
      myBJStrategyText.textContent = "ディール後に攻略が表示されます";
      myBJExplainBtn.disabled = true;
      return;
    }

    myBJHand = myBJGetCurrentHand();

    if (!myBJHand) {
      if (myBJState.myBJHands.length > 0) {
        myBJStrategyText.textContent = "ラウンド終了";
        myBJExplainBtn.disabled = true;
        return;
      }

      myBJStrategyText.textContent = "ディール後に攻略が表示されます";
      myBJExplainBtn.disabled = true;
      return;
    }

    if (myBJHand.myBJDone) {
      myBJStrategyText.textContent = "ラウンド終了";
      myBJExplainBtn.disabled = true;
      return;
    }

    myBJDealerUpCard = myBJState.myBJDealer[0];
    myBJDlr = myBJConvertRankToStrategyValue(myBJDealerUpCard);
    myBJAction = myBJGetDisplayStrategyAction(myBJHand, myBJDlr);
    myBJLabel = myBJGetStrategyLabel(myBJAction);

    myBJStrategyText.textContent = myBJAction + " ： " + myBJLabel;
    myBJExplainBtn.disabled = false;
  }

  function myBJHideStrategyDisplay() {
    myBJUpdateStrategyDisplay();
  }

  async function myBJStartRound() {
    let myBJHand;

    if (myBJState.myBJInRound) return;
    if (myBJState.myBJIsBusy) return;
    if (myBJState.myBJIsFinished) return;

    if (myBJState.myBJChips < myBJState.myBJBaseBet) {
      myBJCheckGameEnd();
      return;
    }

    myBJState.myBJIsBusy = true;
    myBJHideExplainOverlay();
    myBJHideStrategyDisplay();
    myBJUpdateButtons();

    myBJEnsureDeck();

    myBJState.myBJDealer = [];
    myBJState.myBJHands = [];
    myBJState.myBJCurrentHandIndex = 0;
    myBJState.myBJInRound = true;
    myBJState.myBJDealerHidden = true;

    myBJState.myBJChips -= myBJState.myBJBaseBet;

    myBJHand = {
      myBJCards: [],
      myBJBet: myBJState.myBJBaseBet,
      myBJDone: false,
      myBJResult: "",
      myBJIsDoubled: false
    };

    myBJState.myBJHands.push(myBJHand);

    myBJAddLog("新しい勝負を開始。ベット 5 チップ。");
    myBJSetMessage("カードを配っています...");
    myBJRenderAll();
    myBJUpdateButtons();

    myBJHand.myBJCards.push(myBJDrawCard());
    myBJRenderAll();
    myBJAnimateLatestCard("player", 0);
    await myBJWait(260);

    myBJState.myBJDealer.push(myBJDrawCard());
    myBJRenderAll();
    myBJAnimateLatestCard("dealer", 0);
    await myBJWait(260);

    myBJHand.myBJCards.push(myBJDrawCard());
    myBJRenderAll();
    myBJAnimateLatestCard("player", 0);
    await myBJWait(260);

    myBJState.myBJDealer.push(myBJDrawCard());
    myBJRenderAll();
    myBJAnimateLatestCard("dealer", 1);
    await myBJWait(220);

    await myBJCheckInitialBlackjack();

    if (myBJState.myBJInRound) {
      myBJUpdateStrategyDisplay();
    }

    myBJRenderAll();

    myBJState.myBJIsBusy = false;
    myBJUpdateButtons();
  }

  async function myBJCheckInitialBlackjack() {
    const myBJPlayerBJ = myBJIsBlackjack(myBJState.myBJHands[0].myBJCards);
    const myBJDealerBJ = myBJIsBlackjack(myBJState.myBJDealer);

    if (myBJPlayerBJ || myBJDealerBJ) {
      myBJState.myBJDealerHidden = false;
      myBJRenderAll();

      if (myBJPlayerBJ) {
        if (myBJDealerBJ) {
          myBJState.myBJChips += myBJState.myBJHands[0].myBJBet;
          myBJState.myBJHands[0].myBJResult = "push";
          myBJSetMessage("両者ブラックジャック。引き分け");
          myBJAddLog("両者ブラックジャック。ベット返却。");
          myBJPlayResultEffect("push", "PUSH");
        } else {
          const myBJPayout = myBJState.myBJHands[0].myBJBet * 2;
          myBJState.myBJChips += myBJPayout;
          myBJState.myBJHands[0].myBJResult = "blackjack";
          myBJSetMessage("ブラックジャック！勝利");
          myBJAddLog("プレイヤーがブラックジャック。7チップ獲得。");
          myBJPlayResultEffect("win", "BLACKJACK!");
        }
      } else {
        myBJState.myBJHands[0].myBJResult = "lose";
        myBJSetMessage("ディーラーがブラックジャック");
        myBJAddLog("ディーラーがブラックジャック。敗北。");
        myBJPlayResultEffect("lose", "LOSE");
      }

      myBJEndRound();
      await myBJWait(100);
      myBJCheckGameEnd();
      return;
    }

    myBJSetMessage("あなたの番です");
  }

  function myBJGetCurrentHand() {
    return myBJState.myBJHands[myBJState.myBJCurrentHandIndex];
  }

  async function myBJHit() {
    const myBJHand = myBJGetCurrentHand();

    if (!myBJState.myBJInRound) return;
    if (myBJState.myBJIsBusy) return;
    if (myBJState.myBJIsFinished) return;
    if (!myBJHand) return;
    if (myBJHand.myBJDone) return;

    myBJState.myBJIsBusy = true;
    myBJUpdateButtons();

    myBJHand.myBJCards.push(myBJDrawCard());
    myBJAddLog("手札" + (myBJState.myBJCurrentHandIndex + 1) + "：ヒット");
    myBJRenderAll();
    myBJAnimateLatestCard("player", myBJState.myBJCurrentHandIndex);
    await myBJWait(260);

    myBJUpdateStrategyDisplay();

    if (myBJIsBust(myBJHand.myBJCards)) {
      myBJHand.myBJDone = true;
      myBJHand.myBJResult = "bust";
      myBJAddLog("手札" + (myBJState.myBJCurrentHandIndex + 1) + "：バースト");
      await myBJAdvanceTurn();
    }

    myBJRenderAll();
    myBJState.myBJIsBusy = false;
    myBJUpdateButtons();
  }

  async function myBJStand() {
    const myBJHand = myBJGetCurrentHand();

    if (!myBJState.myBJInRound) return;
    if (myBJState.myBJIsBusy) return;
    if (myBJState.myBJIsFinished) return;
    if (!myBJHand) return;
    if (myBJHand.myBJDone) return;

    myBJState.myBJIsBusy = true;
    myBJUpdateButtons();

    myBJHand.myBJDone = true;
    myBJUpdateStrategyDisplay();
    myBJAddLog("手札" + (myBJState.myBJCurrentHandIndex + 1) + "：スタンド");
    await myBJAdvanceTurn();
    myBJRenderAll();

    myBJState.myBJIsBusy = false;
    myBJUpdateButtons();
  }

  async function myBJDoubleDown() {
    const myBJHand = myBJGetCurrentHand();

    if (!myBJState.myBJInRound) return;
    if (myBJState.myBJIsBusy) return;
    if (myBJState.myBJIsFinished) return;
    if (!myBJHand) return;
    if (myBJHand.myBJDone) return;
    if (myBJHand.myBJCards.length !== 2) return;
    if (myBJState.myBJChips < myBJHand.myBJBet) return;

    myBJState.myBJIsBusy = true;
    myBJUpdateButtons();

    myBJState.myBJChips -= myBJHand.myBJBet;
    myBJHand.myBJBet = myBJHand.myBJBet * 2;
    myBJHand.myBJIsDoubled = true;
    myBJHand.myBJCards.push(myBJDrawCard());
    myBJAddLog("手札" + (myBJState.myBJCurrentHandIndex + 1) + "：ダブルダウン");
    myBJRenderAll();
    myBJAnimateLatestCard("player", myBJState.myBJCurrentHandIndex);
    await myBJWait(260);

    myBJUpdateStrategyDisplay();

    if (myBJIsBust(myBJHand.myBJCards)) {
      myBJHand.myBJResult = "bust";
      myBJAddLog("手札" + (myBJState.myBJCurrentHandIndex + 1) + "：バースト");
    }

    myBJHand.myBJDone = true;
    await myBJAdvanceTurn();
    myBJRenderAll();

    myBJState.myBJIsBusy = false;
    myBJUpdateButtons();
  }

  function myBJCanSplit(myBJHand) {
    let myBJCard1;
    let myBJCard2;

    if (!myBJHand) return false;
    if (myBJHand.myBJCards.length !== 2) return false;
    if (myBJState.myBJHands.length > 1) return false;
    if (myBJState.myBJChips < myBJHand.myBJBet) return false;

    myBJCard1 = myBJHand.myBJCards[0];
    myBJCard2 = myBJHand.myBJCards[1];

    if (myBJCardValue(myBJCard1) !== myBJCardValue(myBJCard2)) return false;

    return true;
  }

  async function myBJSplit() {
    const myBJHand = myBJGetCurrentHand();
    let myBJCardA;
    let myBJCardB;

    if (!myBJState.myBJInRound) return;
    if (myBJState.myBJIsBusy) return;
    if (myBJState.myBJIsFinished) return;
    if (!myBJCanSplit(myBJHand)) return;

    myBJState.myBJIsBusy = true;
    myBJUpdateButtons();

    myBJState.myBJChips -= myBJHand.myBJBet;

    myBJCardA = myBJHand.myBJCards[0];
    myBJCardB = myBJHand.myBJCards[1];

    myBJState.myBJHands = [
      {
        myBJCards: [myBJCardA],
        myBJBet: myBJState.myBJBaseBet,
        myBJDone: false,
        myBJResult: "",
        myBJIsDoubled: false
      },
      {
        myBJCards: [myBJCardB],
        myBJBet: myBJState.myBJBaseBet,
        myBJDone: false,
        myBJResult: "",
        myBJIsDoubled: false
      }
    ];

    myBJState.myBJCurrentHandIndex = 0;
    myBJAddLog("スプリットしました。手札を2つに分割。");
    myBJSetMessage("スプリット後のカードを配っています");
    myBJRenderAll();
    await myBJWait(220);

    myBJState.myBJHands[0].myBJCards.push(myBJDrawCard());
    myBJRenderAll();
    myBJAnimateLatestCard("player", 0);
    await myBJWait(240);

    myBJState.myBJHands[1].myBJCards.push(myBJDrawCard());
    myBJRenderAll();
    myBJAnimateLatestCard("player", 1);
    await myBJWait(240);

    myBJSetMessage("手札1から進めてください");
    myBJUpdateStrategyDisplay();
    myBJState.myBJIsBusy = false;
    myBJUpdateButtons();
  }

  async function myBJAdvanceTurn() {
    let myBJIndex;
    let myBJFound = -1;

    for (myBJIndex = myBJState.myBJCurrentHandIndex + 1; myBJIndex < myBJState.myBJHands.length; myBJIndex++) {
      if (!myBJState.myBJHands[myBJIndex].myBJDone) {
        myBJFound = myBJIndex;
        break;
      }
    }

    if (myBJFound !== -1) {
      myBJState.myBJCurrentHandIndex = myBJFound;
      myBJSetMessage("手札" + (myBJFound + 1) + "の番です");
      myBJUpdateStrategyDisplay();
      return;
    }

    await myBJDealerTurn();
  }

  async function myBJDealerTurn() {
    let myBJHasLiveHand = false;
    let myBJIndex;

    myBJState.myBJDealerHidden = false;
    myBJSetMessage("ディーラーのターン");
    myBJUpdateStrategyDisplay();
    myBJRenderAll();
    await myBJWait(320);

    for (myBJIndex = 0; myBJIndex < myBJState.myBJHands.length; myBJIndex++) {
      if (myBJState.myBJHands[myBJIndex].myBJResult !== "bust") {
        myBJHasLiveHand = true;
        break;
      }
    }

    if (!myBJHasLiveHand) {
      myBJAddLog("すべての手札がバースト。ディーラーは引きません。");
      myBJPlayResultEffect("lose", "BURST");
      myBJEndRound();
      myBJRenderAll();
      myBJCheckGameEnd();
      return;
    }

    while (myBJHandValue(myBJState.myBJDealer) < 17) {
      myBJState.myBJDealer.push(myBJDrawCard());
      myBJRenderAll();
      myBJAnimateLatestCard("dealer", myBJState.myBJDealer.length - 1);
      await myBJWait(360);
    }

    myBJResolveRound();
    myBJEndRound();
    myBJRenderAll();
    myBJCheckGameEnd();
  }

  function myBJResolveRound() {
    const myBJDealerTotal = myBJHandValue(myBJState.myBJDealer);
    const myBJDealerBust = myBJDealerTotal > 21;
    let myBJIndex;
    let myBJHand;
    let myBJPlayerTotal;
    let myBJWinCount = 0;
    let myBJPushCount = 0;
    let myBJLoseCount = 0;

    for (myBJIndex = 0; myBJIndex < myBJState.myBJHands.length; myBJIndex++) {
      myBJHand = myBJState.myBJHands[myBJIndex];
      myBJPlayerTotal = myBJHandValue(myBJHand.myBJCards);

      if (myBJHand.myBJResult === "bust") {
        myBJHand.myBJResult = "lose";
        myBJAddLog("手札" + (myBJIndex + 1) + "：バースト負け");
        myBJLoseCount++;
        continue;
      }

      if (myBJDealerBust) {
        myBJState.myBJChips += myBJHand.myBJBet * 2;
        myBJHand.myBJResult = "win";
        myBJAddLog("手札" + (myBJIndex + 1) + "：ディーラーバーストで勝ち");
        myBJWinCount++;
        continue;
      }

      if (myBJPlayerTotal > myBJDealerTotal) {
        myBJState.myBJChips += myBJHand.myBJBet * 2;
        myBJHand.myBJResult = "win";
        myBJAddLog("手札" + (myBJIndex + 1) + "：勝ち");
        myBJWinCount++;
      } else {
        if (myBJPlayerTotal === myBJDealerTotal) {
          myBJState.myBJChips += myBJHand.myBJBet;
          myBJHand.myBJResult = "push";
          myBJAddLog("手札" + (myBJIndex + 1) + "：引き分け");
          myBJPushCount++;
        } else {
          myBJHand.myBJResult = "lose";
          myBJAddLog("手札" + (myBJIndex + 1) + "：負け");
          myBJLoseCount++;
        }
      }
    }

    if (myBJWinCount > 0) {
      myBJSetMessage("ラウンド終了：勝ちあり");
      myBJPlayResultEffect("win", "WIN!");
      return;
    }

    if (myBJPushCount > 0) {
      if (myBJLoseCount === 0) {
        myBJSetMessage("ラウンド終了：引き分け");
        myBJPlayResultEffect("push", "PUSH");
        return;
      }
    }

    myBJSetMessage("ラウンド終了：敗北");
    myBJPlayResultEffect("lose", "LOSE");
  }

  function myBJEndRound() {
    myBJState.myBJInRound = false;
    myBJState.myBJCurrentHandIndex = 0;

    if (myBJState.myBJChips < myBJState.myBJBaseBet) {
      myBJSetMessage("チップ不足で続行できません");
    }

    myBJUpdateStrategyDisplay();
  }

  function myBJCheckGameEnd() {
    if (myBJState.myBJChips <= 0) {
      myBJState.myBJIsFinished = true;
      myBJSetMessage("チップがなくなりました");
      myBJShowOverlay("GAME OVER", "チップが0になりました。再勝負しますか？");
      myBJUpdateButtons();
      return;
    }

    if (myBJState.myBJChips >= 10000) {
      myBJState.myBJIsFinished = true;
      myBJSetMessage("10000チップ達成！");
      myBJShowOverlay("CLEAR!", "10000チップ達成です。再勝負しますか？");
      myBJUpdateButtons();
      return;
    }
  }

  function myBJShowOverlay(myBJTitle, myBJText) {
    myBJOverlayTitle.textContent = myBJTitle;
    myBJOverlayText.textContent = myBJText;
    myBJOverlay.classList.add("myBJOverlayShow");
  }

  function myBJHideOverlay() {
    myBJOverlay.classList.remove("myBJOverlayShow");
  }

  function myBJRenderAll() {
    myBJRenderDealer();
    myBJRenderHands();
    myBJRenderStatus();
  }

  function myBJRenderDealer() {
    let myBJIndex;

    myBJDealerCards.innerHTML = "";

    for (myBJIndex = 0; myBJIndex < myBJState.myBJDealer.length; myBJIndex++) {
      if (myBJIndex === 1) {
        if (myBJState.myBJDealerHidden) {
          myBJDealerCards.appendChild(myBJCreateBackCard());
        } else {
          myBJDealerCards.appendChild(myBJCreateCard(myBJState.myBJDealer[myBJIndex]));
        }
      } else {
        myBJDealerCards.appendChild(myBJCreateCard(myBJState.myBJDealer[myBJIndex]));
      }
    }

    if (myBJState.myBJDealer.length === 0) {
      myBJDealerPoints.textContent = "?";
      return;
    }

    if (myBJState.myBJDealerHidden) {
      myBJDealerPoints.textContent = "?";
      return;
    }

    myBJDealerPoints.textContent = myBJHandValue(myBJState.myBJDealer);
  }

  function myBJRenderHands() {
    let myBJIndex;
    let myBJEmpty;
    let myBJInfoText = "";
    let myBJHand;
    let myBJBox;
    let myBJTitle;
    let myBJCardsRow;
    let myBJCardIndex;
    let myBJResultText;
    let myBJResultClass;
    let myBJActiveClass = "";

    myBJHandsWrap.innerHTML = "";

    if (myBJState.myBJHands.length === 0) {
      myBJEmpty = document.createElement("div");
      myBJEmpty.className = "myBJHandBox";
      myBJEmpty.innerHTML = '<div class="myBJHandTitle"><span>手札なし</span><span class="myBJHandMeta">ディール開始を押してください</span></div>';
      myBJHandsWrap.appendChild(myBJEmpty);
      myBJPlayerInfo.textContent = "手札を配ってください";
      return;
    }

    for (myBJIndex = 0; myBJIndex < myBJState.myBJHands.length; myBJIndex++) {
      if (myBJIndex > 0) {
        myBJInfoText += " / ";
      }
      myBJInfoText += "手札" + (myBJIndex + 1) + "：" + myBJHandValue(myBJState.myBJHands[myBJIndex].myBJCards);
    }

    myBJPlayerInfo.textContent = myBJInfoText;

    for (myBJIndex = 0; myBJIndex < myBJState.myBJHands.length; myBJIndex++) {
      myBJHand = myBJState.myBJHands[myBJIndex];
      myBJBox = document.createElement("div");

      myBJActiveClass = "";
      if (myBJState.myBJInRound) {
        if (myBJIndex === myBJState.myBJCurrentHandIndex) {
          if (!myBJHand.myBJDone) {
            myBJActiveClass = " myBJHandActive";
          }
        }
      }

      myBJBox.className = "myBJHandBox" + myBJActiveClass;

      myBJResultText = myBJGetResultText(myBJHand.myBJResult);
      myBJResultClass = myBJGetResultClass(myBJHand.myBJResult);

      myBJTitle = document.createElement("div");
      myBJTitle.className = "myBJHandTitle";

      if (myBJResultText) {
        myBJTitle.innerHTML =
          '<span>手札' + (myBJIndex + 1) + '</span>' +
          '<span class="myBJHandMeta">合計 ' + myBJHandValue(myBJHand.myBJCards) + ' / ベット ' + myBJHand.myBJBet +
          ' / <span class="' + myBJResultClass + '">' + myBJResultText + '</span></span>';
      } else {
        myBJTitle.innerHTML =
          '<span>手札' + (myBJIndex + 1) + '</span>' +
          '<span class="myBJHandMeta">合計 ' + myBJHandValue(myBJHand.myBJCards) + ' / ベット ' + myBJHand.myBJBet + '</span>';
      }

      myBJCardsRow = document.createElement("div");
      myBJCardsRow.className = "myBJCards";
      myBJCardsRow.setAttribute("data-myBJHandIndex", myBJIndex);

      for (myBJCardIndex = 0; myBJCardIndex < myBJHand.myBJCards.length; myBJCardIndex++) {
        myBJCardsRow.appendChild(myBJCreateCard(myBJHand.myBJCards[myBJCardIndex]));
      }

      myBJBox.appendChild(myBJTitle);
      myBJBox.appendChild(myBJCardsRow);
      myBJHandsWrap.appendChild(myBJBox);
    }
  }

  function myBJRenderStatus() {
    myBJChips.textContent = myBJState.myBJChips;
    myBJBet.textContent = myBJState.myBJBaseBet;
  }

  function myBJGetResultText(myBJResult) {
    if (myBJResult === "win") return "勝ち";
    if (myBJResult === "lose") return "負け";
    if (myBJResult === "push") return "引き分け";
    if (myBJResult === "blackjack") return "BJ勝ち";
    if (myBJResult === "bust") return "バースト";
    return "";
  }

  function myBJGetResultClass(myBJResult) {
    if (myBJResult === "win") return "myBJResultWin";
    if (myBJResult === "blackjack") return "myBJResultWin";
    if (myBJResult === "lose") return "myBJResultLose";
    if (myBJResult === "bust") return "myBJResultLose";
    if (myBJResult === "push") return "myBJResultPush";
    return "";
  }

  function myBJCreateCard(myBJCard) {
    const myBJCardEl = document.createElement("div");
    const myBJIsRed = myBJIsRedSuit(myBJCard.myBJSuit);
    const myBJTop = document.createElement("div");
    const myBJMiddle = document.createElement("div");
    const myBJBottom = document.createElement("div");
    const myBJSuitSymbol = myBJGetSuitSymbol(myBJCard.myBJSuit);

    myBJCardEl.className = "myBJCard";
    if (myBJIsRed) {
      myBJCardEl.classList.add("myBJRed");
    }

    myBJTop.className = "myBJCardCorner";
    myBJTop.innerHTML = myBJCard.myBJRank + "<br>" + myBJSuitSymbol;

    myBJMiddle.className = "myBJCardSuit";
    myBJMiddle.textContent = myBJSuitSymbol;

    myBJBottom.className = "myBJCardCornerBottom";
    myBJBottom.innerHTML = myBJCard.myBJRank + "<br>" + myBJSuitSymbol;

    myBJCardEl.appendChild(myBJTop);
    myBJCardEl.appendChild(myBJMiddle);
    myBJCardEl.appendChild(myBJBottom);

    return myBJCardEl;
  }

  function myBJCreateBackCard() {
    const myBJBack = document.createElement("div");
    myBJBack.className = "myBJCard myBJCardBack";
    return myBJBack;
  }

  function myBJSetMessage(myBJText) {
    myBJMessage.textContent = myBJText;
  }

  function myBJAddLog(myBJText) {
    const myBJItem = document.createElement("div");
    myBJItem.className = "myBJLogItem";
    myBJItem.textContent = myBJText;
    myBJLog.prepend(myBJItem);
  }

  function myBJAnimateLatestCard(myBJTarget, myBJIndex) {
    let myBJContainer;
    let myBJCards;
    let myBJCardEl;

    if (myBJTarget === "dealer") {
      myBJContainer = myBJDealerCards;
    } else {
      myBJContainer = myBJHandsWrap.querySelector('[data-myBJHandIndex="' + myBJIndex + '"]');
    }

    if (!myBJContainer) return;

    myBJCards = myBJContainer.querySelectorAll(".myBJCard");
    if (!myBJCards.length) return;

    myBJCardEl = myBJCards[myBJCards.length - 1];
    if (!myBJCardEl) return;

    myBJCardEl.classList.remove("myBJDealAnim");
    myBJCardEl.classList.remove("myBJDealerDrawAnim");
    void myBJCardEl.offsetWidth;

    if (myBJTarget === "dealer") {
      myBJCardEl.classList.add("myBJDealerDrawAnim");
    } else {
      myBJCardEl.classList.add("myBJDealAnim");
    }
  }

  function myBJPlayResultEffect(myBJType, myBJText) {
    const myBJMsg = document.createElement("div");
    let myBJIndex;
    let myBJBurst;
    let myBJAngle;
    let myBJDistance;
    let myBJX;
    let myBJY;

    myBJMsg.className = "myBJFxMessage";

    if (myBJType === "win") {
      myBJMsg.classList.add("myBJFxWin");
    } else {
      if (myBJType === "lose") {
        myBJMsg.classList.add("myBJFxLose");
      } else {
        myBJMsg.classList.add("myBJFxPush");
      }
    }

    myBJMsg.textContent = myBJText;
    myBJFxLayer.appendChild(myBJMsg);

    for (myBJIndex = 0; myBJIndex < 18; myBJIndex++) {
      myBJBurst = document.createElement("div");
      myBJBurst.className = "myBJFxBurst";

      if (myBJType === "win") {
        myBJBurst.classList.add("myBJFxBurstWin");
      } else {
        if (myBJType === "lose") {
          myBJBurst.classList.add("myBJFxBurstLose");
        } else {
          myBJBurst.classList.add("myBJFxBurstPush");
        }
      }

      myBJAngle = (Math.PI * 2 / 18) * myBJIndex;
      myBJDistance = 80 + Math.random() * 55;
      myBJX = Math.cos(myBJAngle) * myBJDistance;
      myBJY = Math.sin(myBJAngle) * myBJDistance;

      myBJBurst.style.left = "50%";
      myBJBurst.style.top = "42%";
      myBJBurst.style.setProperty("--myBJx", myBJX + "px");
      myBJBurst.style.setProperty("--myBJy", myBJY + "px");

      myBJFxLayer.appendChild(myBJBurst);

      window.setTimeout(
        (function (myBJNode) {
          return function () {
            if (!myBJNode) return;
            if (!myBJNode.parentNode) return;
            myBJNode.parentNode.removeChild(myBJNode);
          };
        })(myBJBurst),
        1000
      );
    }

    window.setTimeout(function () {
      if (!myBJMsg) return;
      if (!myBJMsg.parentNode) return;
      myBJMsg.parentNode.removeChild(myBJMsg);
    }, 1300);
  }

  function myBJUpdateButtons() {
    const myBJHand = myBJGetCurrentHand();
    let myBJCanAct = false;
    let myBJCanDouble = false;
    let myBJCanSplitNow = false;

    if (myBJState.myBJIsBusy) {
      myBJDealBtn.disabled = true;
      myBJHitBtn.disabled = true;
      myBJStandBtn.disabled = true;
      myBJSplitBtn.disabled = true;
      myBJDoubleBtn.disabled = true;
      return;
    }

    if (myBJState.myBJIsFinished) {
      myBJDealBtn.disabled = true;
      myBJHitBtn.disabled = true;
      myBJStandBtn.disabled = true;
      myBJSplitBtn.disabled = true;
      myBJDoubleBtn.disabled = true;
      return;
    }

    if (myBJState.myBJInRound) {
      if (myBJHand) {
        if (!myBJHand.myBJDone) {
          myBJCanAct = true;
        }
      }
    }

    if (myBJCanAct) {
      if (myBJHand.myBJCards.length === 2) {
        if (myBJState.myBJChips >= myBJHand.myBJBet) {
          myBJCanDouble = true;
        }
      }
    }

    if (myBJCanAct) {
      myBJCanSplitNow = myBJCanSplit(myBJHand);
    }

    if (myBJState.myBJInRound) {
      myBJDealBtn.disabled = true;
    } else {
      if (myBJState.myBJChips < myBJState.myBJBaseBet) {
        myBJDealBtn.disabled = true;
      } else {
        myBJDealBtn.disabled = false;
      }
    }

    myBJHitBtn.disabled = !myBJCanAct;
    myBJStandBtn.disabled = !myBJCanAct;
    myBJSplitBtn.disabled = !myBJCanSplitNow;
    myBJDoubleBtn.disabled = !myBJCanDouble;
  }

  myBJDealBtn.addEventListener("click", myBJStartRound);
  myBJHitBtn.addEventListener("click", myBJHit);
  myBJStandBtn.addEventListener("click", myBJStand);
  myBJSplitBtn.addEventListener("click", myBJSplit);
  myBJDoubleBtn.addEventListener("click", myBJDoubleDown);
  myBJRestartBtn.addEventListener("click", myBJResetGame);
  myBJExplainBtn.addEventListener("click", myBJShowExplainOverlay);
  myBJExplainCloseBtn.addEventListener("click", myBJHideExplainOverlay);
  myBJExplainOverlay.addEventListener("click", function (myBJEvent) {
    if (myBJEvent.target === myBJExplainOverlay) {
      myBJHideExplainOverlay();
    }
  });
  myBJStrategyToggleBtn.addEventListener("click", function () {
    myBJState.myBJShowStrategy = !myBJState.myBJShowStrategy;

    if (myBJState.myBJShowStrategy) {
      myBJStrategyToggleBtn.classList.add("myBJStrategyOn");
    } else {
      myBJStrategyToggleBtn.classList.remove("myBJStrategyOn");
    }

    let w = window.innerWidth;

    if (w <= 768) {
      if (myBJState.myBJShowStrategy) {
        myBJStrategyToggleBtn.textContent = "OFF";
      } else {
        myBJStrategyToggleBtn.textContent = "ON";
      }
    } else {
      if (myBJState.myBJShowStrategy) {
        myBJStrategyToggleBtn.textContent = "攻略表示：OFF";
      } else {
        myBJStrategyToggleBtn.textContent = "攻略表示：ON";
      }
    }

    myBJUpdateStrategyDisplay();
  });

  function myBJAdjustButtonLabelForMobile() {
    let w = window.innerWidth;

    if (w <= 768) {
      myBJMessage.textContent = "「開始」でゲーム開始";
      myBJDealBtn.textContent = "開始";
      myBJHitBtn.textContent = "H";
      myBJStandBtn.textContent = "S";
      myBJSplitBtn.textContent = "SP";
      myBJDoubleBtn.textContent = "D";

      if (myBJState.myBJShowStrategy) {
        myBJStrategyToggleBtn.textContent = "OFF";
      } else {
        myBJStrategyToggleBtn.textContent = "ON";
      }
    } else {
      myBJMessage.textContent = "「ディール開始」でゲーム開始";
      myBJDealBtn.textContent = "ディール開始";
      myBJHitBtn.textContent = "ヒット";
      myBJStandBtn.textContent = "スタンド";
      myBJSplitBtn.textContent = "スプリット";
      myBJDoubleBtn.textContent = "ダブルダウン";

      if (myBJState.myBJShowStrategy) {
        myBJStrategyToggleBtn.textContent = "攻略表示：OFF";
      } else {
        myBJStrategyToggleBtn.textContent = "攻略表示：ON";
      }
    }
  }

  window.addEventListener("resize", myBJAdjustButtonLabelForMobile);
  window.addEventListener("load", myBJAdjustButtonLabelForMobile);

  myBJInit();

})();
</script>


<div class="p-blogParts post_content" data-partsID="55773">
<p><div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（固定 728×180） -->
<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:180px"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="1979737405"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div --></p>
</div>



<h3 class="wp-block-heading">ベーシックストラテジー（シュミレーション）</h3>



<p class="has-border -border01 has-swl-pale-01-background-color has-background"><strong>★いつでも使えるようにページをブックマークしておくと便利です。</strong></p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<style>
:root{
    --myBJ_blue:#2563eb;
    --myBJ_red:#dc2626;
    --myBJ_hit:#10b981;
    --myBJ_stand:#f59e0b;
    --myBJ_double:#0ea5e9;
    --myBJ_split:#9333ea;
}
.myBJ_section {
    margin-bottom: 18px;
    font-size : 20px;
}
.myBJ_label {
    margin-bottom: 6px;
    display: block;
    font-weight: 600;
}
.myBJ_buttons {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-bottom: 6px;
}
.myBJ_btn {
    width: 42px;
    height: 42px;
    line-height: 38px;
    text-align: center;
    border-radius: 6px;
    cursor: pointer;
    user-select: none;
    font-weight: 600;
    font-size: 0.9rem;
    border: 2px solid var(--myBJ_blue);
    background: #fff;
    color: var(--myBJ_blue);
    transition: 0.2s;
}
.myBJ_dealer .myBJ_btn {
    border-color: var(--myBJ_red);
    color: var(--myBJ_red);
}
.myBJ_btn.myBJ_selected {
    background: var(--myBJ_blue);
    color: #fff;
}
.myBJ_dealer .myBJ_btn.myBJ_selected {
    background: var(--myBJ_red);
    color: #fff;
}
#myBJ_result {
    font-size: 1.6rem;
    font-weight: 700;
    padding: 10px 16px;
    border-radius: 8px;
    display: inline-block;
    background: #e5e7eb;
    color: #111;
    min-width: 140px;
}
#myBJ_busts {
    margin-top: 8px;
    font-size: 0.9rem;
    color: #374151;
}
.myBJ_clear {
    margin-top: 10px;
    background: #ccc;
    color: #000;
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 0.9rem;
    cursor: pointer;
    display: inline-block;
    user-select: none;
}
#myBJ_total {
  color: var(--myBJ_blue);
}
</style>

<section class="myBJ_section">
  <span class="myBJ_label">ディーラーのアップカード</span>
  <div id="myBJ_dealer" class="myBJ_buttons myBJ_dealer"></div>
</section>

<section class="myBJ_section">
  <span class="myBJ_label">プレイヤー（1枚目）</span>
  <div id="myBJ_p1" class="myBJ_buttons"></div>
</section>
<section class="myBJ_section">
  <span class="myBJ_label">プレイヤー（2枚目）</span>
  <div id="myBJ_p2" class="myBJ_buttons"></div>
</section>

<section class="myBJ_section">
  <div id="myBJ_total">プレイヤー数値（合計）: ー</div>
  <br>
  <span class="myBJ_label">推奨アクション</span>
  <span id="myBJ_result">なし</span>
  <div id="myBJ_busts">ディーラーバースト率: 0.0%　｜　プレイヤーバースト率: 0.0%</div>
</section>

<div class="myBJ_clear" onclick="myBJ_func_clear()">クリア</div>

<script>
var myBJ_totalDiv = document.getElementById('myBJ_total');

function myBJ_func_createButtons(containerId, onChange) {
  var cont = document.getElementById(containerId);
  for (var i = 1; i <= 13; i++) {
    var btn = document.createElement('div');
    btn.textContent = i;
    btn.className = 'myBJ_btn';
    btn.dataset.val = i;
    btn.addEventListener('click', function() {
      var children = cont.children;
      for (var j = 0; j < children.length; j++) {
        children[j].classList.remove('myBJ_selected');
      }
      this.classList.add('myBJ_selected');
      onChange(Number(this.dataset.val));
    });
    cont.appendChild(btn);
  }
}

var myBJ_dealer = 0, myBJ_p1 = 0, myBJ_p2 = 0;
var myBJ_display = document.getElementById('myBJ_result');
var myBJ_bustDiv = document.getElementById('myBJ_busts');

function myBJ_func_clear() {
  myBJ_dealer = 0; myBJ_p1 = 0; myBJ_p2 = 0;
  ['myBJ_dealer', 'myBJ_p1', 'myBJ_p2'].forEach(function(id){
    var el = document.getElementById(id);
    for (var i = 0; i < el.children.length; i++) {
      el.children[i].classList.remove('myBJ_selected');
    }
  });
  myBJ_display.textContent = 'なし';
  myBJ_display.style.background = '#e5e7eb';
  myBJ_display.style.color = '#111';
  myBJ_bustDiv.textContent = 'ディーラーバースト率: 0.0%　｜　プレイヤーバースト率: 0.0%';
  myBJ_totalDiv.textContent = 'プレイヤー数値（合計）: ー';
}

function myBJ_func_update() {
  if (myBJ_dealer === 0 || myBJ_p1 === 0 || myBJ_p2 === 0) {
    myBJ_display.textContent = 'なし';
    myBJ_display.style.background = '#e5e7eb';
    myBJ_display.style.color = '#111';
    myBJ_bustDiv.textContent = 'ディーラーバースト率: 0.0%　｜　プレイヤーバースト率: 0.0%';
    return;
  }
  var act = myBJ_func_calcAction(myBJ_p1, myBJ_p2, myBJ_dealer);
  var jp = { H: 'ヒット', S: 'スタンド', D: 'ダブルダウン', P: 'スプリット' };
  myBJ_display.textContent = act + ' - ' + jp[act];
  var colorMap = {
    H: 'var(--myBJ_hit)',
    S: 'var(--myBJ_stand)',
    D: 'var(--myBJ_double)',
    P: 'var(--myBJ_split)'
  };
  myBJ_display.style.background = colorMap[act];
  myBJ_display.style.color = '#fff';
  myBJ_bustDiv.textContent = 'ディーラーバースト率: ' + myBJ_func_dealerBust(myBJ_dealer).toFixed(1) + '%　｜　プレイヤーバースト率: ' + myBJ_func_playerBustProb(myBJ_p1, myBJ_p2).toFixed(1) + '%';

  var displayTotal = '';
  var c1 = myBJ_func_convertTen(myBJ_p1);
  var c2 = myBJ_func_convertTen(myBJ_p2);
  var total = c1 + c2;
  var hasAce = myBJ_func_isAce(myBJ_p1) || myBJ_func_isAce(myBJ_p2);

  if ( hasAce ) {
    if ( total + 10 <= 21) {
      displayTotal = `プレイヤー数値（合計）: ${total} / ${total + 10}`;
    } else {
      displayTotal = `プレイヤー数値（合計）: ${total}`;
    }
  } else {
    displayTotal = `プレイヤー数値（合計）: ${total}`;
  }
  myBJ_totalDiv.textContent = displayTotal;
}

myBJ_func_createButtons('myBJ_dealer', function(v) {
  myBJ_dealer = v;
  myBJ_func_update();
});
myBJ_func_createButtons('myBJ_p1', function(v) {
  myBJ_p1 = v;
  myBJ_func_update();
});
myBJ_func_createButtons('myBJ_p2', function(v) {
  myBJ_p2 = v;
  myBJ_func_update();
});

function myBJ_func_convertTen(n) {
  if (n >= 10) return 10;
  return n;
}
function myBJ_func_isAce(n) {
  return n === 1;
}
function myBJ_func_calcAction(c1, c2, dlr) {
  c1 = myBJ_func_convertTen(c1);
  c2 = myBJ_func_convertTen(c2);
  dlr = myBJ_func_convertTen(dlr);
  if (c1 === c2) {
    switch (c1) {
      case 1: return 'P';
      case 10: return 'S';
      case 9: if (dlr === 7 || dlr >= 10) return 'S'; else return 'P';
      case 8: return 'P';
      case 7: if (dlr <= 7) return 'P'; else return 'H';
      case 6: if (dlr <= 6) return 'P'; else return 'H';
      case 5: if (dlr <= 9) return 'D'; else return 'H';
      case 4: if (dlr === 5 || dlr === 6) return 'P'; else return 'H';
      case 3:
      case 2: if (dlr <= 7) return 'P'; else return 'H';
    }
  }
  var ace = false;
  if (myBJ_func_isAce(c1)) ace = true;
  else if (myBJ_func_isAce(c2)) ace = true;

  var total = c1 + c2;
  var soft = false;
  if (ace) {
    if (total + 10 <= 21) {
      total += 10;
      soft = true;
    }
  }

  if (soft) {
    if (total === 20) return 'S';
    else if (total === 19) {
      if (dlr === 6) return 'D';
      else return 'S';
    }
    else if (total === 18) {
      if (dlr >= 3 && dlr <= 6) return 'D';
      else if (dlr === 2 || dlr === 7 || dlr === 8) return 'S';
      else return 'H';
    }
    else if (total === 17) {
      if (dlr >= 3 && dlr <= 6) return 'D';
      else return 'H';
    }
    else if (total === 16 || total === 15) {
      if (dlr >= 4 && dlr <= 6) return 'D';
      else return 'H';
    }
    else if (total === 14 || total === 13) {
      if (dlr === 5 || dlr === 6) return 'D';
      else return 'H';
    }
  }

  if (total >= 17) return 'S';
  if (total === 16 || total === 15 || total === 14 || total === 13) {
    if (dlr <= 6) return 'S';
    else return 'H';
  }
  if (total === 12) {
    if (dlr >= 4 && dlr <= 6) return 'S';
    else return 'H';
  }
  if (total === 11) return 'D';
  if (total === 10) {
    if (dlr === 1 ) return 'H';
    if (dlr <= 9) return 'D';
    else return 'H';
  }
  if (total === 9) {
    if (dlr >= 3 && dlr <= 6) return 'D';
    else return 'H';
  }
  return 'H';
}

var myBJ_dealerBustTable = {
  2: 35.3, 3: 37.6, 4: 40.3, 5: 42.9, 6: 42.1,
  7: 26.0, 8: 23.9, 9: 23.3, 10: 21.4, 1: 11.6
};

function myBJ_func_dealerBust(up) {
  return myBJ_dealerBustTable[myBJ_func_convertTen(up)] || 0;
}

function myBJ_func_playerBustProb(c1, c2) {
  c1 = myBJ_func_convertTen(c1);
  c2 = myBJ_func_convertTen(c2);
  var ace = myBJ_func_isAce(c1) || myBJ_func_isAce(c2);
  var total = c1 + c2;
  if (ace) {
    if (total + 10 <= 21) {
      total += 10;
    }
  }
  var need = 22 - total;
  if (need > 11) return 0;
  var probs = {1:4,2:4,3:4,4:4,5:4,6:4,7:4,8:4,9:4,10:16};
  var bust = 0;
  for (var v = need; v <= 10; v++) {
    bust += probs[v];
  }
  return (bust / 52) * 100;
}
</script>
</div></div>


<div class="p-blogParts post_content" data-partsID="55773">
<p><div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（固定 728×180） -->
<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:180px"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="1979737405"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div --></p>
</div>



<h2 class="wp-block-heading"><strong>ベーシックストラテジー</strong>の解説</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">解説</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<p>ベーシックストラテジーとは、プレイヤーとディーラーのカードの組み合わせごとに、<strong><span class="swl-marker mark_orange">統計的に最も勝率が高い行動（ヒット、スタンド、スプリット、ダブルダウン）を選ぶ戦略</span></strong>です。膨大なシミュレーションにより、バースト率や勝率などを計算して導き出された、<strong><span class="swl-inline-color has-swl-deep-01-color">数学的に最適な判断指針</span></strong>となっています。</p>



<h3 class="wp-block-heading">ハードハンド（Hard Hand）</h3>



<p>エースを含まない手札の場合、プレイヤーは手札によってはバーストの危険があるため、慎重な判断が求められます。</p>



<p class="has-border -border01">例：10 + 6 = 16、8 + 4 = 12</p>



<style>
  table.myBJ_table {
    border-collapse: collapse;
    font-size: 14px;
    margin: 12px 0;
  }
  table.myBJ_table th,
  table.myBJ_table td {
    border: 1px solid #ccc;
    padding: 6px 8px;
    text-align: center;
  }
  table.myBJ_table th {
    background-color: #e0e7ff; /* 薄い青 */
    font-weight: bold;
  }
  table.myBJ_table td.label {
    background-color: #fee2e2; /* 薄い赤 */
    font-weight: bold;
  }
  .H { background-color: #d1fae5; } /* Hit - 緑 */
  .S { background-color: #fde68a; } /* Stand - 黄 */
  .D { background-color: #bae6fd; } /* Double - 青 */
</style>

<table class="myBJ_table">
  <tr>
    <th>Player＼Dealer</th>
    <th>2</th><th>3</th><th>4</th><th>5</th><th>6</th>
    <th>7</th><th>8</th><th>9</th><th>10</th><th>A</th>
  </tr>
  <tr><td class="label">17+</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td></tr>
  <tr><td class="label">16</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">15</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">14</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">13</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">12</td><td class="H">H</td><td class="H">H</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">11</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td></tr>
  <tr><td class="label">10</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">9</td><td class="H">H</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">8以下</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
</table>



<ul class="wp-block-list is-style-index -list-under-dashed">
<li><strong>P = Split（スプリット）</strong>：2つに分けてプレイ</li>



<li><strong>S = Stand（スタンド）</strong>：これ以上カードを引かない</li>



<li><strong>H = Hit（ヒット）</strong>：カードを引く</li>



<li><strong>D = Double Down（ダブルダウン）</strong>：ベッドを倍にして1枚引く</li>
</ul>



<h3 class="wp-block-heading">ソフトハンド（Soft Hand）</h3>



<p>手札にエースを含み、かつエースを11として扱える状態です。バーストのリスクが低いため、積極的に攻める場面も多くなります。</p>



<table class="myBJ_table">
  <tr>
    <th>Player＼Dealer</th>
    <th>2</th><th>3</th><th>4</th><th>5</th><th>6</th>
    <th>7</th><th>8</th><th>9</th><th>10</th><th>A</th>
  </tr>
  <tr><td class="label">A,8〜A,10</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td></tr>
  <tr><td class="label">A,7</td><td class="S">S</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="S">S</td><td class="S">S</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">A,6</td><td class="H">H</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">A,5</td><td class="H">H</td><td class="H">H</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">A,4</td><td class="H">H</td><td class="H">H</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">A,3</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="D">D</td><td class="D">D</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">A,2</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="D">D</td><td class="D">D</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
</table>



<ul class="wp-block-list is-style-index -list-under-dashed">
<li><strong>P = Split（スプリット）</strong>：2つに分けてプレイ</li>



<li><strong>S = Stand（スタンド）</strong>：これ以上カードを引かない</li>



<li><strong>H = Hit（ヒット）</strong>：カードを引く</li>



<li><strong>D = Double Down（ダブルダウン）</strong>：ベッドを倍にして1枚引く</li>
</ul>



<h3 class="wp-block-heading">スプリット（Split）</h3>



<p>同じ数字のカードが2枚あるときに、2つの手に分けて別々にプレイできる戦略。手札やディーラーのカードによってスプリットすべきか判断します。</p>



<table class="myBJ_table">
  <tr>
    <th>Pair＼Dealer</th>
    <th>2</th><th>3</th><th>4</th><th>5</th><th>6</th>
    <th>7</th><th>8</th><th>9</th><th>10</th><th>A</th>
  </tr>
  <tr><td class="label">A,A</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td></tr>
  <tr><td class="label">10,10</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td><td class="S">S</td></tr>
  <tr><td class="label">9,9</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="S">S</td><td class="P">P</td><td class="P">P</td><td class="S">S</td><td class="S">S</td></tr>
  <tr><td class="label">8,8</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td></tr>
  <tr><td class="label">7,7</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">6,6</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">5,5</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="D">D</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">4,4</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="P">P</td><td class="P">P</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">3,3</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
  <tr><td class="label">2,2</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="P">P</td><td class="H">H</td><td class="H">H</td><td class="H">H</td><td class="H">H</td></tr>
</table>



<ul class="wp-block-list is-style-index -list-under-dashed">
<li><strong>P = Split（スプリット）</strong>：2つに分けてプレイ</li>



<li><strong>S = Stand（スタンド）</strong>：これ以上カードを引かない</li>



<li><strong>H = Hit（ヒット）</strong>：カードを引く</li>



<li><strong>D = Double Down（ダブルダウン）</strong>：ベッドを倍にして1枚引く</li>
</ul>


<div class="p-blogParts post_content" data-partsID="55773">
<p><div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（固定 728×180） -->
<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:180px"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="1979737405"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div --></p>
</div>



<h2 class="wp-block-heading">ベーシックストラテジーは必勝法ではない</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">必勝法ではない</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<p>ラックジャックにおいて、ベーシックストラテジーは「<strong>プレイヤーにとって最も不利を減らす方法</strong>」です。正しく使うことで、<strong><span class="swl-marker mark_orange">ディーラーの期待値に対するプレイヤーの損失を最小限（約0.5%以下）に抑える</span></strong>ことができます。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list is-style-index -list-under-dashed">
<li>勝率が100%になるわけではない</li>



<li>運の要素（カードの偏り）が常にある</li>



<li>長期的にはプレイヤーがやや不利</li>
</ul>
</div></div>



<p>という点で、<strong>「必ず勝てる戦法」ではありません</strong>。あくまで「<strong>賢く、損を減らすための最適な行動指針</strong>」として使われます。</p>



<h3 class="wp-block-heading">ベーシックストラテジーの期待値</h3>



<p>プレイヤーの期待値は約 99.5% です。長く続ければ、99.5%の確率に収束していきます。ベーシックストラテジーは<strong>勝ちを保証するものではありません</strong>が、最も効率よく損失を減らし、<strong><span class="swl-marker mark_orange">限りなくイーブン（50%）に近づける手段</span></strong>です。ゲームを楽しみつつ、リスクを最小限に抑えたい人には必須の戦略です。</p>



<p class="has-border -border01"><strong><span class="swl-inline-color has-swl-deep-01-color">友達同士でブラックジャックをする場合に活用してください</span></strong></p>


<div class="p-blogParts post_content" data-partsID="56213">
<h2 class="wp-block-heading">実際に遊べるシンプルゲーム一覧</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">ゲーム一覧</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-55881.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022055993-1024x576.jpg" alt="重力付き４目並べ" class="wp-image-55991" srcset="https://boonboonblog.com/wp-content/uploads/2022055993-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022055993-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022055993-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022055993.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べる重力付き4目並べゲーム・プレイ版（強いです！）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-55881.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56141.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022058697-1024x576.jpg" alt="ブロック崩しゲーム" class="wp-image-56212" srcset="https://boonboonblog.com/wp-content/uploads/2022058697-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022058697-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022058697-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022058697.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるブロック崩しゲーム（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56141.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56222.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022058698-1024x576.jpg" alt="インベーダーもどき" class="wp-image-56244" srcset="https://boonboonblog.com/wp-content/uploads/2022058698-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022058698-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022058698-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022058698.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるインベーダーもどきゲーム（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56222.html">ゲームはこちら</a></p>
</div>
</div>



<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56365.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022060372-1024x576.jpg" alt="" class="wp-image-56378" srcset="https://boonboonblog.com/wp-content/uploads/2022060372-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022060372-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022060372-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022060372.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるブラックジャックゲームと攻略法の解説です。（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56365.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56451.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg" alt="" class="wp-image-56479" srcset="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022060576-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022060576-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022060576.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べる JackPot Dice ゲームです。（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56451.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">

</div>
</div>




</div>


<div class="p-blogParts post_content" data-partsID="53518">
<p class="has-text-align-center has-border -border01 has-swl-pale-03-background-color has-background"><strong>40代・50代「会社員におすすめ」の在宅でできる副業５選</strong></p>



<p class="has-text-align-center"><strong><a href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/">40代・50代「会社員におすすめ」の在宅でできる副業５選はこちら</a></strong></p>



<figure class="wp-block-image size-full is-resized my-common-apealbar"><a href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/"><img decoding="async" width="550" height="190" src="https://boonboonblog.com/wp-content/uploads/common_click01-1.png" alt="おすすめ" class="wp-image-56308" style="aspect-ratio:2.8952725627686045;width:200px;height:auto" srcset="https://boonboonblog.com/wp-content/uploads/common_click01-1.png 550w, https://boonboonblog.com/wp-content/uploads/common_click01-1-300x104.png 300w" sizes="(max-width: 550px) 100vw, 550px" /></a></figure>


<div class="swell-block-postLink">			<div class="p-blogCard -external" data-type="type3" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">ドンドン！副業情報局</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://irojiroharaguro.com/wp-content/uploads/2022026680.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/" target="_blank" rel="noopener ">40代・50代「会社員におすすめ」の在宅でできる副業５選（初心者でもできる） | ドンドン！副業情報局</a>
						<span class="p-blogCard__excerpt">４０代・５０代の会社員、今の給料で満足して生活できていますか？さらに、老後に不安なく貯金できていますか？４０代、５０代だからこそ気が付く、不安に思う将来設計、し...</span>					</div>
				</div>
			</div>
		</div>


<p class="has-text-align-center has-border -border01 has-swl-pale-03-background-color has-background"><strong>20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選</strong></p>



<p class="has-text-align-center"><strong><a href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/">20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選はこちら</a></strong></p>



<figure class="wp-block-image size-full is-resized my-common-apealbar"><a href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/"><img decoding="async" width="550" height="190" src="https://boonboonblog.com/wp-content/uploads/common_click01-1.png" alt="おすすめ" class="wp-image-56308" style="aspect-ratio:2.8952725627686045;width:200px;height:auto" srcset="https://boonboonblog.com/wp-content/uploads/common_click01-1.png 550w, https://boonboonblog.com/wp-content/uploads/common_click01-1-300x104.png 300w" sizes="(max-width: 550px) 100vw, 550px" /></a></figure>


<div class="swell-block-postLink">			<div class="p-blogCard -external" data-type="type3" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">ドンドン！副業情報局</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://irojiroharaguro.com/wp-content/uploads/2022026650.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/" target="_blank" rel="noopener ">20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選（初心者でもできる） | ドンドン！副業情...</a>
						<span class="p-blogCard__excerpt">２０代、３０代の主婦にとって、これからの人生設計、お金は心配ごとの一つです。２０代、３０代の主婦が不安に思うお金の問題を少しでも解決するべく、初期投資が無い（ま...</span>					</div>
				</div>
			</div>
		</div>


<div style="height:24px" aria-hidden="true" class="wp-block-spacer"></div>
</div>



<div class="p-blogParts post_content" data-partsID="53487">
<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-10517.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_fukugyou1.gif" alt="この副業" class="wp-image-43432"/></a></figure>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-39965.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_school1.gif" alt="アフィリエイトスクール" class="wp-image-43429"/></a></figure>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-19279.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_notepc1.gif" alt="ノートパソコン" class="wp-image-43430"/></a></figure>
</div>
</div>
</div>



<div class="p-blogParts post_content" data-partsID="53488">
<p class="has-text-align-center has-large-font-size">ブログの作り方などについてココナラにて「支援作業」を販売しております。</p>



<p class="has-text-align-center">よかったらご利用くださいませ。</p>



<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://coconala.com/services/2968130"    ><img decoding="async" width="600" height="600" src="https://boonboonblog.com/wp-content/uploads/common_coconara_blogqa.jpg" alt="ブログ運営（質問・相談お受けします）" class="wp-image-48806" srcset="https://boonboonblog.com/wp-content/uploads/common_coconara_blogqa.jpg 600w, https://boonboonblog.com/wp-content/uploads/common_coconara_blogqa-300x300.jpg 300w, https://boonboonblog.com/wp-content/uploads/common_coconara_blogqa-150x150.jpg 150w, https://boonboonblog.com/wp-content/uploads/common_coconara_blogqa-100x100.jpg 100w" sizes="(max-width: 600px) 100vw, 600px" /></a></figure>



<div class="swell-block-button green_ -size-custom is-style-btn_shiny"><a href="https://coconala.com/services/2968130" class="swell-block-button__link"><span>詳しくはこちら</span></a></div>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://coconala.com/services/2967525"    ><img decoding="async" width="600" height="600" src="https://boonboonblog.com/wp-content/uploads/common_coconara_swellstart.jpg" alt="SWELL（ブログ開設します）" class="wp-image-48807" srcset="https://boonboonblog.com/wp-content/uploads/common_coconara_swellstart.jpg 600w, https://boonboonblog.com/wp-content/uploads/common_coconara_swellstart-300x300.jpg 300w, https://boonboonblog.com/wp-content/uploads/common_coconara_swellstart-150x150.jpg 150w, https://boonboonblog.com/wp-content/uploads/common_coconara_swellstart-100x100.jpg 100w" sizes="(max-width: 600px) 100vw, 600px" /></a></figure>



<div class="swell-block-button green_ -size-custom is-style-btn_shiny"><a href="https://coconala.com/services/2967525" class="swell-block-button__link"><span>詳しくはこちら</span></a></div>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://coconala.com/services/2943246"    ><img decoding="async" width="600" height="600" src="https://boonboonblog.com/wp-content/uploads/common_coconara_affingerstart.jpg" alt="AFFINGER（ブログ開設します）" class="wp-image-48808" srcset="https://boonboonblog.com/wp-content/uploads/common_coconara_affingerstart.jpg 600w, https://boonboonblog.com/wp-content/uploads/common_coconara_affingerstart-300x300.jpg 300w, https://boonboonblog.com/wp-content/uploads/common_coconara_affingerstart-150x150.jpg 150w, https://boonboonblog.com/wp-content/uploads/common_coconara_affingerstart-100x100.jpg 100w" sizes="(max-width: 600px) 100vw, 600px" /></a></figure>



<div class="swell-block-button green_ -size-custom is-style-btn_shiny"><a href="https://coconala.com/services/2943246" class="swell-block-button__link"><span>詳しくはこちら</span></a></div>
</div>
</div>



<div style="height:48px" aria-hidden="true" class="wp-block-spacer"></div>
</div>



<div class="p-blogParts post_content" data-partsID="53489"><div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><a href="http://boonboonblog.com/topics/web-it/wordpress"><img decoding="async" width="720" height="485" src="http://boonboonblog.com/wp-content/uploads/2022021963.png" alt="もっと WordPress のノウハウを知りたいときは" class="wp-image-36376" style="width:540px;height:364px" srcset="https://boonboonblog.com/wp-content/uploads/2022021963.png 720w, https://boonboonblog.com/wp-content/uploads/2022021963-300x202.png 300w" sizes="(max-width: 720px) 100vw, 720px" /></a></figure>
</div>


<div class="wp-block-group myAdjustGroupWidth"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="swell-block-button green_ -size-custom my-common-apealbar is-style-btn_shiny u-mb-ctrl u-mb-0" style="--the-fz:26px"><a href="http://boonboonblog.com/topics/web-it/wordpress" class="swell-block-button__link"><span>WordPress の情報、テクニック一覧はこちらをクリック！</span></a></div>
</div></div>



<div class="wp-block-group is-st-justify is-st-justify-center"><div class="wp-block-group__inner-container"><div class="wp-block-image animated backInLeft">
<figure class="aligncenter size-full is-resized"><a href="http://boonboonblog.com/topics/web-it/wordpress"><img decoding="async" width="240" height="169" src="http://boonboonblog.com/wp-content/uploads/common_click02.png" alt="クリックアイコン" class="wp-image-35546" style="width:180px;height:127px"/></a></figure>
</div></div></div>
</div>



<div class="p-blogParts post_content" data-partsID="53459">
<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-columns">
<div class="wp-block-column" style="flex-basis:33.33%">
<figure class="wp-block-image size-full"><img decoding="async" width="800" height="800" src="https://boonboonblog.com/wp-content/uploads/2022055626.png" alt="どんどん情報局" class="wp-image-55650" srcset="https://boonboonblog.com/wp-content/uploads/2022055626.png 800w, https://boonboonblog.com/wp-content/uploads/2022055626-300x300.png 300w, https://boonboonblog.com/wp-content/uploads/2022055626-150x150.png 150w, https://boonboonblog.com/wp-content/uploads/2022055626-768x768.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</div>



<div class="wp-block-column" style="flex-basis:66.66%">
<p class="has-border -border01"><strong>本サイトは「どんどん情報局」が運営しています。</strong></p>



<p><strong>著作者：Boon ☆</strong></p>



<p>どんどん情報局はメディア記事の執筆を通して世の中に有益な情報を発信することを心がけています。</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/about-us">「どんどん情報局」の紹介はこちら</a></p>
</div>
</div>
</div></div>


<p><div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（レスポンシブ） -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="9677856269"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div --></p>
</div>



<div class="p-blogParts post_content" data-partsID="53460"></div>



<div class="p-blogParts post_content" data-partsID="53458">
<div style="text-align:center">

</div>
</div>



<div class="p-blogParts post_content" data-partsID="53456">
<div class="wp-block-group is-row is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-94bc23d7 wp-block-group-is-layout-flex">
<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>広告の設置・収入について</span></div><div class="cap_box_content">
<p>当サイトは Amazonのアソシエイトとして、適格販売により収入を得ています。</p>



<p>当サイトは Google アドセンスを利用し、広告により収入を得ています。</p>



<p>当サイトは ASP が提供するサービスを利用し、広告、適格販売により収入を得ています。</p>
</div></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>



<script>
var varHtagElements = null;
var varHtagPosition = null;
var varSideBarItem = null;

window.addEventListener('load', function () {
    setTimeout(function(){fnAfterContents();}, 10);
});

function fnAfterContents() {
    // H2、H3 を全て取得する（位置を計算する）
    varHtagElements = document.querySelectorAll('h2, h3');
    var varHtagArray = Array.from(varHtagElements);
    var varHtagPosition = varHtagArray.map(item => item.getBoundingClientRect().top);
    var varHtagPositionWithScroll = varHtagPosition.map(top => Math.floor(top + window.scrollY));
	
    // サイドバーの目次のリストを取得する
    varSideBarItem = document.querySelectorAll('#sidebar .p-toc__link');
  
    if (varSideBarItem == null || varSideBarItem.length == 0) {
        // 目次が無ければ終了
        return;
    }

    // 個数を取得
    const countHtag = varHtagElements.length;
    const countSideBarItem = varSideBarItem.length;
    const iMaxLoop = countHtag > countSideBarItem ? countSideBarItem : countHtag;

    window.addEventListener('scroll', () => {
        // 計算する位置
        const currentPosition = window.scrollY + 300;

        for (let iCount = 0; iCount < iMaxLoop; iCount++) {
            // 現在位置の表示を消す
            varSideBarItem[iCount].classList.remove('currentTocPosition');
            if (iCount >= iMaxLoop - 1 ) {
                // 要素の最後は、次の要素が無いので範囲外のみ判定
                if (currentPosition >= varHtagPositionWithScroll[iCount]) {
                    varSideBarItem[iCount].classList.add('currentTocPosition');
                }
            } else {
                // 要素の途中は、範囲内かどうかを判定
                if (currentPosition >= varHtagPositionWithScroll[iCount] && currentPosition < varHtagPositionWithScroll[iCount + 1]) {
                    varSideBarItem[iCount].classList.add('currentTocPosition');
                } 
            }
        }
    });
}
</script>



<p class="has-text-align-center"><a href="https://boonboonblog.com/privacypolicy#denkitsushin">電気通信事業法改正に伴う表記</a></p>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【シンプルゲーム】実際に遊べるインベーダー（もどき）（JavaScript版）</title>
		<link>https://boonboonblog.com/entries/entry-56222.html</link>
		
		<dc:creator><![CDATA[Boon ☆《ブログ魂》]]></dc:creator>
		<pubDate>Sat, 13 Dec 2025 23:13:17 +0000</pubDate>
				<category><![CDATA[情報・遊び・ツールなど]]></category>
		<guid isPermaLink="false">https://boonboonblog.com/?p=56222</guid>

					<description><![CDATA[<p><img src="https://boonboonblog.com/wp-content/uploads/2022058698-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>ブラウザだけで今すぐ遊べるインストール不要のゲームです。PC/スマホ対応でどこでもプレイ。インベーダー（もどき）ゲームです。]]></description>
										<content:encoded><![CDATA[<p><img src="https://boonboonblog.com/wp-content/uploads/2022058698-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<div class="p-blogParts post_content" data-partsID="53455">
<p>広告：ページ内にてアフィリエイト広告を利用しています。</p>
</div>



<div class="p-blogParts post_content" data-partsID="53457"></div>



<p class="has-border -border01 has-swl-pale-03-background-color has-background"><strong>実際に遊べるインベーダー（もどき）ゲームです。</strong></p>



<style>
    .myGame3container {
        width: 360px;
        height: 380px;
        margin: auto;
        position: relative;
        overflow: hidden;
        background-color: rgba(255, 255, 255, 0.0); /* ゲームエリアの背景色 */
        background: url("https://boonboonblog.com/wp-content/uploads/myGame3BackGroundImage.jpg") no-repeat center top / cover;
        background-size: cover;
        border: 1px solid #808080;
    }
    #myGame3gameCanvas {
        width: 360px;
        height: 380px; /* 調整されたゲームエリアの高さ */
        background-color: rgba(0, 0, 0, 0.5);
    }
    .myGame3score {
        position: absolute;
        top: 10px;
        left: 10px;
        font-size: 16px;
        color: #fff;
        display : none;
    }
    .myGame3message {
        position: absolute;
        top: 160px;
        left: 50%;
        transform: translate(-50%, -50%);
        font-size: 36px;
        font-weight: bold;
        /* Opacity : 0.8; */
        color: #ff4444;
        display: none;
        white-space: nowrap;
    }
    .myGame3collision-effect {
        position: absolute;
        width: 100px;
        height: 100px;
        background-image: url("https://boonbooneverybody.com/wp-content/uploads/myGame3mineclush.gif");
        background-size: cover;
        background-repeat: no-repeat;
        transition: opacity 3s ease-in-out;
        pointer-events: none; /* マウスイベントを無視 */
        display: none;
    }
    #myGame3collisionEffect {
        position: absolute;
        width: 80px;
        height: 80px;
    }
    #myGame3startButton {
        position: absolute;
        top: 290px;
        left: 50%;
        transform: translate(-50%, -50%);
        padding: 10px 20px;
        font-size: 20px;
        background-color: red;
        color: white;
        border: none;
        cursor: pointer;
        outline: none;
        display: block;
        border-radius : 20px;
    }
    #myGame3startButton:hover {
        background-color: #880000;
    }
    #myGame3startImage {
        position: absolute;
        top: 90px;
        left: 50%;
        transform: translate(-50%, -50%);
    }
    #myGame3startDescBox {
        border : 2px solid #ffffff;
        position: absolute;
        top: 160px;
        left: 50%;
        transform: translate(-50%, -50%);
        background-color: #ffffff;
        border-radius : 20px;
        height : 160px;
        width : 200px;
    }
    #myGame3myGame3startGameTitle {
        position: absolute;
        top: 156px;
        left: 50%;
        transform: translate(-50%, -50%);
        white-space: nowrap;
        color : red;
        font-weight : bold;
    }
    #myGame3startKeyDesc2 {
        position: absolute;
        top: 201px;
        left: 50%;
        transform: translate(-50%, -50%);
        white-space: nowrap;
    }
    .myGame3textshadowWhite2 {
        text-shadow: 
        white 2px 0px,  #ffffff -2px 0px,
        white 0px -2px, #ffffff 0px 2px,
        white 2px 2px , #ffffff -2px 2px,
        white 2px -2px, #ffffff -2px -2px,
        white 1px 2px,  #ffffff -1px 2px,
        white 1px -2px, #ffffff -1px -2px,
        white 2px 1px,  #ffffff -2px 1px,
        white 2px -1px, #ffffff -2px -1px;
    }
    #myGame3InputRange {
        -webkit-appearance: none;
        width: 360px;
        height: 30px;
        margin-top : 10px;
        background-color: #808080; /* 左右同じ背景色 */
        border-radius: 5px;
        outline: none;
    }
    #myGame3InputRange::-webkit-slider-thumb {
        -webkit-appearance: none;
        appearance: none;
        width: 60px;
        height: 60px;
        background-color: #007bff; /* スライダーのつまみの色 */
        border-radius: 50%;
        cursor: pointer;
        box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
    }

.myGame3-container {
  display: flex;
  align-items: flex-start;
  gap: 40px;
  width : 100%;
  width: fit-content;   /* ← 中身の幅に合わせる */
  margin: 0 auto;       /* ← 中央寄せ */
}

/* デフォルト：画像非表示 & column */
.myGame3-side-image {
  display: none;
  width : 0px;
}
.myGame3-container {
  flex-direction: column;
}

/* 800px〜950px：画像表示 & 横並び */
@media (min-width: 800px) and (max-width: 950px) {
  .myGame3-side-image {
    display: block;
    width : 240px;
  }
  .myGame3-container {
    flex-direction: row;
  }
}

/* 1130px以上：画像表示 & 横並び */
@media (min-width: 1130px) {
  .myGame3-side-image {
    display: block;
    width : 240px;
  }
  .myGame3-container {
    flex-direction: row;
  }
}

#myGame3InputRange-container {
  margin-top : 30px;
}
</style>




<div class="myGame3-container">
  <div>
    <div class="myGame3score" id="myGame3score">スコア: 0</div>
    <div class="myGame3container">
        <canvas id="myGame3gameCanvas"></canvas>
        <div class="myGame3message myGame3textshadowWhite2" id="myGame3message"></div>
        <div id="myGame3collisionEffect" class="myGame3collision-effect"></div>
        <button id="myGame3startButton">START</button>
        <div class="myGame3startDescBox" id="myGame3startDescBox"></div>
        <div id="myGame3myGame3startGameTitle">Mini invaders</div>
        <div id="myGame3startKeyDesc2">MOUSE &#8211; Move</div>
        <div class="myGame3startImage" id="myGame3startImage"><img decoding="async" src="https://boonbooneverybody.com/wp-content/uploads/myGame3invader.png"></div>
    </div>
    <div id="myGame3InputRange-container">
        <input type="range" id="myGame3InputRange" min="0" max="100" value="50" style="width: 360px;">
    </div>
  </div>
  <!-- 右側に表示する画像 -->
  <div class="myGame3-side-image">
    <!-- <img decoding="async" src="画像URL" alt="サイド画像"> -->
    <div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（固定 240×520） -->
<ins class="adsbygoogle"
     style="display:inline-block;width:240px;height:520px"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="8196751804"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div -->
  </div>
</div>



<script>
    const myGame3canvas = document.getElementById("myGame3gameCanvas");
    myGame3canvas.width = 360;
    myGame3canvas.height = 380;
    const myGame3ctx = myGame3canvas.getContext("2d");
    const myGame3scoreDisplay = document.getElementById("myGame3score");
    const myGame3messageDisplay = document.getElementById("myGame3message");
    const myGame3collisionEffect = document.getElementById("myGame3collisionEffect");
    const myGame3playerWidth = 40; // プレイヤーの幅
    const myGame3playerHeight = 40; // プレイヤーの高さ
    const myGame3invaderWidth = 40; // インベーダーの幅
    const myGame3invaderHeight = 40; // インベーダーの高さ
    const myGame3bulletWidth = 12; // 弾の幅
    const myGame3bulletHeight = 12; // 弾の高さ
    const myGame3invadermyGame3bulletspeed = 5; // インベーダーの弾の速度
    let myGame3playerX = myGame3canvas.width / 2 - myGame3playerWidth / 2;
    let myGame3playerY = myGame3canvas.height - myGame3playerHeight - 10;
    let myGame3playerImage = new Image();
    myGame3playerImage.src = "https://boonbooneverybody.com/wp-content/uploads/myGame3mine.png"; // プレイヤー画像のパス
    let myGame3invaderImage = new Image();
    myGame3invaderImage.src = "https://boonbooneverybody.com/wp-content/uploads/myGame3invader.png"; // インベーダー画像のパス
    let myGame3invaders = [];
    let myGame3bullets = [];
    let myGame3invadermyGame3bullets = [];
    let myGame3score = 0;
    let myGame3gameInterval;
    let myGame3gameRunning = false; // ゲームの状態を示すフラグ
    let myGame3invaderDirection = 1; // 1で右、-1で左
    let myGame3isDropping = false; // インベーダーが落ちているかどうかを示すフラグ
    let myGame3dropStep = 0;
    let myGame3lastbulletTime = 0;
    const myGame3bulletInterval = 540; // 弾の間隔（ミリ秒）
    const myGame3invaderbulletInterval = 1000; // インベーダーの弾の間隔（ミリ秒）
    const myGame3bottomLimit = myGame3canvas.height; // インベーダーが到達したら Game Over
    let myGame3initFlg = true;
    let myGame3kakuritsu = 5;
      function Game3createmyinvaders(rows, cols) {
        myGame3invaders = [];
        for (let i = 0; i < rows; i++) {
            for (let j = 0; j < cols; j++) {
                myGame3invaders.push({
                    x: 10 + j * (myGame3invaderWidth + 10), // キャンバス内の位置
                    y: 10 + i * (myGame3invaderHeight + 10), // キャンバス内の位置
                    width: myGame3invaderWidth,
                    height: myGame3invaderHeight,
                    alive: true,
                    myGame3lastbulletTime: 0 // 最後に弾を発射した時間
                });
            }
        }
    }
     function myGame3drawplayer() {
        myGame3ctx.drawImage(myGame3playerImage, myGame3playerX, myGame3playerY, myGame3playerWidth, myGame3playerHeight);
    }
     function myGame3drawinvaders() {
        myGame3invaders.forEach(myGame3invader => {
            if (myGame3invader.alive) {
                myGame3ctx.drawImage(myGame3invaderImage, myGame3invader.x, myGame3invader.y, myGame3invader.width, myGame3invader.height);
            }
        });
    }
     function myGame3drawbullets() {
        myGame3ctx.fillStyle = "#ffff33";
        myGame3bullets.forEach(myGame3bullet => {
            myGame3ctx.beginPath();
            myGame3ctx.arc(myGame3bullet.x + myGame3bulletWidth / 2, myGame3bullet.y + myGame3bulletHeight / 2, myGame3bulletWidth / 2, 0, Math.PI * 2);
            myGame3ctx.fill();
        });
    }
     function myGame3drawinvadermyGame3bullets() {
        myGame3ctx.fillStyle = "#33ffff";
        myGame3invadermyGame3bullets.forEach(myGame3bullet => {
            myGame3ctx.beginPath();
            myGame3ctx.arc(myGame3bullet.x + myGame3bulletWidth / 2, myGame3bullet.y + myGame3bulletHeight / 2, myGame3bulletWidth / 2, 0, Math.PI * 2);
            myGame3ctx.fill();
        });
    }
     function myGame3movebullets() {
        myGame3bullets.forEach(myGame3bullet => {
            myGame3bullet.y -= 5;
        });
        myGame3bullets = myGame3bullets.filter(myGame3bullet => myGame3bullet.y > 0);
    }
     function myGame3moveinvadermyGame3bullets() {
        myGame3invadermyGame3bullets.forEach(myGame3bullet => {
            myGame3bullet.y += myGame3invadermyGame3bulletspeed;
        });
        myGame3invadermyGame3bullets = myGame3invadermyGame3bullets.filter(myGame3bullet => myGame3bullet.y < myGame3canvas.height);
    }
     function myGame3moveinvaders() {
        if (!myGame3isDropping) {
            let changeDirection = false;
            myGame3invaders.forEach(myGame3invader => {
                myGame3invader.x += myGame3invaderDirection * 1; // インベーダーを横方向に移動
    
                // キャンバスの端との衝突をチェック（10pxのマージン）
                if (myGame3invader.x + myGame3invader.width >= myGame3canvas.width - 10 || myGame3invader.x <= 10) {
                    changeDirection = true;
                }
    
                // 生きているインベーダーが弾を発射する
                if ( Math.random() * 1000 < myGame3kakuritsu ) {
                  if ( myGame3invader.alive) {
                    const currentTime = Date.now();
                    if (currentTime - myGame3invader.myGame3lastbulletTime > myGame3invaderbulletInterval) {
                       myGame3invadermyGame3bullets.push({
                          x: myGame3invader.x + myGame3invader.width / 2 - myGame3bulletWidth / 2,
                          y: myGame3invader.y + myGame3invader.height,
                          width: myGame3bulletWidth,
                          height: myGame3bulletHeight
                      });
                      myGame3invader.myGame3lastbulletTime = currentTime;
                    }
                  }
                }
            });
    
            if (changeDirection) {
                myGame3isDropping = true;
                myGame3dropStep = 20; // 落下する量
            }
        }
         if (myGame3isDropping) {
            myGame3invaders.forEach(myGame3invader => {
                myGame3invader.y += 1; // スムーズな落下
            });
            myGame3dropStep -= 1;
            if (myGame3dropStep <= 0) {
                myGame3isDropping = false;
                myGame3invaderDirection *= -1; // 落下後に方向を変える
            }
        }
         // 生きているインベーダーが底に達したかどうかをチェック

for (let i = 0; i < myGame3invaders.length; i++) {
    const myGame3invader = myGame3invaders[i];

    if (!myGame3invader.alive) continue;

    if (myGame3invader.y + myGame3invader.height >= myGame3bottomLimit) {
        myGame3endGame("Game Over", false);
        break;
    }
}

    }
     function myGame3checkCollision() {
        // プレイヤーとインベーダーの衝突をチェック
        myGame3invaders.forEach(myGame3invader => {

if (myGame3invader.alive) {
    if (myGame3playerX < myGame3invader.x + myGame3invader.width) {
        if (myGame3playerX + myGame3playerWidth > myGame3invader.x) {
            if (myGame3playerY < myGame3invader.y + myGame3invader.height) {
                if (myGame3playerY + myGame3playerHeight > myGame3invader.y) {
                    myGame3endGame("Game Over", false);
                }
            }
        }
    }
}

        });
         // プレイヤーとインベーダーの弾の衝突をチェック
        myGame3invadermyGame3bullets.forEach(myGame3bullet => {

if (myGame3bullet.x < myGame3playerX + myGame3playerWidth) {
    if (myGame3bullet.x + myGame3bulletWidth > myGame3playerX) {
        if (myGame3bullet.y < myGame3playerY + myGame3playerHeight) {
            if (myGame3bullet.y + myGame3bulletHeight > myGame3playerY) {
                myGame3endGame("Game Over", false);
            }
        }
    }
}

        });
         // プレイヤーの弾と生きているインベーダーの衝突をチェック
        myGame3bullets.forEach(myGame3bullet => {
            myGame3invaders.forEach(myGame3invader => {
                if (myGame3invader.alive) { // 生きているインベーダーのみを対象とする

if (myGame3bullet.x < myGame3invader.x + myGame3invader.width) {
    if (myGame3bullet.x + myGame3bulletWidth > myGame3invader.x) {
        if (myGame3bullet.y < myGame3invader.y + myGame3invader.height) {
            if (myGame3bullet.y + myGame3bulletHeight > myGame3invader.y) {

                myGame3bullet.y = -10;
                myGame3invader.alive = false;
                myGame3score += 10;
                myGame3scoreDisplay.textContent = "スコア: " + myGame3score;

            }
        }
    }
}

                }
            });
        });
         // すべてのインベーダーが倒されたかチェック
        if (myGame3invaders.every(myGame3invader => !myGame3invader.alive)) {
            myGame3ctx.clearRect(0, 0, myGame3canvas.width, myGame3canvas.height);
            myGame3drawplayer();
            myGame3drawinvaders();
            myGame3endGame("クリア", true);
        }
    }
     function myGame3updateGame() {
        if (!myGame3gameRunning) return;
         myGame3ctx.clearRect(0, 0, myGame3canvas.width, myGame3canvas.height);
        myGame3drawplayer();
        myGame3drawinvaders();
        myGame3drawbullets();
        myGame3drawinvadermyGame3bullets();
        myGame3movebullets();
        myGame3moveinvadermyGame3bullets();
        myGame3moveinvaders();
        myGame3checkCollision();
           // 弾を自動発射する
        myGame3ShootTama();
  }
     function myGame3startGame() {
        Game3createmyinvaders(3, 6); // 調整された行数と列数
        myGame3score = 0;
        myGame3invaderDirection = 1;
        myGame3isDropping = false; // インベーダーの落下をリセット
        myGame3dropStep = 0;
        myGame3messageDisplay.style.display = "none";
        myGame3collisionEffect.style.display = "none"; // 衝突エフェクトを非表示にする
        myGame3scoreDisplay.textContent = "スコア: " + myGame3score;
        myGame3bullets = []; // プレイヤーの弾を初期化する
        myGame3invadermyGame3bullets = []; // インベーダーの弾を初期化する
         if (!myGame3initFlg) {
            myGame3gameRunning = true;
            myGame3gameInterval = setInterval(myGame3updateGame, 20);
            myGame3startButton.style.display = "none"; // スタートボタンを非表示にする
             const myGame3startImage = document.getElementById("myGame3startImage");
            const myGame3startDescBox = document.getElementById("myGame3startDescBox");
            const myGame3myGame3startGameTitle = document.getElementById("myGame3myGame3startGameTitle");
            const myGame3startKeyDesc2 = document.getElementById("myGame3startKeyDesc2");
             myGame3startImage.style.display = "none";
            myGame3startDescBox.style.display = "none";
            myGame3myGame3startGameTitle.style.display = "none";
            myGame3startKeyDesc2.style.display = "none";
             myGame3startButton.style.top = "230px";
            /* myGame3canvas.style.opacity = "1.0"; */
        } else {
            myGame3initFlg = false;
        }
    }
     function myGame3endGame(myGame3message, win) {
        clearInterval(myGame3gameInterval);
        myGame3gameRunning = false;
        myGame3messageDisplay.textContent = myGame3message;
        myGame3messageDisplay.style.display = "block";
        /* myGame3canvas.style.opacity = "0.1"; */
         if (!win) {
            // 衝突後のエフェクト用のdivを取得
            const myGame3collisionEffect = document.getElementById("myGame3collisionEffect");
             // プレイヤー画像を消す
            myGame3ctx.clearRect(myGame3playerX, myGame3playerY, myGame3playerWidth, myGame3playerHeight);
            myGame3drawinvaders();
             // divをプレイヤーの中心に配置する
            let myGame3playerCollisionX = myGame3playerX - 20;
            let myGame3playerCollisionY = myGame3playerY - 20;
            myGame3collisionEffect.style.left = myGame3playerCollisionX + "px";
            myGame3collisionEffect.style.top = myGame3playerCollisionY + "px";
             // divを表示してフェードアウトアニメーションを開始する
            myGame3collisionEffect.style.display = "block";
            setTimeout(() => {
                myGame3collisionEffect.style.opacity = "0";
            }, 3000);
             // 3秒後にdivを非表示にする
            setTimeout(() => {
                myGame3collisionEffect.style.display = "none";
                myGame3collisionEffect.style.opacity = "1"; // フェードアウトアニメーションのために元に戻す
            }, 3000);
        }
         // ゲーム終了後、スタートボタンを表示する
        myGame3startButton.style.display = "block";
    }
     // 弾を自動発射する
    function myGame3ShootTama() {
        if (myGame3gameRunning) {
            const currentTime = Date.now();
            if (currentTime - myGame3lastbulletTime > myGame3bulletInterval) {
                myGame3bullets.push({
                    x: myGame3playerX + myGame3playerWidth / 2 - myGame3bulletWidth / 2,
                    y: myGame3playerY, // プレイヤーの現在位置に弾を設置
                    width: myGame3bulletWidth,
                    height: myGame3bulletHeight
                });
                myGame3lastbulletTime = currentTime;
            }
        }
    };
     // プレイヤーの操作にマウス移動を使用
    myGame3canvas.addEventListener("mousemove", event => {
        const canvasRect = myGame3canvas.getBoundingClientRect();
        const mouseX = event.clientX - canvasRect.left;
        //myGame3playerX = Math.max(0, Math.min(myGame3canvas.width - myGame3playerWidth, mouseX - myGame3playerWidth / 2));
         // mouseX を 0～100 の範囲に変換してスライダーの値を設定
        const inputValue = (mouseX / myGame3canvas.width) * 100;
        document.getElementById("myGame3InputRange").value = inputValue;
         // プレイヤー移動
        myGame3PlayerPosition();
    });
     // スタートボタンをクリックしたときの処理
    const myGame3startButton = document.getElementById("myGame3startButton");
    myGame3startButton.addEventListener("click", () => {
        if (!myGame3gameRunning) {
            myGame3startGame();
        }
    });
     // レンジを操作
    document.getElementById("myGame3InputRange").addEventListener("input", function() {
        myGame3PlayerPosition();
    });
     // プレイヤーの位置を変更
    function myGame3PlayerPosition() {
        const inputValue = parseInt(document.getElementById("myGame3InputRange").value, 10);
        const canvasRect = myGame3canvas.getBoundingClientRect();
        // inputValue を 0～100 の範囲からキャンバスの幅に基づくピクセル値に変換
        const positionX = (inputValue / 100) * (myGame3canvas.width - myGame3playerWidth);
        // プレイヤーの位置を設定
        myGame3playerX = Math.max(0, Math.min(myGame3canvas.width - myGame3playerWidth, positionX));
    };
     // ゲーム開始
    myGame3startGame();
</script>



<div class="p-blogParts post_content" data-partsID="55773">
<p><div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（固定 728×180） -->
<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:180px"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="1979737405"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div --></p>
</div>



<h2 class="wp-block-heading">インベーダー（もどき）ゲームの遊び方</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">ゲームの遊び方</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<ul class="wp-block-list is-style-index -list-under-dashed">
<li>画面下の自機（プレイヤー）を操作して、上から迫ってくるインベーダーを倒すゲームです。</li>



<li><strong>マウス操作 or 下のスライダー</strong>で、自機を左右に移動できます。</li>



<li>自機は<strong>自動で弾を発射</strong>します（操作は不要です）。</li>



<li>弾がインベーダーに当たると、インベーダーを撃破できます。</li>



<li>インベーダーはランダムで<strong>弾を撃ってきます</strong>。</li>



<li>インベーダーに自機が直接ぶつかると <strong>ゲームオーバー</strong> です。</li>



<li>インベーダーの弾に自機が当たると <strong>ゲームオーバー</strong> です。</li>



<li>インベーダーが画面下まで到達すると <strong>ゲームオーバー</strong> です。</li>



<li>すべてのインベーダーを倒すと <strong>クリア</strong> になります。</li>
</ul>


<div class="p-blogParts post_content" data-partsID="56213">
<h2 class="wp-block-heading">実際に遊べるシンプルゲーム一覧</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">ゲーム一覧</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-55881.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022055993-1024x576.jpg" alt="重力付き４目並べ" class="wp-image-55991" srcset="https://boonboonblog.com/wp-content/uploads/2022055993-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022055993-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022055993-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022055993.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べる重力付き4目並べゲーム・プレイ版（強いです！）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-55881.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56141.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022058697-1024x576.jpg" alt="ブロック崩しゲーム" class="wp-image-56212" srcset="https://boonboonblog.com/wp-content/uploads/2022058697-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022058697-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022058697-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022058697.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるブロック崩しゲーム（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56141.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56222.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022058698-1024x576.jpg" alt="インベーダーもどき" class="wp-image-56244" srcset="https://boonboonblog.com/wp-content/uploads/2022058698-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022058698-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022058698-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022058698.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるインベーダーもどきゲーム（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56222.html">ゲームはこちら</a></p>
</div>
</div>



<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56365.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022060372-1024x576.jpg" alt="" class="wp-image-56378" srcset="https://boonboonblog.com/wp-content/uploads/2022060372-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022060372-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022060372-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022060372.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるブラックジャックゲームと攻略法の解説です。（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56365.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56451.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg" alt="" class="wp-image-56479" srcset="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022060576-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022060576-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022060576.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べる JackPot Dice ゲームです。（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56451.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">

</div>
</div>




</div>


<div class="p-blogParts post_content" data-partsID="53518">
<p class="has-text-align-center has-border -border01 has-swl-pale-03-background-color has-background"><strong>40代・50代「会社員におすすめ」の在宅でできる副業５選</strong></p>



<p class="has-text-align-center"><strong><a href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/">40代・50代「会社員におすすめ」の在宅でできる副業５選はこちら</a></strong></p>



<figure class="wp-block-image size-full is-resized my-common-apealbar"><a href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/"><img decoding="async" width="550" height="190" src="https://boonboonblog.com/wp-content/uploads/common_click01-1.png" alt="おすすめ" class="wp-image-56308" style="aspect-ratio:2.8952725627686045;width:200px;height:auto" srcset="https://boonboonblog.com/wp-content/uploads/common_click01-1.png 550w, https://boonboonblog.com/wp-content/uploads/common_click01-1-300x104.png 300w" sizes="(max-width: 550px) 100vw, 550px" /></a></figure>


<div class="swell-block-postLink">			<div class="p-blogCard -external" data-type="type3" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">ドンドン！副業情報局</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://irojiroharaguro.com/wp-content/uploads/2022026680.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/" target="_blank" rel="noopener ">40代・50代「会社員におすすめ」の在宅でできる副業５選（初心者でもできる） | ドンドン！副業情報局</a>
						<span class="p-blogCard__excerpt">４０代・５０代の会社員、今の給料で満足して生活できていますか？さらに、老後に不安なく貯金できていますか？４０代、５０代だからこそ気が付く、不安に思う将来設計、し...</span>					</div>
				</div>
			</div>
		</div>


<p class="has-text-align-center has-border -border01 has-swl-pale-03-background-color has-background"><strong>20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選</strong></p>



<p class="has-text-align-center"><strong><a href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/">20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選はこちら</a></strong></p>



<figure class="wp-block-image size-full is-resized my-common-apealbar"><a href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/"><img decoding="async" width="550" height="190" src="https://boonboonblog.com/wp-content/uploads/common_click01-1.png" alt="おすすめ" class="wp-image-56308" style="aspect-ratio:2.8952725627686045;width:200px;height:auto" srcset="https://boonboonblog.com/wp-content/uploads/common_click01-1.png 550w, https://boonboonblog.com/wp-content/uploads/common_click01-1-300x104.png 300w" sizes="(max-width: 550px) 100vw, 550px" /></a></figure>


<div class="swell-block-postLink">			<div class="p-blogCard -external" data-type="type3" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">ドンドン！副業情報局</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://irojiroharaguro.com/wp-content/uploads/2022026650.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/" target="_blank" rel="noopener ">20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選（初心者でもできる） | ドンドン！副業情...</a>
						<span class="p-blogCard__excerpt">２０代、３０代の主婦にとって、これからの人生設計、お金は心配ごとの一つです。２０代、３０代の主婦が不安に思うお金の問題を少しでも解決するべく、初期投資が無い（ま...</span>					</div>
				</div>
			</div>
		</div>


<div style="height:24px" aria-hidden="true" class="wp-block-spacer"></div>
</div>



<div class="p-blogParts post_content" data-partsID="53487">
<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-10517.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_fukugyou1.gif" alt="この副業" class="wp-image-43432"/></a></figure>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-39965.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_school1.gif" alt="アフィリエイトスクール" class="wp-image-43429"/></a></figure>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-19279.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_notepc1.gif" alt="ノートパソコン" class="wp-image-43430"/></a></figure>
</div>
</div>
</div>



<div class="p-blogParts post_content" data-partsID="53459">
<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-columns">
<div class="wp-block-column" style="flex-basis:33.33%">
<figure class="wp-block-image size-full"><img decoding="async" width="800" height="800" src="https://boonboonblog.com/wp-content/uploads/2022055626.png" alt="どんどん情報局" class="wp-image-55650" srcset="https://boonboonblog.com/wp-content/uploads/2022055626.png 800w, https://boonboonblog.com/wp-content/uploads/2022055626-300x300.png 300w, https://boonboonblog.com/wp-content/uploads/2022055626-150x150.png 150w, https://boonboonblog.com/wp-content/uploads/2022055626-768x768.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</div>



<div class="wp-block-column" style="flex-basis:66.66%">
<p class="has-border -border01"><strong>本サイトは「どんどん情報局」が運営しています。</strong></p>



<p><strong>著作者：Boon ☆</strong></p>



<p>どんどん情報局はメディア記事の執筆を通して世の中に有益な情報を発信することを心がけています。</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/about-us">「どんどん情報局」の紹介はこちら</a></p>
</div>
</div>
</div></div>


<p><div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（レスポンシブ） -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="9677856269"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div --></p>
</div>



<div class="p-blogParts post_content" data-partsID="53460"></div>



<div class="p-blogParts post_content" data-partsID="53458">
<div style="text-align:center">

</div>
</div>



<div class="p-blogParts post_content" data-partsID="53456">
<div class="wp-block-group is-row is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-94bc23d7 wp-block-group-is-layout-flex">
<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>広告の設置・収入について</span></div><div class="cap_box_content">
<p>当サイトは Amazonのアソシエイトとして、適格販売により収入を得ています。</p>



<p>当サイトは Google アドセンスを利用し、広告により収入を得ています。</p>



<p>当サイトは ASP が提供するサービスを利用し、広告、適格販売により収入を得ています。</p>
</div></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>



<script>
var varHtagElements = null;
var varHtagPosition = null;
var varSideBarItem = null;

window.addEventListener('load', function () {
    setTimeout(function(){fnAfterContents();}, 10);
});

function fnAfterContents() {
    // H2、H3 を全て取得する（位置を計算する）
    varHtagElements = document.querySelectorAll('h2, h3');
    var varHtagArray = Array.from(varHtagElements);
    var varHtagPosition = varHtagArray.map(item => item.getBoundingClientRect().top);
    var varHtagPositionWithScroll = varHtagPosition.map(top => Math.floor(top + window.scrollY));
	
    // サイドバーの目次のリストを取得する
    varSideBarItem = document.querySelectorAll('#sidebar .p-toc__link');
  
    if (varSideBarItem == null || varSideBarItem.length == 0) {
        // 目次が無ければ終了
        return;
    }

    // 個数を取得
    const countHtag = varHtagElements.length;
    const countSideBarItem = varSideBarItem.length;
    const iMaxLoop = countHtag > countSideBarItem ? countSideBarItem : countHtag;

    window.addEventListener('scroll', () => {
        // 計算する位置
        const currentPosition = window.scrollY + 300;

        for (let iCount = 0; iCount < iMaxLoop; iCount++) {
            // 現在位置の表示を消す
            varSideBarItem[iCount].classList.remove('currentTocPosition');
            if (iCount >= iMaxLoop - 1 ) {
                // 要素の最後は、次の要素が無いので範囲外のみ判定
                if (currentPosition >= varHtagPositionWithScroll[iCount]) {
                    varSideBarItem[iCount].classList.add('currentTocPosition');
                }
            } else {
                // 要素の途中は、範囲内かどうかを判定
                if (currentPosition >= varHtagPositionWithScroll[iCount] && currentPosition < varHtagPositionWithScroll[iCount + 1]) {
                    varSideBarItem[iCount].classList.add('currentTocPosition');
                } 
            }
        }
    });
}
</script>



<p class="has-text-align-center"><a href="https://boonboonblog.com/privacypolicy#denkitsushin">電気通信事業法改正に伴う表記</a></p>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【シンプルゲーム】実際に遊べるブロック崩し（JavaScript版）</title>
		<link>https://boonboonblog.com/entries/entry-56141.html</link>
		
		<dc:creator><![CDATA[Boon ☆《ブログ魂》]]></dc:creator>
		<pubDate>Sat, 13 Dec 2025 14:36:50 +0000</pubDate>
				<category><![CDATA[情報・遊び・ツールなど]]></category>
		<guid isPermaLink="false">https://boonboonblog.com/?p=56141</guid>

					<description><![CDATA[<p><img src="https://boonboonblog.com/wp-content/uploads/2022058697-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>ブラウザだけで今すぐ遊べるインストール不要のゲームです。PC/スマホ対応でどこでもプレイ。ブロック崩しゲームです。]]></description>
										<content:encoded><![CDATA[<p><img src="https://boonboonblog.com/wp-content/uploads/2022058697-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<div class="p-blogParts post_content" data-partsID="53455">
<p>広告：ページ内にてアフィリエイト広告を利用しています。</p>
</div>



<div class="p-blogParts post_content" data-partsID="53457"></div>



<p class="has-border -border01 has-swl-pale-03-background-color has-background"><strong>実際に遊べるブロック崩しゲームです。</strong></p>



<style>
    #myGame2gameArea {
      width: 360px;
      width: 100%;
      height: 380px;
      /* margin: auto; */
      position: relative;
      overflow: hidden;
      background-color: rgba(255, 255, 255, 0.0); /* ゲームエリアの背景色 */
      background-size: cover;
      border: 1px solid #808080;
    }
    #myGame2myCanvas {
      display: block;
      margin: auto;
      background-color: rgba(255, 255, 255, 0.5);
    }
    #myGame2startButton {
      position: absolute;
      top: 55%;
      left: 50%;
      transform: translate(-50%, -50%);
      background-color: #f44336;
      color: white;
      border: none;
      padding: 15px 30px;
      font-size: 16px;
      cursor: pointer;
      border-radius: 50%;
      transition: background-color 0.3s;
      width: 128px;
      border: 2px solid #f0f0f0;
    }
    #myGame2startButton:hover {
      background-color: #d32f2f;
    }
    #myGame2gameClearMessage {
      position: absolute;
      top: 70%;
      left: 50%;
      transform: translate(-50%, -50%);
      font-size: 44px;
      font-weight: bold;
      display: none;
      color: #808080;
      width : 200px;
      text-align:center;
    }
    #myGame2InputRange-container {
      margin-top : 30px;
    }
    #myGame2InputRange {
      -webkit-appearance: none;
      width: 360px;
      height: 30px;
      /* margin-top : 60px; */
      background-color: #808080; /* 左右同じ背景色 */
      border-radius: 5px;
      outline: none;
    }
    #myGame2InputRange::-webkit-slider-thumb {
      -webkit-appearance: none;
      appearance: none;
      width: 60px;
      height: 60px;
      background-color: #7030A0; /* スライダーのつまみの色 */
      border-radius: 50%;
      cursor: pointer;
      box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
    }

.myGame2-container {
  display: flex;
  align-items: flex-start;
  gap: 40px;
  width : 100%;
  width: fit-content;   /* ← 中身の幅に合わせる */
  margin: 0 auto;       /* ← 中央寄せ */
}

/* デフォルト：画像非表示 & column */
.myGame2-side-image {
  display: none;
  width : 0px;
}
.myGame2-container {
  flex-direction: column;
}

/* 800px〜950px：画像表示 & 横並び */
@media (min-width: 800px) and (max-width: 950px) {
  .myGame2-side-image {
    display: block;
    width : 240px;
  }
  .myGame2-container {
    flex-direction: row;
  }
}

/* 1130px以上：画像表示 & 横並び */
@media (min-width: 1130px) {
  .myGame2-side-image {
    display: block;
    width : 240px;
  }
  .myGame2-container {
    flex-direction: row;
  }
}
</style>



<div class="myGame2-container">
  <div>
    <div id="myGame2gameArea">
      <canvas id="myGame2myCanvas" width="360" height="380"></canvas>
      <button id="myGame2startButton">スタート</button>
      <div id="myGame2gameClearMessage">クリア</div>
      <div id="myGame2gameClearMessage">失敗</div>
    </div>
    <!-- <div style="text-align:center"> -->
    <div id="myGame2InputRange-container">
      <input type="range" id="myGame2InputRange" min="0" max="100" value="50" style="width: 360px;">
    </div>
  </div>
  <!-- 右側に表示する画像 -->
  <div class="myGame2-side-image">
    <!-- <img decoding="async" src="画像URL" alt="サイド画像"> -->
    <div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（固定 240×520） -->
<ins class="adsbygoogle"
     style="display:inline-block;width:240px;height:520px"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="8196751804"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div -->
  </div>
</div>



<script>
    const myGame2canvas = document.getElementById("myGame2myCanvas");
    const myGame2ctx = myGame2canvas.getContext("2d");
    const myGame2startButton = document.getElementById("myGame2startButton");
    const myGame2gameClearMessage = document.getElementById("myGame2gameClearMessage");
    let myGame2animationId;

    let myGame2ballRadius = 10;
    let myGame2x = myGame2canvas.width / 2;
    let myGame2y = myGame2canvas.height - 30;
    let myGame2dx = 5; // ボールの初期速度X軸方向
    let myGame2dy = -5; // ボールの初期速度Y軸方向

const isMobile = /iPhone|Android/.test(navigator.userAgent);
let sumahodattara = isMobile ? 0.6 : 1.0;

    let myGame2paddleHeight = 20; // パドルの高さを2倍に変更
    let myGame2paddleWidth = 75; // パドルの幅は変更なし
    let myGame2paddleX = (myGame2canvas.width - myGame2paddleWidth) / 2;
    let myGame2ballMoving = false;
    let myGame2initFlg = true;

    let myGame2brickRowCount = 6;
    let myGame2brickColumnCount = 6;
    let myGame2brickWidth = 50;
    let myGame2brickHeight = 20;
    let myGame2brickPadding = 2; // ブロックとブロックの隙間
    let myGame2brickOffsetTop = 30;
    let myGame2brickOffsetLeft = 24;
    let myGame2bricks = [];

    // 背景画像のURL配列
    const myGame2backgroundImages = ["myGame2Image01.jpg", "myGame2Image02.jpg", "myGame2Image03.jpg", "myGame2Image04.jpg"];

    // ランダムな背景画像のURLを取得する関数
    function myGame2getRandomImage() {
      return myGame2backgroundImages[Math.floor(Math.random() * myGame2backgroundImages.length)];
    }

    // ランダムな背景画像をmyGame2gameAreaに設定する関数
    function myGame2setRandomBackground() {
      const myGame2randomImage = myGame2getRandomImage();
      document.getElementById("myGame2gameArea").style.background = "url(https://boonboonblog.com/wp-content/uploads/" + myGame2randomImage + ") no-repeat center center";
      document.getElementById("myGame2gameArea").style.backgroundSize = "cover";
    }

    // 初期設定：ランダムな背景画像を設定する
    myGame2setRandomBackground();

    function myGame2initBricks() {
      myGame2bricks = [];
      for (let c = 0; c < myGame2brickColumnCount; c++) {
        myGame2bricks[c] = [];
        for (let r = 0; r < myGame2brickRowCount; r++) {
          let myGame2brickX = c * (myGame2brickWidth + myGame2brickPadding) + myGame2brickOffsetLeft;
          let myGame2brickY = r * (myGame2brickHeight + myGame2brickPadding) + myGame2brickOffsetTop;
          myGame2bricks[c][r] = { x: myGame2brickX, y: myGame2brickY, status: 1 };
        }
      }
    }

    function myGame2drawBricks() {
      let myGame2allBricksCleared = true; // 全てのブロックが消えたかどうかをチェックするフラグ
      for (let c = 0; c < myGame2brickColumnCount; c++) {
        for (let r = 0; r < myGame2brickRowCount; r++) {
          if (myGame2bricks[c][r].status === 1) {
            myGame2allBricksCleared = false; // まだ残っているブロックがある場合、フラグをfalseにする
            let myGame2brickX = (c * (myGame2brickWidth + myGame2brickPadding)) + myGame2brickOffsetLeft;
            let myGame2brickY = (r * (myGame2brickHeight + myGame2brickPadding)) + myGame2brickOffsetTop;
            myGame2bricks[c][r].x = myGame2brickX;
            myGame2bricks[c][r].y = myGame2brickY;

            // フラットなブロックを描画し、内側に1pxの白い枠を追加
            myGame2ctx.beginPath();
            myGame2ctx.rect(myGame2brickX, myGame2brickY, myGame2brickWidth, myGame2brickHeight);
            myGame2ctx.fillStyle = "#0095DD";
            myGame2ctx.fill();
            myGame2ctx.closePath();

            myGame2ctx.beginPath();
            myGame2ctx.rect(myGame2brickX + 1, myGame2brickY + 1, myGame2brickWidth - 2, myGame2brickHeight - 2);
            myGame2ctx.fillStyle = "#FFFFFF";
            myGame2ctx.fill();
            myGame2ctx.closePath();

            myGame2ctx.beginPath();
            myGame2ctx.rect(myGame2brickX + 2, myGame2brickY + 2, myGame2brickWidth - 4, myGame2brickHeight - 4);
            myGame2ctx.fillStyle = "#0095DD";
            myGame2ctx.fill();
            myGame2ctx.closePath();
          }
        }
      }
      if (myGame2allBricksCleared) {
        myGame2gameClearMessage.innerHTML = "クリア";
        myGame2gameClear(); // 全てのブロックが消えたらゲームクリア処理を呼ぶ
      }
    }

    function myGame2drawBall() {
      myGame2ctx.beginPath();
      myGame2ctx.arc(myGame2x, myGame2y, myGame2ballRadius, 0, Math.PI * 2);
      myGame2ctx.fillStyle = "#0095DD";
      myGame2ctx.fill();
      myGame2ctx.strokeStyle = "#c0c0c0";
      myGame2ctx.lineWidth = 1;
      myGame2ctx.stroke();
      myGame2ctx.closePath();
    }

    function myGame2drawPaddle() {
      // パドルの描画
      myGame2ctx.beginPath();
      myGame2ctx.rect(myGame2paddleX + 10, myGame2canvas.height - myGame2paddleHeight, myGame2paddleWidth - 20, myGame2paddleHeight);
      myGame2ctx.fillStyle = "#0095DD"; // 色を青色に設定
      myGame2ctx.fill();
      myGame2ctx.closePath();
    
      // 左端の半円（＜の向き）
      myGame2ctx.beginPath();
      myGame2ctx.arc(myGame2paddleX + myGame2paddleHeight / 2, myGame2canvas.height - myGame2paddleHeight + myGame2paddleHeight / 2, myGame2paddleHeight / 2, Math.PI * 1.5, Math.PI * 0.5, true);
      myGame2ctx.fillStyle = "#0000ff";
      myGame2ctx.fill();
      myGame2ctx.closePath();
    
      // 右端の半円（＞の向き）
      myGame2ctx.beginPath();
      myGame2ctx.arc(myGame2paddleX + myGame2paddleWidth - myGame2paddleHeight / 2, myGame2canvas.height - myGame2paddleHeight + myGame2paddleHeight / 2, myGame2paddleHeight / 2, Math.PI * 0.5, Math.PI * 1.5, true);
      myGame2ctx.fillStyle = "#0000ff";
      myGame2ctx.fill();
      myGame2ctx.closePath();
    }

    function myGame2collisionDetection() {
      for (let c = 0; c < myGame2brickColumnCount; c++) {
        for (let r = 0; r < myGame2brickRowCount; r++) {
          let b = myGame2bricks[c][r];
          if (b.status === 1) {

if (myGame2x > b.x) {
  if (myGame2x < b.x + myGame2brickWidth) {
    if (myGame2y > b.y) {
      if (myGame2y < b.y + myGame2brickHeight) {
        myGame2dy = -myGame2dy;
        b.status = 0;
      }
    }
  }
}
          }
        }
      }
    }

    function myGame2gameClear() {
      myGame2ballMoving = false;
      myGame2gameClearMessage.style.display = "block";
      myGame2startButton.style.display = "inline-block";

      cancelAnimationFrame(myGame2animationId); // アニメーションを停止する
    }

    function myGame2draw() {
      myGame2ctx.clearRect(0, 0, myGame2canvas.width, myGame2canvas.height);
      myGame2drawBricks();
      myGame2drawBall();
      myGame2drawPaddle();
      myGame2collisionDetection();

      if (myGame2x + myGame2dx > myGame2canvas.width - myGame2ballRadius || myGame2x + myGame2dx < myGame2ballRadius) {
        myGame2dx = -myGame2dx;
      }
      if (myGame2y + myGame2dy < myGame2ballRadius) {
        myGame2dy = -myGame2dy;
      } else if (myGame2y + myGame2dy >= myGame2canvas.height) {
        myGame2gameClearMessage.innerHTML = "失敗";
        myGame2gameClear();
      } else if (myGame2y + myGame2dy > myGame2canvas.height - myGame2ballRadius - 15) {

if (myGame2x + myGame2ballRadius > myGame2paddleX) {
  if (myGame2x - myGame2ballRadius < myGame2paddleX + myGame2paddleWidth) {
    myGame2dy = -myGame2dy;
  }
}

        // パドルの左右の条件を追加
if (myGame2x - myGame2ballRadius < myGame2paddleX + 15) {
  if (myGame2x + myGame2ballRadius > myGame2paddleX) {
    myGame2dx = -5 * sumahodattara;
    myGame2dy = -(Math.floor(Math.random() * 5) + 3) * sumahodattara;
  }
}

        // パドルの左右の条件を追加
if (myGame2x + myGame2ballRadius > myGame2paddleX + myGame2paddleWidth - 15) {
  if (myGame2x - myGame2ballRadius < myGame2paddleX + myGame2paddleWidth) {
    myGame2dx = 5 * sumahodattara;
    myGame2dy = -(Math.floor(Math.random() * 5) + 3) * sumahodattara;
  }
}

      }

      if (myGame2ballMoving) {
        myGame2x += myGame2dx;
        myGame2y += myGame2dy;
      }

      if (!myGame2initFlg) {
        cancelAnimationFrame(myGame2animationId); // 前回の描画をキャンセル
        myGame2animationId = requestAnimationFrame(myGame2draw); // 次のアニメーションフレームをリクエスト
      }
    }

    myGame2startButton.addEventListener("click", () => {
      if (!myGame2ballMoving) {
        if (myGame2initFlg) {
          myGame2initFlg = false;
        } else {
          myGame2initBricks();
        }

        myGame2x = myGame2canvas.width / 2;
        myGame2y = myGame2canvas.height - 30;
        myGame2dx = 5 * sumahodattara;
        myGame2dy = -5 * sumahodattara;
        myGame2ballMoving = true;
        myGame2gameClearMessage.style.display = "none";
        myGame2startButton.style.display = "none";
        myGame2animationId = requestAnimationFrame(myGame2draw); // 最初のアニメーションフレームをリクエスト
      }
    });

    document.addEventListener("mousemove", myGame2mouseMoveHandler);

    function myGame2mouseMoveHandler(e) {
      const canvasRect = myGame2canvas.getBoundingClientRect();
      const mouseX = e.clientX - canvasRect.left;

      // マウスX座標をキャンバス内に収める
      const positionX = Math.max(0, Math.min(mouseX - myGame2paddleWidth / 2, myGame2canvas.width - myGame2paddleWidth));

       // inputの値を計算
      const inputValue = (positionX / (myGame2canvas.width - myGame2paddleWidth)) * 100;

      // スライダーの値を更新
      document.getElementById("myGame2InputRange").value = inputValue;

      // プレイヤーの位置を更新
      myGame2PlayerPosition();
    }

    // レンジを操作
    document.getElementById("myGame2InputRange").addEventListener("input", function() {
      myGame2PlayerPosition();
    });

    // プレイヤーの位置を変更
    function myGame2PlayerPosition() {
      const inputValue = parseInt(document.getElementById("myGame2InputRange").value, 10);
      // inputValue を 0～100 の範囲からキャンバスの幅に基づくピクセル値に変換
      const positionX = (inputValue / 100) * (myGame2canvas.width - myGame2paddleWidth);

      // プレイヤーの位置を設定
      myGame2paddleX = Math.max(0, Math.min(myGame2canvas.width - myGame2paddleWidth, positionX));
    };

    // 最初のブロックを初期化して描画する
    myGame2initBricks();
    myGame2draw();
  </script>



<div style="height:24px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-group u-mb-ctrl u-mb-0"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<script language="javascript" type="text/javascript">
function functionOnButtonClick() {
    document.location.reload();
}
</script>

<center>
    <input class="myReloadButton" type="button" value=" 再読み込みする " onclick="functionOnButtonClick();">
</center>

<style>
.myReloadButton{
  width:256px;
  border:1px solid;
  border-radius:10px;
  background-color:#62AA47;
  color:#ffffff;
  font-weight: bold;
}
</style>
</div></div>



<p class="has-text-align-center"><strong>ページを読み込むたびにゲーム背景がランダムで変わります。</strong></p>


<div class="p-blogParts post_content" data-partsID="55773">
<p><div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（固定 728×180） -->
<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:180px"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="1979737405"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div --></p>
</div>



<h2 class="wp-block-heading">ブロック崩しゲームの遊び方</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">ゲームの遊び方</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<ul class="wp-block-list is-style-index -list-under-dashed">
<li>ブロック崩しゲームは、画面下にあるパドル（バー）を左右に動かし、ボールを跳ね返して画面上のブロックをすべて壊すことを目的としたシンプルなゲームです。</li>



<li>マウス操作やスライダーでパドルを動かし、ボールを落とさないように注意しながらプレイします。</li>



<li>ボールがブロックに当たるとブロックが消え、すべてのブロックを壊せばクリアとなります。</li>



<li>ボールがパドルに当たらず画面下に落ちてしまうと失敗です。</li>



<li>パドルの端でボールを跳ね返すと、跳ね返る角度が変わるため、狙った方向にボールを飛ばすことができます。</li>
</ul>


<div class="p-blogParts post_content" data-partsID="56213">
<h2 class="wp-block-heading">実際に遊べるシンプルゲーム一覧</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">ゲーム一覧</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-55881.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022055993-1024x576.jpg" alt="重力付き４目並べ" class="wp-image-55991" srcset="https://boonboonblog.com/wp-content/uploads/2022055993-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022055993-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022055993-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022055993.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べる重力付き4目並べゲーム・プレイ版（強いです！）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-55881.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56141.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022058697-1024x576.jpg" alt="ブロック崩しゲーム" class="wp-image-56212" srcset="https://boonboonblog.com/wp-content/uploads/2022058697-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022058697-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022058697-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022058697.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるブロック崩しゲーム（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56141.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56222.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022058698-1024x576.jpg" alt="インベーダーもどき" class="wp-image-56244" srcset="https://boonboonblog.com/wp-content/uploads/2022058698-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022058698-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022058698-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022058698.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるインベーダーもどきゲーム（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56222.html">ゲームはこちら</a></p>
</div>
</div>



<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56365.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022060372-1024x576.jpg" alt="" class="wp-image-56378" srcset="https://boonboonblog.com/wp-content/uploads/2022060372-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022060372-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022060372-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022060372.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるブラックジャックゲームと攻略法の解説です。（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56365.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56451.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg" alt="" class="wp-image-56479" srcset="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022060576-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022060576-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022060576.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べる JackPot Dice ゲームです。（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56451.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">

</div>
</div>




</div>


<div class="p-blogParts post_content" data-partsID="53518">
<p class="has-text-align-center has-border -border01 has-swl-pale-03-background-color has-background"><strong>40代・50代「会社員におすすめ」の在宅でできる副業５選</strong></p>



<p class="has-text-align-center"><strong><a href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/">40代・50代「会社員におすすめ」の在宅でできる副業５選はこちら</a></strong></p>



<figure class="wp-block-image size-full is-resized my-common-apealbar"><a href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/"><img decoding="async" width="550" height="190" src="https://boonboonblog.com/wp-content/uploads/common_click01-1.png" alt="おすすめ" class="wp-image-56308" style="aspect-ratio:2.8952725627686045;width:200px;height:auto" srcset="https://boonboonblog.com/wp-content/uploads/common_click01-1.png 550w, https://boonboonblog.com/wp-content/uploads/common_click01-1-300x104.png 300w" sizes="(max-width: 550px) 100vw, 550px" /></a></figure>


<div class="swell-block-postLink">			<div class="p-blogCard -external" data-type="type3" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">ドンドン！副業情報局</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://irojiroharaguro.com/wp-content/uploads/2022026680.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/" target="_blank" rel="noopener ">40代・50代「会社員におすすめ」の在宅でできる副業５選（初心者でもできる） | ドンドン！副業情報局</a>
						<span class="p-blogCard__excerpt">４０代・５０代の会社員、今の給料で満足して生活できていますか？さらに、老後に不安なく貯金できていますか？４０代、５０代だからこそ気が付く、不安に思う将来設計、し...</span>					</div>
				</div>
			</div>
		</div>


<p class="has-text-align-center has-border -border01 has-swl-pale-03-background-color has-background"><strong>20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選</strong></p>



<p class="has-text-align-center"><strong><a href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/">20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選はこちら</a></strong></p>



<figure class="wp-block-image size-full is-resized my-common-apealbar"><a href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/"><img decoding="async" width="550" height="190" src="https://boonboonblog.com/wp-content/uploads/common_click01-1.png" alt="おすすめ" class="wp-image-56308" style="aspect-ratio:2.8952725627686045;width:200px;height:auto" srcset="https://boonboonblog.com/wp-content/uploads/common_click01-1.png 550w, https://boonboonblog.com/wp-content/uploads/common_click01-1-300x104.png 300w" sizes="(max-width: 550px) 100vw, 550px" /></a></figure>


<div class="swell-block-postLink">			<div class="p-blogCard -external" data-type="type3" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">ドンドン！副業情報局</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://irojiroharaguro.com/wp-content/uploads/2022026650.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/" target="_blank" rel="noopener ">20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選（初心者でもできる） | ドンドン！副業情...</a>
						<span class="p-blogCard__excerpt">２０代、３０代の主婦にとって、これからの人生設計、お金は心配ごとの一つです。２０代、３０代の主婦が不安に思うお金の問題を少しでも解決するべく、初期投資が無い（ま...</span>					</div>
				</div>
			</div>
		</div>


<div style="height:24px" aria-hidden="true" class="wp-block-spacer"></div>
</div>



<div class="p-blogParts post_content" data-partsID="53487">
<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-10517.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_fukugyou1.gif" alt="この副業" class="wp-image-43432"/></a></figure>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-39965.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_school1.gif" alt="アフィリエイトスクール" class="wp-image-43429"/></a></figure>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-19279.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_notepc1.gif" alt="ノートパソコン" class="wp-image-43430"/></a></figure>
</div>
</div>
</div>



<div class="p-blogParts post_content" data-partsID="53459">
<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-columns">
<div class="wp-block-column" style="flex-basis:33.33%">
<figure class="wp-block-image size-full"><img decoding="async" width="800" height="800" src="https://boonboonblog.com/wp-content/uploads/2022055626.png" alt="どんどん情報局" class="wp-image-55650" srcset="https://boonboonblog.com/wp-content/uploads/2022055626.png 800w, https://boonboonblog.com/wp-content/uploads/2022055626-300x300.png 300w, https://boonboonblog.com/wp-content/uploads/2022055626-150x150.png 150w, https://boonboonblog.com/wp-content/uploads/2022055626-768x768.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</div>



<div class="wp-block-column" style="flex-basis:66.66%">
<p class="has-border -border01"><strong>本サイトは「どんどん情報局」が運営しています。</strong></p>



<p><strong>著作者：Boon ☆</strong></p>



<p>どんどん情報局はメディア記事の執筆を通して世の中に有益な情報を発信することを心がけています。</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/about-us">「どんどん情報局」の紹介はこちら</a></p>
</div>
</div>
</div></div>


<p><div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（レスポンシブ） -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="9677856269"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div --></p>
</div>



<div class="p-blogParts post_content" data-partsID="53460"></div>



<div class="p-blogParts post_content" data-partsID="53458">
<div style="text-align:center">

</div>
</div>



<div class="p-blogParts post_content" data-partsID="53456">
<div class="wp-block-group is-row is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-94bc23d7 wp-block-group-is-layout-flex">
<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>広告の設置・収入について</span></div><div class="cap_box_content">
<p>当サイトは Amazonのアソシエイトとして、適格販売により収入を得ています。</p>



<p>当サイトは Google アドセンスを利用し、広告により収入を得ています。</p>



<p>当サイトは ASP が提供するサービスを利用し、広告、適格販売により収入を得ています。</p>
</div></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>



<script>
var varHtagElements = null;
var varHtagPosition = null;
var varSideBarItem = null;

window.addEventListener('load', function () {
    setTimeout(function(){fnAfterContents();}, 10);
});

function fnAfterContents() {
    // H2、H3 を全て取得する（位置を計算する）
    varHtagElements = document.querySelectorAll('h2, h3');
    var varHtagArray = Array.from(varHtagElements);
    var varHtagPosition = varHtagArray.map(item => item.getBoundingClientRect().top);
    var varHtagPositionWithScroll = varHtagPosition.map(top => Math.floor(top + window.scrollY));
	
    // サイドバーの目次のリストを取得する
    varSideBarItem = document.querySelectorAll('#sidebar .p-toc__link');
  
    if (varSideBarItem == null || varSideBarItem.length == 0) {
        // 目次が無ければ終了
        return;
    }

    // 個数を取得
    const countHtag = varHtagElements.length;
    const countSideBarItem = varSideBarItem.length;
    const iMaxLoop = countHtag > countSideBarItem ? countSideBarItem : countHtag;

    window.addEventListener('scroll', () => {
        // 計算する位置
        const currentPosition = window.scrollY + 300;

        for (let iCount = 0; iCount < iMaxLoop; iCount++) {
            // 現在位置の表示を消す
            varSideBarItem[iCount].classList.remove('currentTocPosition');
            if (iCount >= iMaxLoop - 1 ) {
                // 要素の最後は、次の要素が無いので範囲外のみ判定
                if (currentPosition >= varHtagPositionWithScroll[iCount]) {
                    varSideBarItem[iCount].classList.add('currentTocPosition');
                }
            } else {
                // 要素の途中は、範囲内かどうかを判定
                if (currentPosition >= varHtagPositionWithScroll[iCount] && currentPosition < varHtagPositionWithScroll[iCount + 1]) {
                    varSideBarItem[iCount].classList.add('currentTocPosition');
                } 
            }
        }
    });
}
</script>



<p class="has-text-align-center"><a href="https://boonboonblog.com/privacypolicy#denkitsushin">電気通信事業法改正に伴う表記</a></p>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【コネクト４・ゲーム】無料、ブラウザだけで直ぐに遊べるページ（重力付き4目並べ）</title>
		<link>https://boonboonblog.com/entries/entry-55881.html</link>
		
		<dc:creator><![CDATA[Boon ☆《ブログ魂》]]></dc:creator>
		<pubDate>Sun, 24 Aug 2025 16:59:51 +0000</pubDate>
				<category><![CDATA[情報・遊び・ツールなど]]></category>
		<guid isPermaLink="false">https://boonboonblog.com/?p=55881</guid>

					<description><![CDATA[<p><img src="https://boonboonblog.com/wp-content/uploads/2022055993-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>ブラウザだけで今すぐ遊べるインストール不要のゲームです。PC/スマホ対応でどこでもプレイ。３段階の難易度設定でAI対戦、先攻／後攻の選択や新規ゲーム／中止、戻るボタンを実装しています。楽しいゲームです。]]></description>
										<content:encoded><![CDATA[<p><img src="https://boonboonblog.com/wp-content/uploads/2022055993-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<div class="p-blogParts post_content" data-partsID="53455">
<p>広告：ページ内にてアフィリエイト広告を利用しています。</p>
</div>



<div class="p-blogParts post_content" data-partsID="53457"></div>



<p class="has-border -border01 has-swl-pale-03-background-color has-background"><strong>重力付き４目並べゲームです。</strong></p>


    <div class="c4-controls-container">
      <div class="c4-wrap"
         data-ajax-url="https://boonboonblog.com/wp-admin/admin-ajax.php"
         data-nonce="7f97295b8b"
         data-rows="6"
         data-cols="7">
        <div class="c4-controls">
          <label>
            <select class="c4-first">
              <option value="human">人</option>
              <option value="cpu">コンピュータ</option>
            </select>
          </label>
          <button class="c4-new" type="button">中止/クリア</button>
        </div>
        <div class="c4-status">先攻を選んで「新規ゲーム」を押してください</div>
        <div class="c4-board-wrap">
          <div class="c4-header"></div>
          <div class="c4-board" role="grid" aria-label="Connect Four board"></div>
        </div>
      </div>
      <!-- 右側に表示する画像 -->
      <div class="c4-side-image">
        <!-- <img decoding="async" src="画像URL" alt="サイド画像"> -->
        <div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（固定 240×720） -->
<ins class="adsbygoogle"
     style="display:inline-block;width:240px;height:720px"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="5201138594"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div -->      </div>
    </div>
    



<style>
/* ***************************************************** */

.c4-controls-container {
  display: flex;
  align-items: flex-start;
  gap: 40px;
  width : 100%;
}

/* c4-wrap は最大 450px。小さい画面では自動で縮む */
.c4-wrap {
  width: 100%;
  max-width: 450px;
}

/* デフォルト：画像非表示 & column */
.c4-side-image {
  display: none;
}
.c4-container {
  flex-direction: column;
}

/* 800px〜950px：画像表示 & 横並び */
@media (min-width: 800px) and (max-width: 950px) {
  .c4-side-image {
    display: block;
  }
  .c4-container {
    flex-direction: row;
  }
}

/* 1130px以上：画像表示 & 横並び */
@media (min-width: 1130px) {
  .c4-side-image {
    display: block;
  }
  .c4-container {
    flex-direction: row;
  }
}

/* ***************************************************** */

@media (min-width:450px){

/* 盤と同幅の「新規ゲーム」ボタン */
.c4-btn-start{
  width : 450px !important;
  margin: 4px 0;
  /* background-color: #ffeeee !important; */
  font-size : 24px;
}

.c4-history {
  width : 450px !important;
  border : 2px solid #2E7585;
  background-color : #fff;
  font-family : "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif;
}

.c4-btn-level  {
  height : 124px !important;
  opacity : 0.5;
}

.c4-btn-level img {
  width : 102px;
  height : auto;
  margin-left : 6px;
}

/* --- レイアウト/コントロール --- */
.c4-wrap{
  font-weight : bold;
}

.c4-status{
	font-size : 24px;
  font-weight : bold;
  margin-bottom : 6px;	
}

.c4-controls{
  display:flex;
  flex-wrap:wrap;
  gap:12px;
  align-items:center;
  margin-bottom:8px;
}

.c4-controls label{
  display:none;
} /* 「先攻：」ラベルを非表示 */

.c4-first-group{
  display:flex;
  gap:8px;
}

.c4-btn{
  height:64px;
  min-height:64px;
	border : 2px solid #2E7585;
  border-radius:5px;
  background:#fff;
  padding:0 12px;
  cursor:pointer;
  user-select:none;
  font-weight : bold;
}

.c4-btn:hover{
  background-color : #D3EDFB;
}	
	
.c4-btn:disabled{
  opacity : 0.5;
  cursor:not-allowed;
}

.c4-btn-first{
  width:96px;
}

.c4-btn-new{
  width:128px;
}

.c4-btn-undo{
  width:94px;
}

.c4-btn.is-active{
  background:#1E4E79;
  color:#fff;
  border-color:#2E7585;
  opacity : 1.0;
}

/* --- 盤＆列ボタン（Go!）--- */
.c4-board-wrap{
  display:flex;
  flex-direction:column;
  gap:8px;
  align-items:flex-start;
}

.c4-board{
  display:grid;
  gap:0px;
  /* border-radius:8px; */
  /* background : #D3EDFB; */
	border : 1px solid #333333;
}

/* 列ボタンは盤の“下”に置く想定 */
.c4-header{
  display:grid;
  gap:5px;
	grid-template-columns : repeat(7, 60px) !important;
}

.c4-dropzone{
  height:64px;
  border:2px solid #2E7585;
  border-radius:5px;
  background:#fafafa;
  cursor:pointer;
}

.c4-dropzone:hover{
  background-color : #F4B4D0;
}

.c4-dropzone:disabled{
  opacity: 0.5;
  cursor:not-allowed;
  background-color : #cccccc;
}

/* --- マスとコマ --- */
.c4-cell{
  width:64px;
  height:64px;
  position:relative;
	border : 1px solid #333333;
	background-color : #F7E4C2;
}

.c4-cell.c4-filled::after{
  content:"";position:absolute;
  inset:6%;
  border-radius:50%;
  background:var(--token,#ccc);
  box-shadow:inset 0 10px 20px rgba(0,0,0,.3);
  border : 1px solid #333; 
}

.c4-cell.p1::after{
  --token:#e53935;
}

.c4-cell.p2::after{
  --token:#1e88e5;
}

/* 4 つ並びの強調：縁を3px */
.c4-cell.c4-win::after{
  /* border:3px solid #FFFCDB; */
	animation: c4aminflipDiag 2.0s linear infinite alternate;
}

/* 斜め（左上→右下の軸）で0→180度を行き来 */
@keyframes c4aminflipDiag{
  0%   { transform: rotateY(0deg); }
  100% { transform: rotateY(360deg); }
}
}

/* ***************************************************** */

@media (max-width:449px){

/* 盤と同幅の「新規ゲーム」ボタン */
.c4-btn-start{
  width : 100% !important;
  margin: 4px 0;
  /* background-color: #ffeeee !important; */
  font-size : 20px;
}

.c4-history {
  width : 100% !important;
  border : 2px solid #2E7585;
  background-color : #fff;
  font-family : "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif;
}

.c4-btn-level  {
  height : 108px !important;
  opacity : 0.5;
}

.c4-btn-level img {
  width : 90px;
  height : auto;
  margin-left : 6px;
}

/* --- レイアウト/コントロール --- */
.c4-wrap{
  font-weight : bold;
}

.c4-status{
	font-size : 20px;
  font-weight : bold;
  margin-bottom : 6px;	
}

.c4-controls{
  display:flex;
  flex-wrap:wrap;
  gap:6px;
  align-items:center;
  margin-bottom:8px;
}

.c4-controls label{
  display:none;
} /* 「先攻：」ラベルを非表示 */

.c4-first-group{
  display:flex;
  gap:8px;
}

.c4-btn{
  height:48px;
  min-height:48px;
  border : 2px solid #2E7585;
  border-radius:5px;
  background:#fff;
  padding:0 12px;
  cursor:pointer;
  user-select:none;
  font-weight : bold;
}

.c4-btn-first{
  width:96px !important;
}

.c4-btn-new{
  width:160px !important;
}

.c4-btn-undo{
  width:96px !important;
}
	
.c4-btn:hover{
  background-color : #D3EDFB;
}	
	
.c4-btn:disabled{
  opacity : 0.5;
  cursor:not-allowed;
}

.c4-btn-first{
  width:96px;
}

.c4-btn-new{
  width:128px;
}

.c4-btn-undo{
  width:94px;
}

.c4-btn.is-active{
  background:#1E4E79;
  color:#fff;
  border-color:#2E7585;
  opacity : 1.0;
}

/* --- 盤＆列ボタン（Go!）--- */
.c4-board-wrap{
  display:flex;
  flex-direction:column;
  gap:8px;
  align-items:flex-start;
}

.c4-board{
  display:grid;
  gap:0px;
  /* border-radius:8px; */
  /* background : #D3EDFB; */
	border : 1px solid #333333;
	
	grid-template-columns: repeat(7,calc((100vw - 40px) / 7)) !important;
	grid-template-rows: repeat(6, calc((100vw - 40px) / 7)) !important;
}

/* 列ボタンは盤の“下”に置く想定 */
.c4-header{
  display:grid;
  gap:5px;
	grid-template-columns : repeat(7, calc((100% - 10px) / 7)) !important;
}

.c4-dropzone{
	height:48px;
  border:2px solid #2E7585;
  border-radius:5px;
  background:#fafafa;
  cursor:pointer;
}

.c4-dropzone:hover{
  background-color : #F4B4D0;
}

.c4-dropzone:disabled{
  opacity: 0.5;
  cursor:not-allowed;
  background-color : #cccccc;
}

/* --- マスとコマ --- */
.c4-cell{
  width:100%;
  height:calc((100vw - 40px) / 7);
  position:relative;
	border : 1px solid #333333;
	background-color : #F7E4C2;
}

.c4-cell.c4-filled::after{
  content:"";position:absolute;
  inset:6%;
  border-radius:50%;
  background:var(--token,#ccc);
  box-shadow:inset 0 10px 20px rgba(0,0,0,.3);
  border : 1px solid #333; 
}

.c4-cell.p1::after{
  --token:#e53935;
}

.c4-cell.p2::after{
  --token:#1e88e5;
}

/* 4 つ並びの強調：縁を3px */
.c4-cell.c4-win::after{
  /* border:3px solid #FFFCDB; */
	animation: c4aminflipDiag 2.0s linear infinite alternate;
}

/* 斜め（左上→右下の軸）で0→180度を行き来 */
@keyframes c4aminflipDiag{
  0%   { transform: rotateY(0deg); }
  100% { transform: rotateY(360deg); }
}
}
</style>



<script>
(function(){
  function whenReady(fn){ if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded',fn); } else { fn(); } }

  function initWrap(wrap){
    if(!wrap) return;
    if(wrap.getAttribute('data-c4-inited')==='1') return;
    wrap.setAttribute('data-c4-inited','1');

    var ROWS=parseInt(wrap.getAttribute('data-rows')||'6',10);
    var COLS=parseInt(wrap.getAttribute('data-cols')||'7',10);
    var ajaxUrl=wrap.getAttribute('data-ajax-url');
    var nonceInit=wrap.getAttribute('data-nonce');

    var selectFirst=wrap.querySelector('.c4-first');  // 元のセレクトは隠す
    var btnNew=wrap.querySelector('.c4-new');
 
    // ★ 上部ボタンは常に「中止/クリア」
    if (btnNew) btnNew.textContent = '中止/クリア';

    var statusEl=wrap.querySelector('.c4-status');
    var headerEl=wrap.querySelector('.c4-header');
    var boardEl=wrap.querySelector('.c4-board');
    var boardWrap=wrap.querySelector('.c4-board-wrap');
    var controls = wrap.querySelector('.c4-controls');

    if(!ajaxUrl || !statusEl || !headerEl || !boardEl){ if(statusEl) statusEl.textContent='初期化エラー'; return; }

    // 盤の下に Go! 並べる
    if(boardWrap){ boardWrap.appendChild(headerEl); }

    // ★ 履歴表示（読み取り専用の四角いボックス）
    var histBox = document.createElement('textarea');
    histBox.className = 'c4-history';
    histBox.readOnly = true;
    histBox.rows = 4;
    histBox.style.width = '100%';
    histBox.style.margin = '6px 0 10px';

    // Goボタン(headerEl)の“さらに下”（一番下）に配置
    if (boardWrap) {
      boardWrap.appendChild(histBox);
    } else {
      wrap.appendChild(histBox);
    }

    // ★ 履歴操作ユーティリティ
    function pushLogLine(s){
      if (histBox.value) { histBox.value += '\n' + s; } else { histBox.value = s; }
      histBox.scrollTop = histBox.scrollHeight;
    }
    function clearLog(){ histBox.value = ''; }

    // セレクトとラベルを非表示（ラベル文字「先攻：」を消すため）
    if(selectFirst){
      selectFirst.style.display='none';
      if (selectFirst.parentNode) {
        var tn = '';
        if (selectFirst.parentNode.tagName) {
          tn = String(selectFirst.parentNode.tagName).toLowerCase();
        }
        if (tn === 'label') {
          selectFirst.parentNode.style.display = 'none';
        }
      }
    }

    // --- 先攻/後攻のトグル（選ぶだけ／開始しない） ---
    // 初期値を「後攻（CPU先手）」にする
    if (selectFirst) selectFirst.value = 'cpu';
    var firstChoice = 'cpu';

    var firstGroup = document.createElement('div'); firstGroup.className='c4-first-group';
    var btnFirstHuman = document.createElement('button'); btnFirstHuman.type='button'; btnFirstHuman.className='c4-btn c4-btn-first'; btnFirstHuman.textContent='先攻';
    var btnFirstCPU   = document.createElement('button'); btnFirstCPU.type='button';   btnFirstCPU.className='c4-btn c4-btn-first';   btnFirstCPU.textContent='後攻';
    function refreshFirstButtons(){
      btnFirstHuman.classList.toggle('is-active', firstChoice==='human');
      btnFirstCPU.classList.toggle('is-active', firstChoice==='cpu');
    }
    refreshFirstButtons();
    if(controls){ controls.insertBefore(firstGroup, controls.firstChild); }
    firstGroup.appendChild(btnFirstHuman); firstGroup.appendChild(btnFirstCPU);

    // --- 難易度トグル（上段に画像3つ） ---
    var levelChoice = 'strong'; // 既定は「つよい」
    var levels = document.createElement('div');
    levels.className = 'c4-controls c4-levels';

    function mkLevelBtn(key, label, imgSrc){
      var b = document.createElement('button');
      b.type='button';
      b.className='c4-btn c4-btn-level';
      b.setAttribute('data-level', key);

      if (imgSrc) {
        var img = new Image();
        img.src = imgSrc;
        img.alt = label;
        img.style.height='36px';
        img.style.verticalAlign='middle';
        img.style.marginRight='6px';
        b.appendChild(img);
      }
      return b;
    }

    // 画像
    var btnWeak = mkLevelBtn('weak', 'よわい', 'https://boonboonblog.com/wp-content/uploads/2022056000.png');
    var btnNormal = mkLevelBtn('normal', 'ふつう', 'https://boonboonblog.com/wp-content/uploads/2022056001.png');
    var btnStrong = mkLevelBtn('strong', 'つよい', 'https://boonboonblog.com/wp-content/uploads/2022056002.png');
    levels.append(btnWeak, btnNormal, btnStrong);

    // 「先攻/後攻」などのコントロールより“上”に出す
    if (controls) { wrap.insertBefore(levels, controls); } else { wrap.prepend(levels); }

    function refreshLevelButtons(){
      var arr=[btnWeak, btnNormal, btnStrong];
      var i=0; while(i<arr.length){
        var b=arr[i]; b.classList.toggle('is-active', b.getAttribute('data-level')===levelChoice); i++;
      }
      wrap.setAttribute('data-c4-level', levelChoice);
    }
    refreshLevelButtons();

    levels.addEventListener('click', function(e){
      var b = null;
      var canClosest = false;

if (e) {
  if (e.target) {
    if (typeof e.target.closest === 'function') {
      canClosest = true;
    }
  }
}

      if (canClosest) { b = e.target.closest('.c4-btn-level'); }
      if(!b) return;
      if(b.disabled) return; // ロック中は無効
      levelChoice = b.getAttribute('data-level') || 'strong';
      refreshLevelButtons();
    });

    // --- 難易度ロック制御（ゲーム中は不可） ------------
    var levelButtons = [btnWeak, btnNormal, btnStrong];
    var levelLocked = false;
    function setLevelLocked(locked){
      levelLocked = !!locked;
      var i=0; while(i<levelButtons.length){
        var b=levelButtons[i]; b.disabled = levelLocked; b.classList.toggle('is-disabled', levelLocked); i++;
      }
    }
    setLevelLocked(false);

    // 戻るボタン生成（ゲーム中のみ有効にする）
    var btnUndo = wrap.querySelector('.c4-undo');
    if(!btnUndo){
      btnUndo = document.createElement('button');
      btnUndo.type='button';
      btnUndo.className='c4-btn c4-btn-undo c4-undo';
      btnUndo.textContent='戻る';
      btnUndo.disabled = true;
      if(btnNew){
        btnNew.classList.add('c4-btn','c4-btn-new');
        var p = btnNew.parentNode;
        if(p){ if(btnNew.nextSibling){ p.insertBefore(btnUndo, btnNew.nextSibling); } else { p.appendChild(btnUndo); } }
      }
    } else {
      btnUndo.classList.add('c4-btn','c4-btn-undo');
      if(btnNew){ btnNew.classList.add('c4-btn','c4-btn-new'); }
    }

    // ★ 盤と同幅の「新規ゲーム」ボタン（常時押下可）
    var btnStart = document.createElement('button');
    btnStart.type = 'button';
    btnStart.className = 'c4-btn c4-btn-start c4-start';
    btnStart.textContent = '新規ゲーム';

    // ★ 「あなたの番です」（.c4-status）の直前に挿入
    if (statusEl) {
      wrap.insertBefore(btnStart, statusEl);
    } else {
      wrap.appendChild(btnStart);
    }

    // ★ 盤と同じ幅にボタン幅を同期（初期化・リサイズ・グリッド変更時）
    function syncStartBtnWidth(){
      if (!btnStart || !boardWrap) return;
      var w = boardWrap.getBoundingClientRect().width;
      if (w > 0) { btnStart.style.width = w + 'px'; }
    }

    // グリッドを 64px 固定マスに
    function applyGridSize(){
      headerEl.style.gridTemplateColumns='repeat('+COLS+',64px)';
      boardEl.style.gridTemplateColumns='repeat('+COLS+',64px)';
      boardEl.style.gridTemplateRows='repeat('+ROWS+',64px)';
      syncStartBtnWidth(); // ← ここで幅を同期
    }
    applyGridSize();
    window.addEventListener('resize', syncStartBtnWidth); // ← リサイズでも同期

    // --- UIの有効/無効（手番などでDropzoneのみ制御） ---
    function setControlsEnabled(on){
      var dz = headerEl.querySelectorAll('.c4-dropzone');
      var i=0; while(i<dz.length){ dz[i].disabled = !on; i++; }
      // 戻るは「ゲーム中 かつ 手順があるとき」だけ押せる
      if(btnUndo){ btnUndo.disabled = !isPlaying || game.hist.length===0; }
      // 先攻/後攻・難易度・新規/中止は applyUiState() で管理
    }

    // --- 状態管理（待機/対局中） ---
    var isPlaying = false; // 待機モードから開始

    function applyUiState(){
      // 新規ゲーム ⇔ 中止（上部は常に固定）
      if(btnNew){ btnNew.textContent = '中止/クリア'; }

      // 先攻/後攻ボタン
      btnFirstHuman.disabled = isPlaying;
      btnFirstCPU.disabled   = isPlaying;

      // 難易度ロック
      setLevelLocked(isPlaying);

      // 戻るボタン（手順と併せて別途も制御）
      if(btnUndo){ btnUndo.disabled = !isPlaying || game.hist.length===0; }
    }

    // 1回だけ nonce
    var currentNonce=nonceInit||'';
    (function(){
      var p=new URLSearchParams(); p.append('action','connect4_nonce');
      fetch(ajaxUrl,{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'},credentials:'same-origin',cache:'no-store',body:p.toString()})
      .then(function(r){ return r.json(); })
      .then(function(j){ if(j){ if(j.success){ currentNonce=j.data.nonce; } } })
      .catch(function(){});
    })();

    var game={
      b:[], over:false, busy:false, first:firstChoice, turn:1, ai:null,
      hist:[], seq:'', thinkId:0,

      reset:function(){
        var r,c; this.b=Array(ROWS);
        for(r=0;r<ROWS;r++){ this.b[r]=Array(COLS); for(c=0;c<COLS;c++){ this.b[r][c]=0; } }
        this.over=false; this.busy=false;
        this.first = firstChoice;
        this.turn=1; if(this.first==='cpu'){ this.ai=1; } else { this.ai=2; }
        this.hist=[]; this.seq='';
        this.updateUndoState();
      },
      render:function(){
        var r,c; headerEl.innerHTML='';
        for(c=0;c<COLS;c++){
          var dz=document.createElement('button');
          dz.type='button'; dz.className='c4-dropzone'; dz.textContent='Go!';
          dz.setAttribute('data-col',String(c)); dz.title='列 '+(c+1)+' に落とす';
          headerEl.appendChild(dz);
        }
        applyGridSize();

        boardEl.innerHTML='';
        for(r=0;r<ROWS;r++){
          for(c=0;c<COLS;c++){
            var cell=document.createElement('div'); cell.className='c4-cell';
            cell.setAttribute('data-row',String(r)); cell.setAttribute('data-col',String(c));
            boardEl.appendChild(cell);
          }
        }
      },
      clearUI:function(){ var i=0,k=boardEl.children; while(i<k.length){ k[i].className='c4-cell'; k[i].innerHTML=''; i++; } },
      msg:function(t){ statusEl.textContent=t; },
      drop:function(col){ var r=ROWS-1; while(r>=0){ if(this.b[r][col]===0) return r; r--; } return -1; },
      encode:function(){ var s='',r=0; while(r<ROWS){ var c=0; while(c<COLS){ s+=String(this.b[r][c]); c++; } r++; } return s; },
      inBounds:function(r,c){ if(r<0) return false; if(r>=ROWS) return false; if(c<0) return false; if(c>=COLS) return false; return true; },
      applyCellClass:function(r,c,p){ var cell=boardEl.children[r*COLS+c]; cell.classList.add('c4-filled'); if(p===1){ cell.classList.add('p1'); } else { cell.classList.add('p2'); } },
      redrawFromBoard:function(){
        this.clearUI();
        var r=0; while(r<ROWS){ var c=0; while(c<COLS){ var v=this.b[r][c]; if(v!==0){ this.applyCellClass(r,c,v); } c++; } r++; }
      },
      updateUndoState:function(){
        if(btnUndo){ btnUndo.disabled = !isPlaying || (this.hist.length===0); btnUndo.title = (this.hist.length>0 ? ('手順: '+this.seq) : ''); }
        var i=0; while(i<boardEl.children.length){ boardEl.children[i].classList.remove('c4-win'); i++; }
      },
      win:function(r,c,p){
        var dirs=[[0,1],[1,0],[1,1],[1,-1]],k=0;
        while(k<dirs.length){
          var dr=dirs[k][0],dc=dirs[k][1],cnt=1,i=1,rr,cc;
          for(;;){ rr=r+dr*i; cc=c+dc*i; if(!this.inBounds(rr,cc)) break; if(this.b[rr][cc]!==p) break; cnt++; i++; }
          i=1; for(;;){ rr=r-dr*i; cc=c-dc*i; if(!this.inBounds(rr,cc)) break; if(this.b[rr][cc]!==p) break; cnt++; i++; }
          if(cnt>=4){ this.highlight(r,c,dr,dc,p); return true; }
          k++;
        } return false;
      },
      highlight:function(r,c,dr,dc,p){
        var cells=[[r,c]], i=1, rr,cc, j;
        for(;;){ rr=r+dr*i; cc=c+dc*i; if(cells.length>=4) break; if(!this.inBounds(rr,cc)) break; if(this.b[rr][cc]!==p) break; cells.push([rr,cc]); i++; }
        i=1; for(;;){ rr=r-dr*i; cc=c-dc*i; if(cells.length>=4) break; if(!this.inBounds(rr,cc)) break; if(this.b[rr][cc]!==p) break; cells.push([rr,cc]); i++; }
        j=0; while(j<cells.length){ rr=cells[j][0]; cc=cells[j][1]; boardEl.children[rr*COLS+cc].classList.add('c4-win'); j++; }
      },
      isDraw:function(){ var c=0; while(c<COLS){ if(this.b[0][c]===0) return false; c++; } return true; },
      anim:function(row,col,p){
        return new Promise(function(res){
          var i=0;
          (function step(){
            if(i>0){ var prev=boardEl.children[(i-1)*COLS+col]; prev.classList.remove('c4-filled','p1','p2'); prev.innerHTML=''; }
            var cell=boardEl.children[i*COLS+col]; cell.classList.add('c4-filled'); if(p===1){ cell.classList.add('p1'); } else { cell.classList.add('p2'); }
            if(i<row){ i++; setTimeout(step,50); } else { res(); }
          })();
        });
      },
      pushMove:function(row,col,p){
        this.hist.push({row:row,col:col,p:p});
        this.seq += String(col+1);
        wrap.setAttribute('data-c4-seq', this.seq);
        this.updateUndoState();
        // ★ 履歴に「列：色」を追記（p1=青, p2=赤）←逆じゃね？
        pushLogLine( (p===1 ? '先手：' : '後手：') + String(col+1) + '番に' + (p===1 ? '「赤」' : '「青」') + 'を置きました。' );
      },
      undo:function(){
        if(this.hist.length<=0) return;
        this.thinkId++; this.busy=false; this.over=false;
        var steps=2;
        while(steps>0){
          if(this.hist.length<=0) break;
          var mv=this.hist.pop(); this.b[mv.row][mv.col]=0;
          if(this.seq.length>0){ this.seq=this.seq.slice(0,-1); }
          steps--;
        }
        this.redrawFromBoard(); this.updateUndoState();
        if(this.hist.length % 2 === 0){ this.turn = 1; } else { this.turn = 2; }
        var humanP = (this.ai===1)?2:1;
        if(this.turn===humanP){ this.msg('あなたの番です'); setControlsEnabled(true); }
        else { this.msg('コンピュータが開始します…'); setControlsEnabled(false); this.cpu(); }
      },

      // human: 押された瞬間に操作無効化 → 置く
      human:function(col){
        if(!isPlaying) return;
        if(this.over) return; if(this.busy) return;
        var me; if(this.ai===1){ me=2; } else { me=1; }
        if(this.turn!==me) return;

        this.busy=true; setControlsEnabled(false);

        var row=this.drop(col); if(row===-1){ this.busy=false; setControlsEnabled(true); return; }
        var self=this;
        this.anim(row,col,me).then(function(){
          self.b[row][col]=me; self.pushMove(row,col,me);
          if(self.win(row,col,me)){ setControlsEnabled(true); self.end(me); return; }
          if(self.isDraw()){ setControlsEnabled(true); self.end(0); return; }
          self.turn=3-self.turn; self.cpu();
        });
      },

      cpu:function(){
        var self=this; if(!isPlaying) return; if(this.over) return;
        this.busy=true; this.msg('コンピュータ思考中…'); setControlsEnabled(false);

        var myTicket=this.thinkId+1; this.thinkId=myTicket;

        var s=this.encode(); var re42=/^[012]{42}$/;
        if(!re42.test(s)){ this.msg('内部エラー'); this.busy=false; setControlsEnabled(true); return; }
        var useNonce = currentNonce ? currentNonce : (nonceInit ? nonceInit : '');

        var body=new URLSearchParams();
        body.append('action','connect4_ai');
        body.append('nonce',useNonce);
        body.append('board',s);
        body.append('ai',String(this.ai));
        body.append('level', levelChoice);

        setLevelLocked(true); // 念のため

        fetch(ajaxUrl,{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'},credentials:'same-origin',cache:'no-store',body:body.toString()})
        .then(function(res){
          if(self.thinkId!==myTicket){ throw new Error('canceled'); }
          if(!res.ok){ return res.text().then(function(t){ self.msg('エラー('+res.status+') '+t.slice(0,120)); throw new Error('HTTP '+res.status); }); }
          return res.json();
        })
        .then(function(json){
          if(self.thinkId!==myTicket){ throw new Error('canceled'); }
          if(!json){ self.msg('空の応答'); self.busy=false; setControlsEnabled(true); return; }
          if(!json.success){ self.msg('AIエラー'); self.busy=false; setControlsEnabled(true); return; }
          var col=json.data.col;
          if(col<0 || col>=COLS){ self.end(0); self.busy=false; setControlsEnabled(true); return; }
          var row=self.drop(col); if(row===-1){ self.end(0); self.busy=false; setControlsEnabled(true); return; }
          self.anim(row,col,self.ai).then(function(){
            if(self.thinkId!==myTicket){ return; }
            self.b[row][col]=self.ai; self.pushMove(row,col,self.ai);
            if(self.win(row,col,self.ai)){ self.end(self.ai); setControlsEnabled(true); return; }
            if(self.isDraw()){ self.end(0); setControlsEnabled(true); return; }
            self.turn=3-self.turn; self.msg('あなたの番です'); self.busy=false; setControlsEnabled(true);
          });
        })
        .catch(function(e){
          var canceled=false; if(e){ if(e.message==='canceled'){ canceled=true; } }
          if(!canceled){ try{ console.error(e); }catch(_){ } if(!self.over){ self.msg('通信エラー。リロードしてください。'); } self.busy=false; setControlsEnabled(true); }
        });
      },

      end:function(w){
        this.over=true;
        if(w===0){ this.msg('引き分け'); this.busy=false; return; }
        var who=(w===this.ai)?'コンピュータ':'あなた'; this.msg(who+' の勝ち！'); this.busy=false;
      },

      start:function(){
        // ゲーム開始時に呼ばれる（Newを押した時のみ）
        this.reset(); this.clearUI(); setControlsEnabled(true);
        if(this.first==='human'){ this.msg('あなたの番です'); }
        else { this.msg('コンピュータが開始します…'); this.cpu(); }
      }
    };

    // --- 先攻/後攻は選択のみ（開始しない） ---
    btnFirstHuman.addEventListener('click', function(){
      if(btnFirstHuman.disabled) return;
      firstChoice='human'; game.first='human'; refreshFirstButtons(); game.reset(); game.render(); game.clearUI(); setControlsEnabled(false);
      game.msg('「新規ゲーム」を押すと開始します。');
    });
    btnFirstCPU.addEventListener('click', function(){
      if(btnFirstCPU.disabled) return;
      firstChoice='cpu'; game.first='cpu'; refreshFirstButtons(); game.reset(); game.render(); game.clearUI(); setControlsEnabled(false);
      game.msg('「新規ゲーム」を押すと開始します。');
    });

    // 初期化：待機画面
    var isPlaying = false;
    function enterPreGame(){
      isPlaying = false;
      game.thinkId++; // 思考中断
      game.reset(); game.render(); game.clearUI();
      setControlsEnabled(false);
      game.msg('「新規ゲーム」を押してください。');
      applyUiState();
      syncStartBtnWidth(); // ← 状態遷移時も同期
    }

    function startGame(){
      // ★ 新規ゲーム押下で履歴クリア
      clearLog();
      isPlaying = true;
      applyUiState();
      game.start();
      // start() 内でCPU先攻なら自動で思考へ
    }

    // 初期状態へ
    enterPreGame();

    // 盤面クリック（ゲーム中のみ有効）
    headerEl.addEventListener('click', function(e){
      if(!isPlaying) return;
      var t=e.target; var found=null;
      while(t){ if(t===headerEl) break; var isDZ=false; if(t.classList){ if(t.classList.contains('c4-dropzone')) isDZ=true; } if(isDZ){ found=t; break; } t=t.parentNode; }
      if(!found) return;
      var col=parseInt(found.getAttribute('data-col'),10); if(!isNaN(col)) game.human(col);
    });

    // 上部の「中止/クリア」
    if(btnNew){
      btnNew.addEventListener('click', function(){
        // ④ いつでも押せる：エディットボックスと盤面をクリア。ゲームは開始しない
        clearLog();
        enterPreGame();
      });
    }

    // 「新規ゲーム」：いつでも押せる → クリアして開始
    btnStart.addEventListener('click', function(){
      clearLog();      // 履歴テキストエリアをクリア
      startGame();     // 新規対局開始
    });

    // 戻る
    if(btnUndo){
      btnUndo.addEventListener('click', function(){
        if(isPlaying){
          // ★ 履歴に戻ったことを明示
          pushLogLine('（戻るボタンクリック）');
          game.undo();
        }
      });
    }

    // キー操作：r/R は使わない
    wrap.addEventListener('keydown', function(e){
      var k=e.key?e.key:'';
      var isDigitOneToSeven = false;
      if (k >= '1') {
        if (k <= '7') {
          isDigitOneToSeven = true;
        }
      }
      if (isDigitOneToSeven) {
        if (isPlaying) {
          var col = k.charCodeAt(0) - 49;
          if (col < COLS) {
            game.human(col);
          }
        }
        return;
      }
      if(k==='z' || k==='Z'){ if(isPlaying){ game.undo(); } return; }
    });

    // UIを初期反映
    applyUiState();
  }

  whenReady(function(){ var list=document.querySelectorAll('.c4-wrap'); var i=0; while(i<list.length){ initWrap(list[i]); i++; } });
})();
</script>


<div class="p-blogParts post_content" data-partsID="55773">
<p><div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（固定 728×180） -->
<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:180px"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="1979737405"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div --></p>
</div>



<div id="myLinkBox" class="myLinkBox-container myBorderRed">
  <div class="myLinkBox-header">
    <span class="myLinkBox-tag myBackgroundRed">おすすめ</span>
    <div class="myLinkBox-title  myTextRed">自宅でできる副業</div>
  </div>

  <p class="myLinkBox-text">
今は副業の時代、正社員、会社員の給料だけでは老後が不安です。自宅でできる副業で副収入があれば、
そのお金をもとに投資、最後は FIRE も期待できますね。
  </p>

  <div class="myLinkBox-copy">
    ＼始めなければ始まらない／
  </div>

  <div class="myLinkBox-btn-wrap">
    <a class="my-common-apealbar myLinkBox-btn" href="https://boonboonblog.com/entries/entry-10517.html">
      【簡単・初心者】たった6ステップで解説「ブログ・アフィリエイトの始め方」
      <img decoding="async" src="https://boonboonblog.com/wp-content/uploads/common_buttonicon33.png" alt="" class="myLinkBox-icon33">
    </a>
  </div>

  <div style="text-align:center">
    <a href="https://boonboonblog.com/entries/entry-10517.html">
      <img decoding="async" class="my-common-apealbar" width="200px" src="https://boonboonblog.com/wp-content/uploads/common_click01-1.png" alt="">
    </a>
  </div>

  <div class="myLinkBox-footer">
    <p>お金があると生活が変わる</p>
  </div>
</div>



<h2 class="wp-block-heading">重力付き4目並べゲームの勝負のコツと必勝法</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">コツと必勝法</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<p>次の記事で「初心者」「中級者」のテクニックと、上級者の戦い方を解説しています。ぜひ参考にしてください。またコネクト４は先手必勝のため、完璧な手順で間違いなく置いた場合は必ず先攻（先手）が勝ちます。<strong><span class="swl-marker mark_orange">上級者の場合、先攻（先手）の場合は、事前に暗記している完璧な手順で打つこと</span></strong>で必勝です。</p>



<p class="has-text-align-center"><strong><a href="https://dondonvietnam.com/connect-four/">「重力付き４目並べ必勝法（先手必勝）を解説！」の記事はこちら</a></strong></p>


<div class="swell-block-postLink">			<div class="p-blogCard -external" data-type="type3" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">どんどん！ベトナム情報局</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://dondonvietnam.com/wp-content/uploads/2025/02/2022054141-1.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://dondonvietnam.com/connect-four/" target="_blank" rel="noopener noreferrer">【コネクト４】重力付き４目並べ必勝法（先手必勝）を解説！タイやベトナムの屋台やBARで見かけるゲームで...</a>
						<span class="p-blogCard__excerpt">タイやベトナムの屋台やBARでよく見かけるゲームに「コネクト４（重力付き４目並べ）」があります。縦、横、斜めに４個並べたほうが勝ちの単純なゲームですがなかなか奥が...</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">重力付き４目並べゲーム</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">ゲームのルール</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<h3 class="wp-block-heading">基本ルール（勝利条件／重力ルール／置けない列）</h3>



<p>「重力付き４目並べ」は、2人が交互にコマ（石）を落として置き、縦・横・斜めのいずれかで4つ連続に並べた側が勝ちになるシンプルなボードゲームです。</p>



<h4 class="wp-block-heading">勝利条件</h4>



<ul class="wp-block-list is-style-index -list-under-dashed">
<li>自分のコマが横4／縦4／斜め4（右上がり・右下がり）に連続して並べば勝ち。</li>



<li>勝敗は置いた直後に判定されます。置いた手で4連ができれば即勝利です。</li>



<li>盤面がすべて埋まっても4連が一度も成立しなければ引き分けです。</li>
</ul>



<h4 class="wp-block-heading">重力ルール</h4>



<ul class="wp-block-list is-style-index -list-under-dashed">
<li>コマは盤面の上から落ちて、各列の最下段の空きマスに自動で収まります。</li>



<li>途中の段に宙づりで置くことはできません。必ず一番下から順に積み上がります。</li>



<li>置いたコマを動かしたり、取り消したりはできません。</li>
</ul>



<h4 class="wp-block-heading">置けない列（満杯の列）</h4>



<ul class="wp-block-list is-style-index -list-under-dashed">
<li>ある列が最上段まで埋まったら、その列にはもう置けません（＝置けない列）。</li>



<li>このページでは列に1〜7の番号があります。満杯の列は選んでも反応しない仕様です。</li>
</ul>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2" data-colset="col1"><div class="cap_box_ttl"><span>まとめ</span></div><div class="cap_box_content">
<p>交互にコマを落とす → 一番下の空きマスに収まる → 4連を作れば勝ち。満杯の列は選べない。これだけ覚えれば遊べるシンプルなゲームです。</p>
</div></div>



<h2 class="wp-block-heading">重力付き4目並べゲームの遊び方（このページの使い方）</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">ゲームの遊び方</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<h3 class="wp-block-heading">レベル選択：よわい／ふつう／つよい</h3>



<p>ページ上部の3つの画像で難易度を選びます。選択中のレベルはハイライト表示されます。</p>



<h4 class="wp-block-heading"><strong>それぞれの難易度</strong></h4>



<ul class="wp-block-list is-style-index -list-under-dashed">
<li><strong>よわい</strong>：初心者の練習向け。</li>



<li><strong>ふつう</strong>：読み合いの基礎を身につけたい方向け。</li>



<li><strong>つよい</strong>：定石データ＋高精度計算を使用。手強いAIで腕試しになります。</li>
</ul>



<p class="has-border -border01">コツ：まずよわい→ふつうで勝てる形を覚え、慣れたらつよいに挑戦するのが上達しやすい流れです。</p>



<h3 class="wp-block-heading">先攻・後攻の選び方とゲーム開始</h3>



<ul class="wp-block-list is-style-index -list-under-dashed">
<li>レベル選択の下にあるボタンで先攻／後攻を選びます。</li>



<li>「新規ゲーム」ボタンでゲーム開始です。</li>



<li>画面上部（または盤付近）に、現在の手番や勝敗メッセージが表示されます。</li>
</ul>



<div class="swell-block-capbox cap_box is-style-onborder_ttl2" data-colset="col1"><div class="cap_box_ttl"><span>メモ</span></div><div class="cap_box_content">
<p>理論的には中央列の主導権を握れる分、先攻がやや有利。練習時は後攻スタートで受けの勉強もおすすめ。</p>
</div></div>


<div class="p-blogParts post_content" data-partsID="56213">
<h2 class="wp-block-heading">実際に遊べるシンプルゲーム一覧</h2>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="my-mini-subtite-box">
    <div class="my-mini-subtite-text-black"><span class="my-mini-subtite-text-orange">ゲーム一覧</span></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
</div></div>



<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-55881.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022055993-1024x576.jpg" alt="重力付き４目並べ" class="wp-image-55991" srcset="https://boonboonblog.com/wp-content/uploads/2022055993-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022055993-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022055993-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022055993.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べる重力付き4目並べゲーム・プレイ版（強いです！）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-55881.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56141.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022058697-1024x576.jpg" alt="ブロック崩しゲーム" class="wp-image-56212" srcset="https://boonboonblog.com/wp-content/uploads/2022058697-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022058697-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022058697-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022058697.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるブロック崩しゲーム（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56141.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56222.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022058698-1024x576.jpg" alt="インベーダーもどき" class="wp-image-56244" srcset="https://boonboonblog.com/wp-content/uploads/2022058698-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022058698-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022058698-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022058698.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるインベーダーもどきゲーム（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56222.html">ゲームはこちら</a></p>
</div>
</div>



<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56365.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022060372-1024x576.jpg" alt="" class="wp-image-56378" srcset="https://boonboonblog.com/wp-content/uploads/2022060372-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022060372-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022060372-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022060372.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べるブラックジャックゲームと攻略法の解説です。（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56365.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-large"><a href="https://boonboonblog.com/entries/entry-56451.html"><img decoding="async" width="1024" height="576" src="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg" alt="" class="wp-image-56479" srcset="https://boonboonblog.com/wp-content/uploads/2022060576-1024x576.jpg 1024w, https://boonboonblog.com/wp-content/uploads/2022060576-300x169.jpg 300w, https://boonboonblog.com/wp-content/uploads/2022060576-768x432.jpg 768w, https://boonboonblog.com/wp-content/uploads/2022060576.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>実際に遊べる JackPot Dice ゲームです。（JavaScript版）</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/entries/entry-56451.html">ゲームはこちら</a></p>
</div>



<div class="wp-block-column">

</div>
</div>




</div>


<div class="p-blogParts post_content" data-partsID="53518">
<p class="has-text-align-center has-border -border01 has-swl-pale-03-background-color has-background"><strong>40代・50代「会社員におすすめ」の在宅でできる副業５選</strong></p>



<p class="has-text-align-center"><strong><a href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/">40代・50代「会社員におすすめ」の在宅でできる副業５選はこちら</a></strong></p>



<figure class="wp-block-image size-full is-resized my-common-apealbar"><a href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/"><img decoding="async" width="550" height="190" src="https://boonboonblog.com/wp-content/uploads/common_click01-1.png" alt="おすすめ" class="wp-image-56308" style="aspect-ratio:2.8952725627686045;width:200px;height:auto" srcset="https://boonboonblog.com/wp-content/uploads/common_click01-1.png 550w, https://boonboonblog.com/wp-content/uploads/common_click01-1-300x104.png 300w" sizes="(max-width: 550px) 100vw, 550px" /></a></figure>


<div class="swell-block-postLink">			<div class="p-blogCard -external" data-type="type3" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">ドンドン！副業情報局</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://irojiroharaguro.com/wp-content/uploads/2022026680.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://irojiroharaguro.com/recommended-side-jobs-for-officeworker/" target="_blank" rel="noopener ">40代・50代「会社員におすすめ」の在宅でできる副業５選（初心者でもできる） | ドンドン！副業情報局</a>
						<span class="p-blogCard__excerpt">４０代・５０代の会社員、今の給料で満足して生活できていますか？さらに、老後に不安なく貯金できていますか？４０代、５０代だからこそ気が付く、不安に思う将来設計、し...</span>					</div>
				</div>
			</div>
		</div>


<p class="has-text-align-center has-border -border01 has-swl-pale-03-background-color has-background"><strong>20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選</strong></p>



<p class="has-text-align-center"><strong><a href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/">20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選はこちら</a></strong></p>



<figure class="wp-block-image size-full is-resized my-common-apealbar"><a href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/"><img decoding="async" width="550" height="190" src="https://boonboonblog.com/wp-content/uploads/common_click01-1.png" alt="おすすめ" class="wp-image-56308" style="aspect-ratio:2.8952725627686045;width:200px;height:auto" srcset="https://boonboonblog.com/wp-content/uploads/common_click01-1.png 550w, https://boonboonblog.com/wp-content/uploads/common_click01-1-300x104.png 300w" sizes="(max-width: 550px) 100vw, 550px" /></a></figure>


<div class="swell-block-postLink">			<div class="p-blogCard -external" data-type="type3" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">ドンドン！副業情報局</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://irojiroharaguro.com/wp-content/uploads/2022026650.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://irojiroharaguro.com/recommended-side-jobs-for-20-30-shufu/" target="_blank" rel="noopener ">20代・30代「専業主婦におすすめ」の在宅でできる内職・副業３選（初心者でもできる） | ドンドン！副業情...</a>
						<span class="p-blogCard__excerpt">２０代、３０代の主婦にとって、これからの人生設計、お金は心配ごとの一つです。２０代、３０代の主婦が不安に思うお金の問題を少しでも解決するべく、初期投資が無い（ま...</span>					</div>
				</div>
			</div>
		</div>


<div style="height:24px" aria-hidden="true" class="wp-block-spacer"></div>
</div>



<div class="p-blogParts post_content" data-partsID="53487">
<div class="wp-block-columns">
<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-10517.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_fukugyou1.gif" alt="この副業" class="wp-image-43432"/></a></figure>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-39965.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_school1.gif" alt="アフィリエイトスクール" class="wp-image-43429"/></a></figure>
</div>



<div class="wp-block-column">
<figure class="wp-block-image size-full common-my-img-focus"><a href="https://boonboonblog.com/entries/entry-19279.html"><img decoding="async" width="400" height="300" src="https://boonboonblog.com/wp-content/uploads/common_blog_notepc1.gif" alt="ノートパソコン" class="wp-image-43430"/></a></figure>
</div>
</div>
</div>



<div class="p-blogParts post_content" data-partsID="53459">
<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-columns">
<div class="wp-block-column" style="flex-basis:33.33%">
<figure class="wp-block-image size-full"><img decoding="async" width="800" height="800" src="https://boonboonblog.com/wp-content/uploads/2022055626.png" alt="どんどん情報局" class="wp-image-55650" srcset="https://boonboonblog.com/wp-content/uploads/2022055626.png 800w, https://boonboonblog.com/wp-content/uploads/2022055626-300x300.png 300w, https://boonboonblog.com/wp-content/uploads/2022055626-150x150.png 150w, https://boonboonblog.com/wp-content/uploads/2022055626-768x768.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</div>



<div class="wp-block-column" style="flex-basis:66.66%">
<p class="has-border -border01"><strong>本サイトは「どんどん情報局」が運営しています。</strong></p>



<p><strong>著作者：Boon ☆</strong></p>



<p>どんどん情報局はメディア記事の執筆を通して世の中に有益な情報を発信することを心がけています。</p>



<p class="has-text-align-center"><a href="https://boonboonblog.com/about-us">「どんどん情報局」の紹介はこちら</a></p>
</div>
</div>
</div></div>


<p><div class="aicp">
		
<div class="my-koukoku-banner-container">
<div class="my-koukoku-banner-text">PR</div>
<div class="my-koukoku-banner">

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9910144713343970"
     crossorigin="anonymous"></script>
<!-- blog_ディスプレイ（レスポンシブ） -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-9910144713343970"
     data-ad-slot="9677856269"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>

</div>
</div>

	        </div><!-- end of the aicp div --></p>
</div>



<div class="p-blogParts post_content" data-partsID="53460"></div>



<div class="p-blogParts post_content" data-partsID="53458">
<div style="text-align:center">

</div>
</div>



<div class="p-blogParts post_content" data-partsID="53456">
<div class="wp-block-group is-row is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-94bc23d7 wp-block-group-is-layout-flex">
<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>広告の設置・収入について</span></div><div class="cap_box_content">
<p>当サイトは Amazonのアソシエイトとして、適格販売により収入を得ています。</p>



<p>当サイトは Google アドセンスを利用し、広告により収入を得ています。</p>



<p>当サイトは ASP が提供するサービスを利用し、広告、適格販売により収入を得ています。</p>
</div></div>
</div>



<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>



<script>
var varHtagElements = null;
var varHtagPosition = null;
var varSideBarItem = null;

window.addEventListener('load', function () {
    setTimeout(function(){fnAfterContents();}, 10);
});

function fnAfterContents() {
    // H2、H3 を全て取得する（位置を計算する）
    varHtagElements = document.querySelectorAll('h2, h3');
    var varHtagArray = Array.from(varHtagElements);
    var varHtagPosition = varHtagArray.map(item => item.getBoundingClientRect().top);
    var varHtagPositionWithScroll = varHtagPosition.map(top => Math.floor(top + window.scrollY));
	
    // サイドバーの目次のリストを取得する
    varSideBarItem = document.querySelectorAll('#sidebar .p-toc__link');
  
    if (varSideBarItem == null || varSideBarItem.length == 0) {
        // 目次が無ければ終了
        return;
    }

    // 個数を取得
    const countHtag = varHtagElements.length;
    const countSideBarItem = varSideBarItem.length;
    const iMaxLoop = countHtag > countSideBarItem ? countSideBarItem : countHtag;

    window.addEventListener('scroll', () => {
        // 計算する位置
        const currentPosition = window.scrollY + 300;

        for (let iCount = 0; iCount < iMaxLoop; iCount++) {
            // 現在位置の表示を消す
            varSideBarItem[iCount].classList.remove('currentTocPosition');
            if (iCount >= iMaxLoop - 1 ) {
                // 要素の最後は、次の要素が無いので範囲外のみ判定
                if (currentPosition >= varHtagPositionWithScroll[iCount]) {
                    varSideBarItem[iCount].classList.add('currentTocPosition');
                }
            } else {
                // 要素の途中は、範囲内かどうかを判定
                if (currentPosition >= varHtagPositionWithScroll[iCount] && currentPosition < varHtagPositionWithScroll[iCount + 1]) {
                    varSideBarItem[iCount].classList.add('currentTocPosition');
                } 
            }
        }
    });
}
</script>



<p class="has-text-align-center"><a href="https://boonboonblog.com/privacypolicy#denkitsushin">電気通信事業法改正に伴う表記</a></p>
</div>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
