0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ハイアンドローゲームをHTMLとJavaScriptで作成してみた

Last updated at Posted at 2024-09-24

はじめに

今回は、HTMLとJavaScriptを使ってトランプのハイアンドローゲームを作成しました。カードのランク(数字やJ、Q、Kなど)を見て、次のカードが「高い」か「低い」かを予測するシンプルなゲームです。デザインも少しオシャレにしてみたので、ぜひご覧ください!

完成したゲームのデモ

スクリーンショット 2024-09-24 17.33.28.png

このゲームでは、現在のカードが表示され、その後プレイヤーが次のカードが「高い」か「低い」かを予測します。正解すると連続正解数が増え、不正解になると連続正解数がリセットされます。

使用技術

  • HTML
  • CSS
  • JavaScript

それでは、具体的な実装に入っていきましょう。


HTMLの構成

まずは、HTMLの構成です。この部分では、ゲームのレイアウトやボタンの配置を定義しています。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>High and Low - Card Game</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <h1>High and Low - Card Game</h1>
        <div class="card-display">
            <p id="current-card">Current Card: ?</p>
        </div>
        <div class="buttons">
            <button onclick="guess('high')">High</button>
            <button onclick="guess('low')">Low</button>
        </div>
        <p id="result"></p>
        <p id="score">Streak: 0</p>
    </div>

    <script src="card-game.js"></script>
</body>
</html>

解説

  • <h1>タグでゲームのタイトルを表示。
  • id="current-card"で現在のカードの情報を表示する場所を作り、ボタンを押すことで次のカードと比較します。
  • ボタンは2つあり、「High」「Low」を選択できるようにしています。
  • JavaScriptファイル(card-game.js)を最後に読み込んでおり、クリックイベントでゲームの処理が実行されるようにします。

CSSでスタイリッシュなデザインを作成

次に、CSSで見た目をスタイリッシュにします。背景色やボタンのホバーエフェクトなどを設定し、オシャレなデザインに仕上げます。

/* 全体のスタイル */
body {
    font-family: 'Arial', sans-serif;
    background-color: #f4f4f9;
    color: #333;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
}

.container {
    text-align: center;
    background-color: #ffffff;
    padding: 30px;
    border-radius: 15px;
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
    width: 300px;
}

/* タイトルのスタイル */
h1 {
    font-size: 24px;
    margin-bottom: 20px;
    color: #333;
}

/* カードの表示スタイル */
.card-display {
    background-color: #ffe0e6;
    border-radius: 10px;
    padding: 20px;
    margin-bottom: 20px;
    box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.1);
}

#current-card {
    font-size: 24px;
    font-weight: bold;
    color: #333;
}

/* ボタンのスタイル */
.buttons button {
    background-color: #007bff;
    color: white;
    padding: 10px 20px;
    border: none;
    border-radius: 5px;
    margin: 5px;
    cursor: pointer;
    transition: background-color 0.3s ease;
    font-size: 16px;
}

.buttons button:hover {
    background-color: #0056b3;
}

/* 結果とスコアのスタイル */
#result, #score {
    font-size: 18px;
    margin-top: 10px;
}

解説

  • 全体的にシンプルでクリーンなデザインにするため、白を基調にし、シャドウを使って立体感を出しています。
  • ボタンにはホバースタイルを追加し、押したときの感覚をユーザーに与えるようにしています。
  • カードの表示エリアには少し柔らかいピンクを使い、視覚的に楽しめるようにしています。

JavaScriptの実装

ゲームロジックの中心となる部分がJavaScriptです。ランダムにカードを引き、プレイヤーの予測が正しいかどうかを判定し、連続正解数を管理します。

// カードのスートとランクの定義
const suits = ["", "", "", ""];
const ranks = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"];

// 現在のカードとスコア
let currentCard = drawCard();
let streak = 0;  // 連続正解数
document.getElementById("current-card").innerText = `Current Card: ${currentCard.rank} ${currentCard.suit}`;

// カードを引く関数
function drawCard() {
    let suit = suits[Math.floor(Math.random() * suits.length)];
    let rank = ranks[Math.floor(Math.random() * ranks.length)];
    return { suit: suit, rank: rank, rankValue: ranks.indexOf(rank) };
}

// ゲームの予測関数
function guess(prediction) {
    let newCard = drawCard();
    let resultText = '';

    if ((prediction === 'high' && newCard.rankValue > currentCard.rankValue) || 
        (prediction === 'low' && newCard.rankValue < currentCard.rankValue)) {
        resultText = `Correct! The new card is ${newCard.rank} ${newCard.suit}.`;
        streak++;  // 正解した場合、連続正解数を増やす
    } else {
        resultText = `Wrong! The new card is ${newCard.rank} ${newCard.suit}.`;
        streak = 0;  // 間違えた場合、連続正解数をリセット
    }

    // 結果と連続正解数の更新
    document.getElementById("result").innerText = resultText;
    document.getElementById("score").innerText = `Streak: ${streak}`;
    
    // 新しいカードをセット
    currentCard = newCard;
    document.getElementById("current-card").innerText = `Current Card: ${currentCard.rank} ${currentCard.suit}`;
}

解説

  • drawCard関数: スートとランクをランダムに選んでカードを引く関数です。スートとランクの配列からランダムに1つずつ選び、現在のカードとして設定します。
  • guess関数: プレイヤーの選択(「High」か「Low」)に応じて、次のカードが今のカードより高いか低いかを判定し、正解か不正解かを表示します。正解すればstreakが増え、不正解であれば0にリセットされます。
  • スコア表示: 連続正解数を画面上に表示するようにしています。

demo (CodePen)

See the Pen Untitled by 野口正人 (@domlzqyy-the-decoder) on CodePen.

まとめ

このように、HTML、CSS、そしてJavaScriptを使って、簡単なハイアンドローゲームを作成できます。トランプカードの要素を取り入れ、シンプルでオシャレなデザインに仕上げることができました。さらに、このゲームにはスコアシステムを追加して、プレイヤーが連続正解数を競えるようにしています。

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?