搜尋
首頁web前端css教學建立井字遊戲網站

Build a Tic Tac Toe Game Website

介紹

各位開發者大家好!我很高興分享我的最新項目:經典的井字遊戲。這個專案是練習 JavaScript 技能的好方法,特別是在處理遊戲邏輯、DOM 操作和使用者互動方面。無論您是剛開始使用 JavaScript 還是正在尋找有趣的挑戰,這款 Tic-Tac-Toe 遊戲都是磨練您技能的完美選擇。

項目概況

Tic-Tac-Toe 遊戲 是流行的兩人遊戲的基於網路的實現。該專案展示瞭如何創建互動元素、管理遊戲狀態以及實現簡單的人工智慧邏輯。該遊戲被設計為完全響應式,使其可以在桌面和行動裝置上玩。

特徵

  • 雙人遊戲模式:在同一裝置上與朋友一起玩。
  • 遊戲邏輯:每次移動後自動檢查獲勝者或平局。
  • 重置功能:隨時輕鬆重新啟動遊戲。
  • 響應式設計:遊戲佈局適應不同的螢幕尺寸,在所有裝置上提供一致的體驗。

使用的技術

  • HTML:建構遊戲介面。
  • CSS:設定遊戲板、按鈕和其他 UI 元素的樣式。
  • JavaScript:管理遊戲邏輯,包括玩家回合、獲勝條件和重置遊戲。

專案結構

以下是專案結構的快速瀏覽:

Tic-Tac-Toe/
├── index.html
├── styles.css
└── script.js
  • index.html:包含 Tic-Tac-Toe 遊戲的 HTML 結構。
  • styles.css:包含遊戲板和響應式設計的 CSS 樣式。
  • script.js:處理遊戲邏輯,包括玩家回合和獲勝條件。

安裝

要開始該項目,請按照以下步驟操作:

  1. 複製儲存庫

    git clone https://github.com/abhishekgurjar-in/Tic-Tac-Toe.git
    
  2. 開啟專案目錄:

    cd Tic-Tac-Toe
    
  3. 運行項目:

    • 在網頁瀏覽器中開啟index.html 檔案即可開始玩井字遊戲。

用法

  1. 在網頁瀏覽器中開啟網站
  2. 點選網格中的任一空白單元格開始遊戲
  3. 輪流在單元格中放置你的標記(X 或 O)。
  4. 查看結果:如果出現獲勝組合,遊戲將宣布獲勝;如果所有單元格都填滿,則遊戲將宣布平局。
  5. 重置遊戲:點選「重置遊戲」按鈕開始新遊戲。

程式碼說明

超文本標記語言

index.html 檔案設定 Tic-Tac-Toe 遊戲的結構,包括遊戲板和控制按鈕。這是一個片段:


  
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Tic-Tac-Toe Game</title>
    <link rel="stylesheet" href="style.css">
    <script src="script.js" defer></script>
  
  
    <div class="msg-container hide">
      <p id="msg">Winner</p>
      <button id="new-btn">New Game</button>
    </div>
    <main>
      <h1 id="Tic-Tac-Toe">Tic Tac Toe</h1>
      <div class="container">
        <div class="game">
          <button class="box"></button>
          <button class="box"></button>
          <button class="box"></button>
          <button class="box"></button>
          <button class="box"></button>
          <button class="box"></button>
          <button class="box"></button>
          <button class="box"></button>
          <button class="box"></button>
        </div>
      </div>
      <button id="reset-btn">Reset Game</button>
    </main>
    <div class="footer">
      <p>Made with ❤️ by Abhishek Gurjar</p>
    </div>
  


CSS

styles.css 檔案設計 Tic-Tac-Toe 遊戲的樣式,包括網格佈局、按鈕和響應式設計。以下是一些關鍵樣式:

* {
    margin: 0;
    padding: 0;
  }

  body {
    background-color: #548687;
    text-align: center;
  }

  .container {
    height: 70vh;
    display: flex;

    justify-content: center;
    align-items: center;
  }

  .game {
    height: 60vmin;
    width: 60vmin;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 1.5vmin;
  }

  .box {
    height: 18vmin;
    width: 18vmin;
    border-radius: 1rem;
    border: none;
    box-shadow: 0 0 1rem rgba(0, 0, 0, 0.3);
    font-size: 8vmin;
    color: #b0413e;
    background-color: #ffffc7;
  }

  #reset-btn {
    padding: 1rem;
    font-size: 1.25rem;
    background-color: #191913;
    color: #fff;
    border-radius: 1rem;
    border: none;
  }

  #new-btn {
    padding: 1rem;
    font-size: 1.25rem;
    background-color: #191913;
    color: #fff;
    border-radius: 1rem;
    border: none;
  }

  #msg {
    color: #ffffc7;
    font-size: 5vmin;
  }

  .msg-container {
    height: 100vmin;
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
    gap: 4rem;
  }

  .hide {
    display: none;
  }
.footer {
  margin: 50px;
  text-align: center;
  color: white;
}

JavaScript

