电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

javascript實現貪吃蛇小游戲

瀏覽:115日期:2023-06-19 08:12:40

本文實例為大家分享了js實現貪吃蛇小游戲的具體代碼,供大家參考,具體內容如下

<!DOCTYPE html><html><head> <meta charset='UTF-8'> <title>Document</title></head><body></body><script> // 貪吃蛇: // 鍵盤的方向鍵,控制蛇的方向,碰撞食物,實現增加長度的效果,撞到墻壁或自身,游戲結束 // 分析: // 地圖:提供邊界 // 食物:隨機出現,可以被碰撞(坐標重復) // 蛇:初始的固定長度,移動,改變方向,碰撞食物,碰撞墻,碰撞自己(坐標重復) class Map{ constructor(){ // 提前設定將來的地圖的樣式數據 this.w = 800; this.h = 400; this.c = '#ccc'; // 執行創建地圖方法 this.createEle(); } createEle(){ this.mapEle = document.createElement('div'); this.mapEle.style.cssText = `width:${this.w}px;height:${this.h}px;background:${this.c};margin:0 auto;position:relative;border:solid 10px black;`; document.body.appendChild(this.mapEle); } } class Food{ constructor(){ // 提前設定將來的食物的樣式數據 this.w = 20; this.h = 20; this.c = 'red'; this.x = 0; this.y = 0; // 執行創建食物方法 this.createEle(); } createEle(){ this.foodEle = document.createElement('div'); // 設置left和top時要注意,將地圖假設成了20個像素的一個格子,注意位置的換算 this.foodEle.style.cssText = `width:${this.w}px;height:${this.h}px;background:${this.c};position:absolute;left:${this.x * this.w}px;top:${this.y * this.h}px;`; // console.log(m.mapEle); m.mapEle.appendChild(this.foodEle); } randomPos(){ // 隨機位置,隨機產生的是格子的位置,不是真正的像素 this.x = random(0,(m.w-this.w) / this.w); this.y = random(0,(m.h-this.h) / this.h); // 設置位置時,要換算成像素,然后再生效 this.foodEle.style.left = this.x * this.w + 'px'; this.foodEle.style.top = this.y * this.h + 'px'; } } // 至少得有多個元素(蛇節)組成 // 每個元素都要有自己的標簽,位置,寬高,顏色 // 單個元素,使用對象包含所有信息 // 所有元素怎么辦?來個數組,包裹起來 class Snake{ constructor(){ // 1.提前設定將來的蛇節的樣式數據 this.w = 20; this.h = 20; // 2.因為蛇由多個設計組成,每個蛇節都有自己的獨立信息,所以數據結構設計成如下格式 this.body = [{ ele:null, x:4, y:3, c:randomColor() },{ ele:null, x:3, y:3, c:randomColor() },{ ele:null, x:2, y:3, c:randomColor() }]; // 7-1.提前設置默認方向 this.d = 'right'; // 3.開始創建蛇節元素,設置樣式 this.createEle(); } createEle(){ // 4.使用循環多次創建,因為有多個蛇節 for(var i=0;i<this.body.length;i++){ // 12.創建之前,需要判斷元素是否已經存在,如果已經存在,不需要創建 if(!this.body[i].ele){ this.body[i].ele = document.createElement('div'); m.mapEle.appendChild(this.body[i].ele); } this.body[i].ele.style.cssText = `width:${this.w}px;height:${this.h}px;background:${this.body[i].c};position:absolute;left:${this.body[i].x * this.w}px;top:${this.body[i].y * this.h}px;`; } // 找到蛇頭 this.body[0].ele.innerHTML = '0'; // 5.延遲之后,開始移動 setTimeout(()=>{ this.move(); },300); } move(){ // 6.從最后一個元素向前找前一個元素的坐標,直到第一個 for(var i=this.body.length-1; i>0; i--){ this.body[i].x = this.body[i-1].x; this.body[i].y = this.body[i-1].y; } // 7.第一個元素根據默認方向,決定想哪走 switch(this.d){ case 'left': this.body[0].x -= 1; break; case 'right': this.body[0].x += 1; break; case 'top': this.body[0].y -= 1; break; case 'bottom': this.body[0].y += 1; break; } // 8.移動過程中,判斷是否撞到邊界,任意一個邊界都不行 if(this.body[0].x < 0 || this.body[0].y < 0 || this.body[0].x > ((m.w-this.w) / this.w) || this.body[0].y > ((m.h-this.h) / this.h)){ alert('撞墻了'); // 利用return的停止,結束程序 return; } // 9.移動過程中,判斷是否與食物的坐標重復,如果重復 if(this.body[0].x === f.x && this.body[0].y === f.y){ // 給蛇增加一個蛇節 this.body.push({ ele:null, x:this.body[this.body.length-1].x, y:this.body[this.body.length-1].y, c:randomColor() }) // 刷新食物的坐標 f.randomPos(); } // 10.移動過程中,判斷蛇頭的坐標是否與某個任意一個蛇節的坐標重復 for(var i=1;i<this.body.length;i++){ if(this.body[0].x == this.body[i].x && this.body[0].y == this.body[i].y){ // 如果重復,撞到自己,結束程序 alert('撞到自己了'); return; } } // 以上只是在修改坐標,生效了么?設置回去了么? // 走的過程中有可能吃到食物,增加一個蛇節(元素),創建元素 // 11.所以,使用創建蛇節方法,重新設置蛇節的位置以及判斷是否需要創建新元素 this.createEle(); } direct(type){ // 14.處理鍵盤穿件來的code值 // 處理之前要先判斷,當前是否按下了相反方向 // 如果是相反方向,直接結束判斷,不執行 // 如果不是相反方向,改變初始的默認方向 switch(type){ case 37: if(this.d === 'right') break; this.d = 'left'; break; case 38: if(this.d === 'bottom') break; this.d = 'top'; break; case 39: if(this.d === 'left') break; this.d = 'right'; break; case 40: if(this.d === 'top') break; this.d = 'bottom'; break; } } } function random(a,b){ return Math.round(Math.random()*(a-b)+b) } function randomColor(){ return `rgb(${random(0,255)},${random(0,255)},${random(0,255)})` } var m = new Map(); var f = new Food(); // 為了測試,先用計時器,重復執行,看一看隨機效果 // setInterval(() => { f.randomPos(); // }, 500); var s = new Snake(); // 13.當按下鍵盤時,將按下的鍵盤的code值,傳給蛇的專屬處理方法 document.onkeydown = function(eve){ var e = eve || window.event; var code = e.keyCode || e.which; s.direct(code); } // 因為后期要做不允許掉頭的效果 // 所以,采取當前方法:兩個分支處理方向</script></html>

