使用Trae 生成的React版的貪吃蛇

使用Trae 生成的React版的貪吃蛇

首先你想用這個貪吃蛇,你需要先安裝Trae

Trae 官方地址

他有兩種模式 chat builder

我使用的是builder模式,雖然是Alpha.還是可以用。

接下來就是按著需求傻瓜式的操作生成代碼

在這里插入圖片描述

在這里插入圖片描述

他生成的代碼不完全正確,比如沒有引入Game.jsx文件,需要詳細的描述,他在根據描述修改代碼。

在這里插入圖片描述

最后的效果
在這里插入圖片描述

下面就是游戲核心Game.jsx文件的內容

import React, { useState, useEffect, useCallback } from 'react';const Game = () => {// 使用useState Hook定義游戲狀態// useState返回一個數組,第一個元素是當前狀態值,第二個元素是更新狀態的函數const [snake, setSnake] = useState([{ x: 10, y: 10 }]); // 蛇的初始位置和身體const [food, setFood] = useState({ x: 5, y: 5 }); // 食物的初始位置const [direction, setDirection] = useState('RIGHT'); // 初始移動方向const [score, setScore] = useState(0); // 初始分數// 使用useCallback Hook生成新食物的位置// useCallback用于緩存函數,避免在每次渲染時都創建新的函數實例const generateFood = useCallback(() => {const newFood = {x: Math.floor(Math.random() * 20),y: Math.floor(Math.random() * 20)};setFood(newFood);}, []);// 使用useCallback Hook檢查碰撞const checkCollision = useCallback((head) => {// 檢查是否撞墻if (head.x >= 20 || head.x < 0 || head.y >= 20 || head.y < 0) {return true;}// 檢查是否撞到自己for (let i = 1; i < snake.length; i++) {if (head.x === snake[i].x && head.y === snake[i].y) {return true;}}return false;}, [snake]);// 使用useCallback Hook移動蛇const moveSnake = useCallback(() => {const newSnake = [...snake];const head = { ...newSnake[0] };// 根據當前方向移動蛇頭switch (direction) {case 'RIGHT':head.x += 1;break;case 'LEFT':head.x -= 1;break;case 'UP':head.y -= 1;break;case 'DOWN':head.y += 1;break;default:break;}// 檢查是否發生碰撞if (checkCollision(head)) {// 游戲結束邏輯return;}newSnake.unshift(head);// 檢查是否吃到食物if (head.x === food.x && head.y === food.y) {setScore(score + 1);generateFood();} else {newSnake.pop();}setSnake(newSnake);}, [snake, direction, food, score, checkCollision, generateFood]);// 使用useEffect Hook監聽鍵盤事件// useEffect用于處理副作用,如添加事件監聽器useEffect(() => {const handleKeyDown = (e) => {switch (e.key) {case 'ArrowUp':if (direction !== 'DOWN') setDirection('UP');break;case 'ArrowDown':if (direction !== 'UP') setDirection('DOWN');break;case 'ArrowLeft':if (direction !== 'RIGHT') setDirection('LEFT');break;case 'ArrowRight':if (direction !== 'LEFT') setDirection('RIGHT');break;default:break;}};window.addEventListener('keydown', handleKeyDown);return () => window.removeEventListener('keydown', handleKeyDown);}, [direction]);// 使用useEffect Hook實現游戲主循環useEffect(() => {const gameLoop = setInterval(moveSnake, 200);return () => clearInterval(gameLoop);}, [moveSnake]);// JSX語法:用于描述UI的結構return (<div><div>Score: {score}</div><div style={{ display: 'grid', gridTemplateColumns: 'repeat(20, 20px)' }}>{Array.from({ length: 20 * 20 }).map((_, index) => {const x = index % 20;const y = Math.floor(index / 20);const isSnake = snake.some(segment => segment.x === x && segment.y === y);const isFood = food.x === x && food.y === y;return (<divkey={index}style={{width: '20px',height: '20px',backgroundColor: isSnake ? 'green' : isFood ? 'red' : 'lightgray',border: '1px solid gray'}}/>);})}</div></div>);
};export default Game;

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

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