script.js 檔案管理遊戲邏輯,包括處理玩家回合、檢查獲勝者以及重置遊戲。這是一個片段:

let boxes = document.querySelectorAll(".box");
let resetBtn = document.querySelector("#reset-btn");
let newGameBtn = document.querySelector("#new-btn");
let msgContainer = document.querySelector(".msg-container");
let msg = document.querySelector("#msg");

let turnO = true; //playerX, playerO
let count = 0; //To Track Draw

const winPatterns = [
  [0, 1, 2],
  [0, 3, 6],
  [0, 4, 8],
  [1, 4, 7],
  [2, 5, 8],
  [2, 4, 6],
  [3, 4, 5],
  [6, 7, 8],
];

const resetGame = () => {
  turnO = true;
  count = 0;
  enableBoxes();
  msgContainer.classList.add("hide");
};

boxes.forEach((box) => {
  box.addEventListener("click", () => {
    if (turnO) {
      //playerO
      box.innerText = "O";
      turnO = false;
    } else {
      //playerX
      box.innerText = "X";
      turnO = true;
    }
    box.disabled = true;
    count++;

    let isWinner = checkWinner();

    if (count === 9 && !isWinner) {
      gameDraw();
    }
  });
});

const gameDraw = () => {
  msg.innerText = `Game was a Draw.`;
  msgContainer.classList.remove("hide");
  disableBoxes();
};

const disableBoxes = () => {
  for (let box of boxes) {
    box.disabled = true;
  }
};

const enableBoxes = () => {
  for (let box of boxes) {
    box.disabled = false;
    box.innerText = "";
  }
};

const showWinner = (winner) => {
  msg.innerText = `Congratulations, Winner is ${winner}`;
  msgContainer.classList.remove("hide");
  disableBoxes();
};

const checkWinner = () => {
  for (let pattern of winPatterns) {
    let pos1Val = boxes[pattern[0]].innerText;
    let pos2Val = boxes[pattern[1]].innerText;
    let pos3Val = boxes[pattern[2]].innerText;

    if (pos1Val != "" && pos2Val != "" && pos3Val != "") {
      if (pos1Val === pos2Val && pos2Val === pos3Val) {
        showWinner(pos1Val);
        return true;
      }
    }
  }
};

newGameBtn.addEventListener("click", resetGame);
resetBtn.addEventListener("click", resetGame);

現場演示

您可以在這裡查看 Tic-Tac-Toe 遊戲的現場演示。

結論

建立這款 Tic-Tac-Toe 遊戲是一次愉快的體驗,它讓我能夠練習 JavaScript,尤其是在創建互動式 Web 應用程式方面。我希望這個專案能夠激勵您建立自己的遊戲並探索 JavaScript 的可能性。快樂編碼!

製作人員

這個專案是我不斷提升 Web 開發技能的一部分,專注於 JavaScript 和 DOM 操作。

作者

  • 阿布舍克·古賈爾
    • GitHub 簡介

以上是建立井字遊戲網站的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
(開發人員)增長模型(開發人員)增長模型Apr 19, 2025 am 11:08 AM

我真的很喜歡Dennis Hambeukers的帖子“設計師的成長模式”。丹尼斯只是發明了這種模型,但它基於一些現有想法,這一切

鬧鬼:Web組件的掛鉤鬧鬼:Web組件的掛鉤Apr 19, 2025 am 11:06 AM

我只是和戴夫聊天,他告訴我關於鬼魂的聊天。它的鉤子,但適用於本機Web組件!很酷。我認為這樣的東西存在

每周平台新聞:活動時機,網絡的Google Earth,不死會話cookie每周平台新聞:活動時機,網絡的Google Earth,不死會話cookieApr 19, 2025 am 10:57 AM

在本週的新聞中,Wikipedia有助於識別三個慢單擊處理程序,Google Earth進入網絡,CSS中的SVG屬性獲得了更多的支持,以及在殭屍cookies的情況下該怎麼做。

純CSS的多線截斷純CSS的多線截斷Apr 19, 2025 am 10:50 AM

本文中的訣竅仍然非常整潔又聰明,但是現在有一種標準化的方法可以做到這一點,這可能是您最好的選擇。

CSS動畫庫CSS動畫庫Apr 19, 2025 am 10:46 AM

有很多庫希望幫助您在網絡上進行動畫操作。這些是真正幫助您使用語法或的圖書館

顏色輸入:深入研究跨瀏覽器差異顏色輸入:深入研究跨瀏覽器差異Apr 19, 2025 am 10:40 AM

在本文中,我們將查看內部元素內部的結構,瀏覽器的不一致,為什麼它們在某個瀏覽器中以某種方式看起來

將(偽)元素限製到其父元的邊框框將(偽)元素限製到其父元的邊框框Apr 19, 2025 am 10:39 AM

您是否曾經想確保(偽)元素在其父框架之外沒有顯示任何內容?如果您在想像什麼

烤麵包烤麵包Apr 19, 2025 am 10:30 AM

有一天,突然之間,我開始聽到關於吐司的笑話。我不知道上下文是什麼。我以為一些朋友剛開始講吐司笑話,

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。