91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用javascript制作一個網頁端3D貪吃蛇游戲(附源碼)

圖撲-數(shù)字孿生 ? 來源:物聯(lián)網袋鼠 ? 作者:物聯(lián)網袋鼠 ? 2023-09-01 12:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

3D 網頁版貪吃蛇游戲!下面來具體講一下如何實現(xiàn)。

該游戲使用 Hightopo 的 SDK 制作,總共 100 多行代碼,沒有 WebG L基礎的同學們也可很快掌握。

場景初始化

首先,我們對頁面進行初始化,包括初始化3D場景,設置地面網格,以及開啟事件監(jiān)聽等。主要代碼及注釋如下:

w = 40; // 網格間距
m = 20; // 網格行列數(shù)
d = w * m / 2;
food = null;
dm = new ht.DataModel();
g3d = new ht.graph3d.Graph3dView(dm); // 初始化一個3d場景
// 配置網格
g3d.setGridVisible(true);
g3d.setGridColor('#29B098');
g3d.setGridSize(m);
g3d.setGridGap(w);
// 將3D場景添加到body下面
view = g3d.getView();
view.className = 'main';
document.body.appendChild(view);
// 開啟事件監(jiān)聽
window.addEventListener('resize', function (e) { g3d.invalidate(); }, false);
g3d.sm().setSelectionMode('none');
view.addEventListener(ht.Default.isTouchable ? 'touchstart' : 'mousedown', function(e){
if(isRunning){
var p = g3d.getHitPosition(e); // 獲取當前鼠標點擊點在3D場景中的位置
// 根據(jù)點擊點x,z軸坐標,計算貪吃蛇前進方向
if(Math.abs(p[0]) < d && Math.abs(p[2]) < d){
if(direction === 'up' || direction === 'down'){
direction = p[0] > snake[0].p3()[0] ? 'right' : 'left';
}
else if(direction === 'left' || direction === 'right'){
direction = p[2] > snake[0].p3()[2] ? 'down' : 'up';
}
}
}else if(ht.Default.isDoubleClick(e)){
start(); // 雙擊啟動游戲
}
}, false);
start();
setInterval(function(){ if(isRunning){ isRunning = next(); } }, 200); // 每間隔200ms貪吃蛇往前走一步

創(chuàng)建食物

貪吃蛇每次吃完一個食物,其身體就會增長一段。此時需要創(chuàng)建新的食物并隨機放到一個新的位置。創(chuàng)建食物時,其位置不能與上一個位置重合,也不能與當前貪吃蛇身體重復。