javascript實現貪吃蛇小游戲

更多有趣的經典小游戲實現專題,分享給大家:

C++經典小游戲匯總

python經典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經典游戲 玩不停

java經典小游戲匯總

javascript經典小游戲匯總

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 | 橡胶接头|可曲挠橡胶接头|橡胶软接头安装使用教程-上海松夏官方网站 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 汽液过滤网厂家_安平县银锐丝网有限公司 | 北京模型公司-工业模型-地产模型-施工模型-北京渝峰时代沙盘模型制作公司 | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 深圳湾1号房价_深圳湾1号二手房源 | 步入式高低温测试箱|海向仪器 | 脉冲除尘器,除尘器厂家-淄博机械 | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | 智慧养老_居家养老_社区养老_杰佳通 | 脑钠肽-白介素4|白介素8试剂盒-研域(上海)化学试剂有限公司 | 我车网|我关心的汽车资讯_汽车图片_汽车生活! | 智慧食堂_食堂管理系统_食堂订餐_食堂消费系统—客易捷 | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | 金联宇电缆|广东金联宇电缆厂家_广东金联宇电缆实业有限公司 | 慢回弹测试仪-落球回弹测试仪-北京冠测精电仪器设备有限公司 | 碳刷_刷握_集电环_恒压簧_电刷厂家-上海丹臻机电科技有限公司 | 并网柜,汇流箱,电控设备,中高低压开关柜,电气电力成套设备,PLC控制设备订制厂家,江苏昌伟业新能源科技有限公司 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 心肺复苏模拟人|医学模型|急救护理模型|医学教学模型上海康人医学仪器设备有限公司 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 注塑机-压铸机-塑料注塑机-卧式注塑机-高速注塑机-单缸注塑机厂家-广东联升精密智能装备科技有限公司 | 「阿尔法设计官网」工业设计_产品设计_产品外观设计 深圳工业设计公司 | 模切之家-专注服务模切行业的B2B平台! | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 顶空进样器-吹扫捕集仪-热脱附仪-二次热解吸仪-北京华盛谱信仪器 | 工控机-图像采集卡-PoE网卡-人工智能-工业主板-深圳朗锐智科 | 电子海图系统-电梯检验系统-智慧供热系统开发-商品房预售资金监管系统 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 宜兴市恺瑞德环保科技有限公司 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 |