首页 > 编程语言 >贪吃蛇小程序

贪吃蛇小程序

时间:2023-06-13 12:01:31浏览次数:35  
标签:direction gridSize 20 snakeArray food 程序 贪吃蛇 gameCanvas

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title> </head> <body> <h1>画布canvas</h1> <canvas id="gameCanvas" width="600" height="600" style="">     您的浏览器版本过低,请更新后再试 </canvas> </body> </html> <script>     const gameCanvas = document.getElementById("gameCanvas")//声明变量     const ctx = gameCanvas.getContext("2d")//获取canvas上下文环境,可以理解成获取了canvas功能     const gridSize = 30//方块大小     const bgColor = "#ddbb80", snakeColor = "#3333ff", foodColor = "#00ff00"     //背景颜色 蛇的颜色 食物的颜     let food     let direction = 1     const snakeArray = [45, 44, 43] //蛇初始位置     //snake移动     let snakeMoveTimer = null     // let canChangeDirection = true     /*  //绘制一条线       ctx.beginPath()//开始绘制       ctx.moveTo(0,20)//把笔移动到这个点       ctx.lineTo(600,20)//画线到这个点       ctx.stroke()//动手画*/ function drawBoard(){     //绘制一个长方形     ctx.fillStyle = bgColor     ctx.fillRect(0, 0, gameCanvas.width, gameCanvas.height)  //在0,0这个点,向右向下绘制一个长方形,宽度为width,height     //在画布上画网格     for (let x = 0; x <= gameCanvas.width; x += gridSize) {         ctx.beginPath()         ctx.moveTo(0, x)         ctx.lineTo(600, x)         ctx.stroke()     }//横线     for (let y = 0; y <= gameCanvas.height; y += gridSize) {         ctx.beginPath()         ctx.moveTo(y, 0)         ctx.lineTo(y, 600)         ctx.stroke()     }//竖线 }
    function drawSquare(color, number) {         ctx.fillStyle = color         ctx.fillRect(number % (gameCanvas.width / gridSize) * gridSize + 1, Math.floor(number / (gameCanvas.width / gridSize)) * gridSize + 1, 30 - 2, 30 - 2)     }     function gameOver(){         clearInterval(snakeMoveTimer)         onkeydown=null     }
    //绘制食物     /* let food      do {          food = Math.floor(Math.random() * gameCanvas.width / gridSize * gameCanvas.height / gridSize)      } while (snakeArray.filter(value => value === food).length > 0)//生成了新数组,导致内存浪费,不建议使用*/
    /* let food;      do {          food = Math.floor(Math.random() * (gameCanvas.width / gridSize) * (gameCanvas.height / gridSize));      } while (snakeArray.some(value => value === food))//同上,但不生成新数组*/     function createFood() {         do {             food = Math.floor(Math.random() * (gameCanvas.width / gridSize) * (gameCanvas.height / gridSize));         } while (snakeArray.find(value => value === food))//同上         drawSquare(foodColor, food)     }     function snakeMove() {         const next = snakeArray[0] + direction         if (next < 0 || next > 399 || (snakeArray[0] % 20 === 19 && next % 20 === 0) || (snakeArray[0] % 20 === 0 && next % 20 === 19) ||             snakeArray.find(value => value === next)) {             return gameOver()         }         snakeArray.unshift(next)         let deleteSnakeItem         if (food !== next) deleteSnakeItem = snakeArray.pop()         else createFood()         drawSquare(bgColor, deleteSnakeItem)         snakeArray.forEach(value => drawSquare(snakeColor, value))     }       function init(){     drawBoard()     snakeMoveTimer=setInterval(snakeMove,200)     createFood()     //判断蛇与生成的食物是否重叠,如果当前位置和生成的食物重叠,就继续生成新的食物     onkeydown = function (event) {         //通过event触发键盘事件使蛇移动.  37,38,39,40分别代表左,上,右,下         console.log(event.keyCode)         if (event.keyCode === 37&&direction!==1) {             return direction = -1         }         if (event.keyCode === 38&&direction!==20) {             return direction = -20         }         if (event.keyCode === 39&&direction!==-1) {             return direction = 1         }         if (event.keyCode === 40&&direction!==-20) {             return direction = 20         }     } } init() </script>

标签:direction,gridSize,20,snakeArray,food,程序,贪吃蛇,gameCanvas
From: https://www.cnblogs.com/tw22419/p/17477158.html

相关文章

  • 万物皆可“小程序”——迟到的iOS 14之猜想
    这是一篇没能赶上热点的文章,但好在对技术的讨论总是多多益善,不分冷热。作者:唐赓&LiveVideoStack编辑:CocoLiang时间倒回4月9日,9To5Mac通过iOS14的代码,猜测苹果或将推出全新的APP下载和使用方式,用户只需扫描二维码或打开链接,即可体验应用程序的某些特定功能,而不需要在iPhone或iPad......
  • 吉大 高级语言程序设计
    基础知识算法——程序设计精髓什么是算法?一个计算过程,具体指明应该进行的操作描述了解决问题的方法和途径是程序设计的基础和精髓有效算法的特点有穷性、确定性、有效性输入、输出组成基本操作表达式、变量赋值、读(输入)、写(输出)基本的控制结构顺序控制结构、......
  • 一位老程序员的忠告:别想着靠技术生存一辈子
    笔者目前是自己单干,但此前有多年在从事软件开发工作,回头想想自己,特别想对那些初学JAVA/DOT、NET技术的朋友说点心里话,希望我们的体会多少能给你们一些启发。 一、在一个地方工作8小时就是“穷” 在国内,你千万不要因为学习技术,就可以换来稳定的生活和高的薪水待遇......
  • 提升用户体验:在小程序环境中充分利用Ionic框架
    Ionic是一个用于构建跨平台移动应用程序的开源框架。它结合了HTML、CSS和JavaScript等技术,帮助开发者创建具有原生应用体验的移动应用程序。Ionic提供了一套用户界面组件和工具,可用于构建高度交互和美观的移动应用界面。 Ionic基于Angular框架,利用Angular的能力来构建复杂的......
  • Qt打包程序移动到新环境时提示QAxBase::setControl: requested control Excel.Applica
    在新环境中运行程序时发现程序异常结束,查看日志内如如下,异常原因应该是我是程序中对Excel表格操作产生的。Warning:File:()Line:(0)QAxBase::setControl:requestedcontrolExcel.Applicationcouldnotbeinstantiated(2023-06-1217:40:58)Warning:File:()Line:(0)QAx......
  • Qt打包程序移动到新环境时提示 QMYSQL driver not loaded
    Qt版本是:Qt6.3.2MySQL版本是:mysql8.0.33运行时日志提示如下:Warning:File:()Line:(0)QSqlDatabase:QMYSQLdrivernotloaded(2023-06-1217:16:56)Warning:File:()Line:(0)QSqlDatabase:availabledrivers:QSQLITEQMARIADBQMYSQLQODBCQPSQL(2023-06-1217:16:56)......
  • 人车网租赁软件|租赁系统定制|租赁小程序开发
    在如今网络时代,移动互联早已成为人们日常日常生活不可或缺的一部分。伴随着移动终端的不断普及化,更多的企业逐渐把目光看向移动智能终端的开发。人车网租赁小程序定制开发是近几年新型的一种开发方式,对于租赁行业来说线上租赁模式提升了线上线下的发展,那么租赁小程序有哪些功能呢?人......
  • 广州拼团小程序如何开发?微信拼团小程序开发方案!
    广州拼团小程序如何开发?随着社交电商的兴起,拼团活动的火热,拼团已经成为了一种非常流行的购物方式。而拼团小程序便成为了一个备受关注的选择。广州拼团小程序的开发,可以帮助商家更好地开展拼团业务,提高销售额和用户粘性。下面,名锐讯动跟大家一起探讨一下广州微信拼团小程序如何开发......
  • 开发一次、运行多端:Weex与小程序容器的卓越优势解析
    Weex是一个跨平台的移动应用开发框架,由阿里巴巴旗下的阿里巴巴前端团队开发。它允许开发者使用单一的代码库来构建同时适用于iOS和Android平台的移动应用。Weex使用基于Vue.js的声明式语法来描述应用程序的界面,并通过JavaScript运行时引擎在移动设备上解析和渲染界面。 Weex......
  • kanzi的android程序修改包名和应用程序名字
    1、修改进程名: 2、修改应用程序名字: 3、修改系统调度ID 通知权限 ......