相關文章

AI大模型:(一)1.大模型的發展與局限

說起AI大模型不得不說下機器學習的發展史&#xff0c;機器學習包括傳統機器學習、深度學習&#xff0c;而大模型&#xff08;Large Models&#xff09;屬于機器學習中的深度學習&#xff08;Deep Learning&#xff09;領域&#xff0c;具體來說&#xff0c;它們通常基于神經網絡…

rust學習筆記17-異常處理

今天聊聊rust中異常錯誤處理 1. 基礎類型&#xff1a;Result 和 Option&#xff0c;之前判斷空指針就用到過 Option<T> 用途&#xff1a;表示值可能存在&#xff08;Some(T)&#xff09;或不存在&#xff08;None&#xff09;&#xff0c;適用于無需錯誤信息的場景。 f…

Python:單繼承方法的重寫

繼承&#xff1a;讓類和類之間轉變為父子關系&#xff0c;子類默認繼承父類的屬性和方法 單繼承&#xff1a; class Person:def eat(self):print("eat")def sing(self):print("sing") class Girl(Person):pass#占位符&#xff0c;代碼里面類下面不寫任何東…

記錄一下aes加密與解密

該文章只做拓展后續會更新&#xff1b;如有出錯請指出 首先需要先引入相關依賴 crypto-js 然后直接開始存儲 export function aesEncrypt(message: string, key: string) {return aes.encrypt(message, key).toString(); } 之后是解密方式 function decrypt(content: any, key…

[免費]直接整篇翻譯pdf工具-支持多種語言

<閑來沒事寫篇博客填補中文知識庫漏洞> 如題&#xff0c;[免費][本地]工具基于開源倉庫&#xff1a; 工具 是python&#xff01;太好了&#xff0c;所以各個平臺都可以&#xff0c;我這里基于windows. 1. 先把github代碼下載下來&#xff1a; git clone https://githu…

UI設計中的用戶反饋機制:提升交互體驗的關鍵

hello寶子們...我們是艾斯視覺擅長ui設計和前端數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化產品泛濫的今天&#xff0c;用戶與界面的每一次交互都在無形中塑造著他們對產品的認知。一個…

Hessian 矩陣是什么

Hessian 矩陣是什么 目錄 Hessian 矩陣是什么Hessian 矩陣的性質及舉例說明**1. 對稱性****2. 正定性決定極值類型****特征值為 2(正),因此原點 ( 0 , 0 ) (0, 0) (0,0) 是極小值點。****3. 牛頓法中的應用****4. 特征值與曲率方向****5. 機器學習中的實際意義**一、定義與…

Nginx 代理訪問一個 Web 界面時缺少內容

1. 資源路徑問題 Web 頁面中的靜態資源&#xff08;如圖片、CSS、JavaScript 文件&#xff09;可能使用了相對路徑或絕對路徑&#xff0c;而這些路徑在代理后無法正確加載。 解決方法&#xff1a; 檢查資源路徑&#xff1a;打開瀏覽器的開發者工具&#xff08;按 F12&#xf…

GPU視頻編解碼:Jetson VPI+multimedia_api視頻編解碼入門(一)

目錄 一.Pipline與工具棧 二.硬件設備概況 三.GPU視頻編解碼框架 四.VPI編譯使用實例 五. jetson_multimedia_api編譯使用實例 一.Pipline與工具棧 二.硬件設備概況 三.GPU視頻編解碼框架 jetson設備目前不支持VPF框架&#xff0c;關于VPF的使用我在下節PC段使用X86進行安…

《深入理解AOP編程:從基礎概念到Spring實現》

AOP編程 AOP(Aspect Oriented Programing) 面向切面編程 Spring動態代理開發 以切面為基本單位的程序開發&#xff0c;通過切脈你間的彼此協同&#xff0c;相互調用&#xff0c;完成程序構建 切面切入點額外功能 OOP(Object Oriented Programing)面向對象編程 java 以對象為基本…

C# 零基礎入門篇(19.DateTime 使用指南)

