用Deepseek寫一個五子棋微信小程序

在當今快節奏的生活中,休閑小游戲成為了許多人放松心情的好選擇。五子棋作為一款經典的策略游戲,不僅規則簡單,還能鍛煉思維。最近,我借助 DeepSeek 的幫助,開發了一款五子棋微信小程序。在這篇文章中,我將分享整個開發過程,包括與 DeepSeek 的對話、代碼實現思路以及最終的成果。

1. 初識 DeepSeek:從需求到實現?

一開始,我對如何實現一個五子棋小程序并沒有太多頭緒。于是,我向 DeepSeek 提出了需求:

我:用微信小程序幫我寫一個五子棋,要求功能和思路清晰。

DeepSeek 很快給出了一個清晰的實現思路和代碼示例。它建議使用一個二維數組來表示棋盤,并通過點擊事件實現落子功能。此外,它還提供了勝負判斷的邏輯,確保游戲能夠正常運行。?

2. 代碼實現:從零到一

2.1 棋盤與落子?

?DeepSeek 提供的代碼中,棋盤用一個 15x15 的二維數組表示,每個元素代表棋盤上的一個交叉點。0 表示空位,1 表示黑子,2 表示白子。玩家點擊棋盤時,程序會根據點擊的位置更新數組,并在界面上顯示對應的棋子。

// 初始化棋盤
initBoard() {const board = new Array(15);for (let i = 0; i < 15; i++) {board[i] = new Array(15).fill(0);}this.setData({ board });
}

2.2 勝負判斷

?每次落子后,程序會檢查當前落子的位置是否形成五子連珠。DeepSeek 提供了一個高效的檢查函數,通過遍歷四個方向(水平、垂直、對角線、反對角線)來判斷是否有五子連珠。