/**
* 創(chuàng)建食物,并擺放到隨機位置。
* 食物不能放到貪吃蛇身上,也不能放到上一個食物的位置
*
*/
function createFood(){
var x = getRandom(), y = getRandom();
// 確保新創(chuàng)建的食物不與貪吃蛇重疊,也不與上一個食物的位置重疊
while(touchFood(x, y) || touchSnake(x, y)){ x = getRandom(); y = getRandom(); }
if(food) dm.remove(food);
food = createNode(x, y);
food.s({'shape3d': 'sphere', 'shape3d.color': 'red'});
}
/**
* x, y是否與snake身體重疊
*
* @param {*} x
* @param {*} y
* @return {*}
*/
function touchSnake(x, y){
for(var i=0; i

創(chuàng)建貪吃蛇及四周圍墻

在第一步初始化時,我們設置了網格大小及間距。這樣也就確定了整個網格的長寬以及貪吃蛇每個塊的大小。在這一步,我們?yōu)榫W格增加邊界,同時生成貪吃蛇。

/**
* 清空場景。創(chuàng)建貪吃蛇及四周圍墻。
*
*/
function start(){
dm.clear(); snake = []; score = 0; direction = 'up'; isRunning = true;
// 四周圍墻
shape = new ht.Shape();
shape.setPoints(new ht.List([
{x: -d, y: d},
{x: d, y: d},
{x: d, y: -d},
{x: -d, y: -d},
{x: -d, y: d}
]));
shape.setThickness(4);
shape.setTall(w);
shape.setElevation(w/2);
shape.s({'all.color': 'rgba(20, 120, 120, 0.5)', 'all.transparent': true, 'all.reverse.cull': true});
dm.add(shape);
// 創(chuàng)建貪吃蛇的身體
for(var i=0; i

處理貪吃蛇行走邏輯

有了貪吃蛇和食物后,下一步就是處理貪吃蛇行走邏輯。包括:

* 1. 檢測到達邊界或接觸自己身體,則游戲結束

* 2. 如果吃到食物,則身體增加一段

* 3. 否則,繼續(xù)往前走

/**

* 根據(jù)direction計算下一個位置。同時:

* 1. 檢測到達邊界或接觸自己身體,則游戲結束

* 2. 如果吃到食物,則身體增加一段

* 3. 繼續(xù)往前走

*
* @return {*}
*/
function next(){
var node = snake[0], x = node.a('x'), y = node.a('y');
if(direction === 'up') y--;
if(direction === 'down') y++;
if(direction === 'left') x--;
if(direction === 'right') x++;
if(x < 0 || x >= m || y < 0 || y >= m || touchSnake(x, y)){ return false; }
if(touchFood(x, y)){
score++;
snake.splice(0, 0, createNode(x, y));
createFood();
}else{
snake.splice(0, 0, createNode(x, y));
dm.remove(snake.pop());
}
return true;
}

到這里,整個貪吃蛇游戲就完成了。雙擊場景即可啟動游戲。點擊場景可改變貪吃蛇運動方向。


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 3D
    3D
    +關注

    關注

    9

    文章

    2959

    瀏覽量

    110789
  • JAVA
    +關注

    關注

    20

    文章

    2989

    瀏覽量

    109819
  • 源碼
    +關注

    關注

    8

    文章

    671

    瀏覽量

    30347
  • javascript
    +關注

    關注

    0

    文章

    525

    瀏覽量

    54822
  • javascript編程

    關注

    0

    文章

    2

    瀏覽量

    1926
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    3D AD庫文件

    3D庫文件
    發(fā)表于 05-28 13:57 ?5次下載

    3D閃存的制造工藝與挑戰(zhàn)

    3D閃存有著更大容量、更低成本和更高性能的優(yōu)勢,本文介紹了3D閃存的制造工藝與挑戰(zhàn)。
    的頭像 發(fā)表于 04-08 14:38 ?1055次閱讀
    <b class='flag-5'>3D</b>閃存的制造工藝與挑戰(zhàn)

    開源項目!如何制作手機用的電動3D掃描轉盤

    這個項目里,作者會教你怎么做一個簡單的電動3D掃描轉盤,主要是給手機用的。整個裝置分為三部分:頂板、齒輪板和底座。頂板是固定的平臺,用來放置你要掃描的物體。 中間的齒輪板是整個裝
    發(fā)表于 03-25 13:45

    讓人欲罷不能樹莓派貪吃蛇掌機!

    經典游戲貪吃蛇》的掌機,并為其設計了定制的3D打印外殼。這款掌機基于配備RP2350處理器的最新型號RaspberryPiPico2打造。與常規(guī)LCD或OLED
    的頭像 發(fā)表于 03-25 09:21 ?279次閱讀
    讓人欲罷不能樹莓派<b class='flag-5'>貪吃蛇</b>掌機!

    種以圖像為中心的3D感知模型BIP3D

    在具身智能系統(tǒng)中,3D感知算法是關鍵組件,它在側幫助可以幫助智能體理解環(huán)境信息,在云端可以用來輔助生成3D場景和
    的頭像 發(fā)表于 03-17 13:44 ?476次閱讀
    <b class='flag-5'>一</b>種以圖像為中心的<b class='flag-5'>3D</b>感知模型BIP<b class='flag-5'>3D</b>

    3D打印可以打印那種柔韌性好,能隨意變形的模型嗎?

    3D打印) 顯然,TPU打印的模型在經歷了多次扭曲后仍能保持結構完整性,雖然在過程中出現(xiàn)了些變形,也很快就能恢復原狀。所以說,3D打印是能夠用來制作像鞋墊、手機殼、護腕這樣的產品,是
    發(fā)表于 03-13 11:41

    EPLAN 2.6 3D制作與使用

    電子發(fā)燒友網站提供《EPLAN 2.6 3D制作與使用.pdf》資料免費下載
    發(fā)表于 03-11 15:53 ?0次下載

    SciChart 3D for WPF圖表庫

    SciChart 3D for WPF 是實時、高性能的 WPF 3D 圖表庫,專為金融、醫(yī)療和科學應用程序而設計。非常適合需要極致性能和豐富的交互式
    的頭像 發(fā)表于 01-23 13:49 ?628次閱讀
    SciChart <b class='flag-5'>3D</b> for WPF圖表庫

    騰訊混元3D AI創(chuàng)作引擎正式發(fā)布

    近日,騰訊公司宣布其自主研發(fā)的混元3D AI創(chuàng)作引擎已正式上線。這創(chuàng)新性的創(chuàng)作工具將為用戶帶來前所未有的3D內容創(chuàng)作體驗,標志著騰訊在AI技術領域的又重大突破。 混元
    的頭像 發(fā)表于 01-23 10:33 ?598次閱讀

    騰訊混元3D AI創(chuàng)作引擎正式上線

    近日,騰訊公司宣布其自主研發(fā)的混元3D AI創(chuàng)作引擎已正式上線。這創(chuàng)新性的創(chuàng)作工具,標志著騰訊在3D內容生成領域邁出了重要步。 混元3D
    的頭像 發(fā)表于 01-22 10:26 ?593次閱讀

    3D集成電路的結構和優(yōu)勢

    逐漸融合,將不同的芯片設計整合到的封裝。本文將概述3D 集成電路的優(yōu)勢,以及它們如何助力未來的先進設備實現(xiàn)異構集成。
    的頭像 發(fā)表于 12-03 16:39 ?1937次閱讀
    <b class='flag-5'>3D</b>集成電路的結構和優(yōu)勢

    發(fā)掘3D文件格式的無限潛力:打造沉浸式虛擬世界

    在當今數(shù)字化時代,3D技術的應用范圍日益廣泛,涵蓋電影后期制作、產品原型設計、虛擬現(xiàn)實(VR)、增強現(xiàn)實(AR)、游戲等眾多領域。而3D文件格式作為
    的頭像 發(fā)表于 09-26 18:14 ?1873次閱讀
    發(fā)掘<b class='flag-5'>3D</b>文件格式的無限潛力:打造沉浸式虛擬世界

    3D 建模:塑造未來的無限可能

    在當今數(shù)字化飛速發(fā)展的時代,3D 建模正以驚人的力量改變著我們的生活和工作方式。它不僅是項創(chuàng)新的技術,更是開啟未來之門的鑰匙。 3D或三維這個術語指的是三空間維度:寬度、高度和深度
    的頭像 發(fā)表于 08-16 18:24 ?1945次閱讀

    透明樹脂材料3D打印服務全透應用案例

    透明樹脂3D打印技術為設計師和創(chuàng)作者提供了獨特的創(chuàng)作可能性,特別是在需要全透效果的工藝品或模型制作中。現(xiàn)如今,3D打印技術已經成為種引領未來科技發(fā)展的重要力量,而在眾多材料中,透明樹
    的頭像 發(fā)表于 07-21 15:22 ?1075次閱讀

    3D打印汽車零部件建模設計3D打印服務

    傳統(tǒng)的汽車零件制造過程需要經過多個環(huán)節(jié),包括設計、制造、裝配等,耗時且復雜。而采用3D打印技術制造汽車零件可以大幅度縮短生產周期。設計人員可以通過CAD軟件直接進行零件設計,并將設計文件轉化為3D
    的頭像 發(fā)表于 07-21 15:01 ?1101次閱讀
    <b class='flag-5'>3D</b>打印汽車零部件建模設計<b class='flag-5'>3D</b>打印服務
    主站蜘蛛池模板: 一色屋成人免费精品网站 | 免费一看一级毛片全播放 | 巨臀中文字幕一区二区翘臀 | 91大神大战丝袜美女在线观看 | 女人张开腿男人猛桶视频 | 亚洲香蕉国产高清在线播放 | 视频1区| 久久综合九色综合欧美播 | 黄色免费小视频 | 亚洲午夜顶级嘿嘿嘿影院 | 亚洲成在线| 爱婷婷网站在线观看 | 天天综合天天看夜夜添狠狠玩 | 国产一区二区三区在线影院 | 人人搞人人 | 国产成人无精品久久久久国语 | 五月婷婷激情五月 | 天天碰夜夜 | 亚洲一区二区三区四区在线 | 国产手机在线国内精品 | 国产成人无精品久久久久国语 | 2021国产成人精品久久 | 丁香婷婷成人 | 国产一区二区三区 韩国女主播 | 狠狠去 | 天天躁夜夜躁狠狠躁2021西西 | 日韩免费一级片 | 7777奇米影视 | 中文字幕乱码人成乱码在线视频 | 美女一级毛片免费观看 | 国产精品爱啪在线线免费观看 | 天天干天天草 | 国产98在线传媒在线视频 | 天天爽夜夜爽人人爽 | 中国黄色一级毛片 | 李老汉的性生生活1全部 | a级特黄毛片 | 黄网站播放| 特黄特色三级在线播放 | 好紧好爽太大了h视频 | 日本三级最新中文字幕电影 |