## 一、概述 DateTime 是 C# 中用于表示日期和時間的結構&#xff0c;位于 System 命名空間中。它提供了豐富的屬性和方法&#xff0c;用于處理日期和時間的創建、格式化、比較和計算。 ## 二、創建 DateTime 對象 ### &#xff08;一&#xff09;使用默認構造函數 DateTime…

Docker 實踐與應用舉例

一、引言 在當今快速發展的信息技術領域&#xff0c;容器化技術已成為推動軟件開發、部署和運維變革的關鍵力量。Docker 作為容器化技術的領軍者&#xff0c;以其高效、便捷、可移植等特性&#xff0c;被廣泛應用于各種場景。它能夠將應用程序及其依賴項打包成一個獨立的容器&…

C++初階——類和對象(一)

C初階——類和對象&#xff08;一&#xff09; 一、面向過程和面向對象 1.面向過程 面向過程的程序設計&#xff08;Procedure-Oriented Programming&#xff09;&#xff0c;簡稱POP&#xff0c;是一種是以程序執行流程為核心的編程范式。它是先分析出解決問題所需要的的步…

Skyeye 云智能制造辦公系統 VUE 版本 v3.15.13 發布

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代碼平臺、移動端采用 UNI-APP。包含 30 多個應用模塊、50 多種電子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、筆記、知識庫、項目、門店、商城、財務、多班次考勤、薪資、招聘、云售后、論壇、公告、問卷、報表…

Obsidian Copilot:打造你的專屬 AI 筆記助手

Obsidian Copilot作為一款非常受歡迎的Obsidian插件&#xff0c;不僅極大地提升了用戶的筆記管理和信息檢索效率&#xff0c;還通過其多樣化的AI功能為用戶帶來了前所未有的便捷體驗。本文將詳細介紹Obsidian Copilot的核心特點、使用方法及個人體驗分享。 核心特點 Obsidian…

每日一題--計算機網絡

一、基礎概念類問題 1. TCP 和 UDP 的區別是什么&#xff1f; 回答示例&#xff1a; TCP&#xff1a;面向連接、可靠傳輸&#xff08;通過三次握手建立連接&#xff0c;丟包重傳&#xff09;、保證數據順序&#xff08;如文件傳輸、網頁訪問&#xff09;。 UDP&#xff1a;無…

使用 Spring 的 FactoryBean 創建和獲取 Bean 對象

在Spring框架中&#xff0c;FactoryBean接口提供了一種強大的機制來創建復雜的bean實例。本文將基于提供的代碼示例&#xff0c;詳細介紹如何通過FactoryBean創建bean對象&#xff0c;并展示如何獲取這些bean實例以及它們所屬的FactoryBean實例。 示例代碼類 定義 MyBean 接口…

制造業數字化轉型,汽車裝備制造企業數字化轉型案例,智能制造數字化傳統制造業數字化制造業數字化轉型案例

《某制造業企業信息化整體解決方案》PPT展示了一個汽車裝備企業的整體信息化解決方案&#xff0c;闡述了該企業的業務特點和現狀&#xff0c;主要包括按訂單生產、多級計劃和產品跟蹤等&#xff0c;分析了信息化建設的主要困難&#xff0c;如信息管理手工化、過程數據追溯困難、…

軟鏈接 使用筆記 linux命令 if判斷

目錄 1>0判斷怎么寫&#xff1a; 1. 使用 [ ] 進行數值比較&#xff1a; 2. 使用 (( )) 進行數學運算&#xff1a; 3. 使用 [[ ]]&#xff08;主要用于字符串比較&#xff0c;不推薦用于數學運算&#xff09;&#xff1a; 軟鏈接 使用筆記 1>0判斷怎么寫&#xff1a…

pycharm-python國際象棋遊戲代碼

嗯&#xff0c;用戶的問題是“pycharm寫關於python國際象棋遊戲代碼”&#xff0c;也就是要用PyCharm來寫一個Python的國際象棋游戲代碼。我需要先整理一下用戶提供的搜索結果&#xff0c;看看有什么相關的信息可以利用。 首先看搜索結果中的各個網頁內容。網頁1主要講的是象棋…