// 檢查是否勝利
checkWin(row, col, player) {const { board } = this.data;const directions = [[1, 0], // 水平[0, 1], // 垂直[1, 1], // 對角線[1, -1] // 反對角線];for (let [dx, dy] of directions) {let count = 1;for (let i = 1; i < 5; i++) {if (board[row + i * dx] && board[row + i * dx][col + i * dy] === player) {count++;} else {break;}}for (let i = 1; i < 5; i++) {if (board[row - i * dx] && board[row - i * dx][col - i * dy] === player) {count++;} else {break;}}if (count >= 5) return true;}return false;
}

2.3 添加 AI 對手

為了讓游戲更具挑戰性,我向 DeepSeek 提出了新的需求:

我:幫我增加AI對手功能。

?DeepSeek 很快給出了一個基于規則的 AI 實現。AI 會優先阻止玩家獲勝,并嘗試自己獲勝。它的邏輯如下:

  1. 如果 AI 可以形成五子連珠,直接獲勝。

  2. 如果玩家可以形成五子連珠,AI 會阻止。

  3. 如果 AI 可以形成四子連珠,優先落子。

  4. 如果玩家可以形成四子連珠,AI 會阻止。

  5. 隨機選擇一個空位落子。

// AI 落子邏輯
findBestMove(board) {// 優先級1:AI 可以形成五子連珠for (let i = 0; i < 15; i++) {for (let j = 0; j < 15; j++) {if (board[i][j] === 0 && this.checkPotentialWin(i, j, 2)) {return { row: i, col: j };}}}// 優先級2:阻止玩家形成五子連珠for (let i = 0; i < 15; i++) {for (let j = 0; j < 15; j++) {if (board[i][j] === 0 && this.checkPotentialWin(i, j, 1)) {return { row: i, col: j };}}}// 其他優先級...
}

3. 與 DeepSeek 的對話:從問題到解決方案

在整個開發過程中,DeepSeek 不僅提供了代碼,還解釋了每一步的邏輯。例如,當我詢問如何實現 AI 時,它詳細說明了 AI 的優先級規則,并提供了相應的代碼片段。這種交互式的學習方式讓我對五子棋的實現有了更深的理解。

4. 最終成果:一款優雅的五子棋小程序

經過與 DeepSeek 的合作,我成功開發了一款五子棋微信小程序。它的主要功能包括:

  • 雙人對戰:玩家可以和朋友一起對戰。

  • 人機對戰:玩家可以與 AI 對戰,AI 具備一定的智能。

  • 勝負判斷:實時判斷游戲結果,并顯示勝利信息。

  • 重新開始:游戲結束后,可以一鍵重置棋盤

附:完整代碼

首先,創建一個微信小程序項目,項目結構如下:

five-in-a-row/
├── pages/
│   ├── index/
│   │   ├── index.js
│   │   ├── index.wxml
│   │   ├── index.wxss
│   │   └── index.json
├── app.js
├── app.json
├── app.wxss
└── project.config.json

index.wxml?- 棋盤界面?

<view class="container"><view class="board"><block wx:for="{{board}}" wx:for-item="row" wx:for-index="i"><view class="row"><block wx:for="{{row}}" wx:for-item="cell" wx:for-index="j"><view class="cell" bindtap="onTap" data-row="{{i}}" data-col="{{j}}"><view class="stone {{cell === 1 ? 'black' : (cell === 2 ? 'white' : '')}}"></view></view></block></view></block></view><view class="status">{{status}}</view>
</view>

index.wxss?- 樣式

?

.container {display: flex;flex-direction: column;align-items: center;padding: 20px;
}.board {display: flex;flex-direction: column;border: 1px solid #000;
}.row {display: flex;
}.cell {width: 40px;height: 40px;border: 1px solid #000;display: flex;justify-content: center;align-items: center;
}.stone {width: 30px;height: 30px;border-radius: 50%;
}.black {background-color: black;
}.white {background-color: white;border: 1px solid #000;
}.status {margin-top: 20px;font-size: 20px;
}

index.js?- 邏輯代碼

Page({data: {board: [], // 棋盤currentPlayer: 1, // 當前玩家,1表示黑子,2表示白子status: '黑子先下', // 游戲狀態gameOver: false // 游戲是否結束},onLoad() {this.initBoard();},// 初始化棋盤initBoard() {const board = new Array(15);for (let i = 0; i < 15; i++) {board[i] = new Array(15).fill(0);}this.setData({board,currentPlayer: 1,status: '黑子先下',gameOver: false});},// 點擊棋盤事件onTap(e) {if (this.data.gameOver) return;const { row, col } = e.currentTarget.dataset;const { board, currentPlayer } = this.data;if (board[row][col] !== 0) return; // 該位置已經有棋子board[row][col] = currentPlayer;this.setData({ board });if (this.checkWin(row, col, currentPlayer)) {this.setData({status: currentPlayer === 1 ? '黑子勝利!' : '白子勝利!',gameOver: true});return;}const nextPlayer = currentPlayer === 1 ? 2 : 1;this.setData({currentPlayer: nextPlayer,status: nextPlayer === 1 ? '黑子下' : '白子下'});},// 檢查是否勝利checkWin(row, col, player) {const { board } = this.data;const directions = [[1, 0], // 水平[0, 1], // 垂直[1, 1], // 對角線[1, -1] // 反對角線];for (let [dx, dy] of directions) {let count = 1;for (let i = 1; i < 5; i++) {if (board[row + i * dx] && board[row + i * dx][col + i * dy] === player) {count++;} else {break;}}for (let i = 1; i < 5; i++) {if (board[row - i * dx] && board[row - i * dx][col - i * dy] === player) {count++;} else {break;}}if (count >= 5) return true;}return false;},// 重新開始游戲restartGame() {this.initBoard();}
});

?運行效果

  • 打開微信開發者工具,導入項目。

  • 運行后,你會看到一個15x15的棋盤,玩家可以點擊棋盤上的交叉點落子。

  • 游戲會實時判斷是否有五子連珠,如果有則顯示勝利信息。

  • 游戲結束后,可以通過調用?restartGame?方法重新開始游戲。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71807.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71807.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71807.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自然語言處理:最大期望值算法

介紹 大家好&#xff0c;博主又來給大家分享知識了&#xff0c;今天給大家分享的內容是自然語言處理中的最大期望值算法。那么什么是最大期望值算法呢&#xff1f; 最大期望值算法&#xff0c;英文簡稱為EM算法&#xff0c;它的核心思想非常巧妙。它把求解模型參數的過程分成…

【從零開始學習計算機科學】計算機體系結構(一)計算機體系結構、指令、指令集(ISA)與量化評估

【從零開始學習計算機科學】計算機體系結構(一)計算機體系結構、指令、指令集(ISA)與量化評估 概論計算機體系結構簡介計算機的分類并行體系結構指令集體系結構(ISA)分類存儲器尋址尋址模式操作數大小指令ISA的編碼程序的優化計算機體系結構量化評估存儲器體系結構概論 …

Electron使用WebAssembly實現CRC-32 常用標準校驗

Electron使用WebAssembly實現CRC-32 常用標準校驗 將C/C語言代碼&#xff0c;經由WebAssembly編譯為庫函數&#xff0c;可以在JS語言環境進行調用。這里介紹在Electron工具環境使用WebAssembly調用CRC-32 常用標準格式校驗的方式。 CRC-32 常用標準校驗函數WebAssembly源文件…

Docker基礎篇——Ubuntu下Docker安裝

大家好我是木木&#xff0c;在當今快速發展的云計算與云原生時代&#xff0c;容器化技術蓬勃興起&#xff0c;Docker 作為實現容器化的主流工具之一&#xff0c;為開發者和運維人員帶來了極大的便捷 。下面我們一起進行Docker安裝。 Docker的官方Ubuntu安裝文檔&#xff0c;如…

第五課:Express框架與RESTful API設計:技術實踐與探索

在使用Node.js進行企業應用開發&#xff0c;常用的開發框架Express&#xff0c;其中的中間件、路由配置與參數解析、RESTful API核心技術尤為重要&#xff0c;本文將深入探討它們在應用開發中的具體使用方法&#xff0c;最后通過Postman來對開發的接口進行測試。 一、Express中…

mitmproxy配合Wireshark 抓包分析

Mitmproxy 是一款非常強大的 交互式 HTTP 代理 工具&#xff0c;它被廣泛應用于 Web 開發、API 調試、安全測試 等領域。與 Wireshark 側重于被動監聽網絡流量不同&#xff0c;Mitmproxy 更像一個 主動的中間人&#xff0c;可以攔截、檢查、修改和重放 HTTP/HTTPS 流量&#xf…

Varlens(手機上的單反)Ver.1.9.3 高級版.apk

Varlens 是一款專業級手機攝影軟件&#xff0c;旨在通過豐富的功能和高自由度參數調節&#xff0c;讓手機拍攝效果媲美微單相機。以下是核心功能總結&#xff1a; 一、核心功能 專業拍攝模式 支持手動/自動/程序模式&#xff0c;可調節ISO、快門速度、EV、白平衡等參數27 提供…

Scala 中的訪問修飾符

在Scala中&#xff0c;面向對象的權限控制主要通過訪問修飾符來實現。Scala提供了以下幾種訪問修飾符來控制類、對象、成員變量和方法的訪問權限&#xff1a; 1. 默認訪問權限&#xff08;無修飾符&#xff09; 如果沒有指定任何訪問修飾符&#xff0c;成員默認是public的&…

第十五屆藍橋杯省賽電子類單片機學習過程記錄(客觀題)

客觀試題: 01.典型的BUCK電源電路包含哪些關鍵器件(ABCD) A. 電容 B. 二極管 C. 電感 D. MOSFET 解析: 典型的 BUCK 電源電路是一種降壓型的直流-直流轉換電路,它包含以下關鍵器件: A.電容:電容在電路中起到濾波的作用。輸入電容用于平滑輸入電壓的波動,減少電源噪聲對…

Dify使用日常:我是如何按標題級別將word中的內容轉存到excel中的

先上效果圖 word中的內容 轉存到excel之后 實現步驟&#xff1a; 1、在dify中創建一個工作流&#xff0c;如上圖 2、在開始節點增加一個支持文件上傳的變量 3、添加文檔提取器&#xff0c;提取上傳的文件中的內容 4、添加大模型節點&#xff0c;將文檔提取器提取出來的內容&…

Vue 框架深度解析:源碼分析與實現原理詳解

文章目錄 一、Vue 核心架構設計1.1 整體架構流程圖1.2 模塊職責劃分 二、響應式系統源碼解析2.1 核心類關系圖2.2 核心源碼分析2.2.1 數據劫持實現2.2.2 依賴收集過程 三、虛擬DOM與Diff算法實現3.1 Diff算法流程圖3.2 核心Diff源碼 四、模板編譯全流程剖析4.1 編譯流程圖4.2 編…

IDEA與Maven使用-學習記錄(持續補充...)

1. 下載與安裝 以ideaIU-2021.3.1為例&#xff0c;安裝步驟&#xff1a; 以管理員身份啟動ideaIU-2021.3.1修改安裝路徑為&#xff1a;D:\Program Files\JetBrains\IntelliJ IDEA 2021.3.1勾選【創建桌面快捷方式】&#xff08;可選&#xff09;、【打開文件夾作為項目】&…

認識vue2腳手架

1.認識腳手架結構 使用VSCode將vue項目打開&#xff1a; package.json&#xff1a;包的說明書&#xff08;包的名字&#xff0c;包的版本&#xff0c;依賴哪些庫&#xff09;。該文件里有webpack的短命令&#xff1a; serve&#xff08;啟動內置服務器&#xff09; build命令…

SQL經典查詢

查詢不在表里的數據&#xff0c;一張學生表&#xff0c;一張學生的選課表&#xff0c;要求查出沒有選課的學生&#xff1f; select students.student_name from students left join course_selection on students.student_idcourse_selection.student_id where course_selecti…

《機器學習數學基礎》補充資料:過渡矩陣和坐標變換推導

盡管《機器學習數學基礎》這本書&#xff0c;耗費了比較長的時間和精力&#xff0c;怎奈學識有限&#xff0c;錯誤難免。因此&#xff0c;除了在專門的網頁&#xff08; 勘誤和修訂 &#xff09;中發布勘誤和修訂內容之外&#xff0c;對于重大錯誤&#xff0c;我還會以專題的形…

解鎖DeepSpeek-R1大模型微調:從訓練到部署,打造定制化AI會話系統

目錄 1. 前言 2.大模型微調概念簡述 2.1. 按學習范式分類 2.2. 按參數更新范圍分類 2.3. 大模型微調框架簡介 3. DeepSpeek R1大模型微調實戰 3.1.LLaMA-Factory基礎環境安裝 3.1大模型下載 3.2. 大模型訓練 3.3. 大模型部署 3.4. 微調大模型融合基于SpirngBootVue2…

第七課:Python反爬攻防戰:Headers/IP代理與驗證碼

在爬蟲開發過程中&#xff0c;反爬蟲機制成為了我們必須面對的挑戰。本文將深入探討Python爬蟲中常見的反爬機制&#xff0c;并詳細解析如何通過隨機User-Agent生成、代理IP池搭建以及驗證碼識別來應對這些反爬策略。文章將包含完整的示例代碼&#xff0c;幫助讀者更好地理解和…

Vue3——Fragment

文章目錄 一、Fragment的核心意義1. 解決Vue2的單根限制問題2. 減少不必要的 DOM 嵌套3. 語義化和結構化 二、Fragment 的實現原理三、Fragment 使用方式1. 基本用法2. 結合條件渲染3. 動態組件 四、實際應用場景1. 列表/表格組件2. 布局組件3. 語義化標簽 五、注意事項1. 屬性…

字節跳動C++客戶端開發實習生內推-抖音基礎技術

智能手機愛好者和使用者&#xff0c;追求良好的用戶體驗&#xff1b; 具有良好的編程習慣&#xff0c;代碼結構清晰&#xff0c;命名規范&#xff1b; 熟練掌握數據結構與算法、計算機網絡、操作系統、編譯原理等課程&#xff1b; 熟練掌握C/C/OC/Swift一種或多種語言&#xff…

【Linux學習筆記】Linux基本指令分析和權限的概念

【Linux學習筆記】Linux基本指令分析和權限的概念 &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;Linux學習筆記 文章目錄 【Linux學習筆記】Linux基本指令分析和權限的概念前言一. 指令的分析1.1 alias 指令1.2 grep 指令1.3 zip/unzip 指…