使用JavaScript实现简单的小游戏-贪吃蛇
最近初学JavaScript,在这里分享贪吃蛇小游戏的实现过程,
希望能看到的前辈们能指出这个程序的不足之处。
大致思路
- 首先要解决的问题
- 随着蛇头的前进,尾巴也要前进。
- 用键盘控制蛇的运动方向。
- 初始化食物的时候不能初始化到蛇的身体上。
- 蛇吃食物的时候身体会变长。
- 蛇头碰到“墙”,或者自己的身体游戏结束
- 不影响游戏的实现但是有关于游戏体验的设计
- 界面的美观。
- 分数的设置。
- 等级的设置(随着分数的增加,蛇前进的速度的增加)。
- 暂停与继续的快捷键。
符号$说明
function $(id){ //在文件base.js中return document.getElementById(id);
}
代码
<!DOCTYPE html>
<html><head><title>Snake</title><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><style type="text/css" >body{background-color: #eee; font-family: 手札体-简;}#page{width: 960px; height: 560px; margin: 30px auto; background-color: #fdf5e6;box-shadow: 3px 3px 3px rgba(0,0,0,0.2),10px 10px 20px rgba(0,0,0,0.2); border-radius: 5px;}#page div{float: left;}#left{width: 710px; height: 560px; }table{margin: 20px 100px;background-color: #9cc;}td{background-color: #cff;}#right{width: 205px; height: 560px;}#right div{float: none;}#score{width: 200px; height: 190px;;background-color: #ffffe0; border-radius: 10px;box-shadow: 3px 3px 3px rgba(0,0,0,0.2),5px 5px 10px rgba(0,0,0,0.2);margin-top: 20px;}#rank{width: 200px; height: 190px; margin-top: 10px;background-color: #ffffe0;border-radius: 10px;box-shadow: 3px 3px 3px rgba(0,0,0,0.2),5px 5px 10px rgba(0,0,0,0.2);}#right .tag{height:30px; width: 200px ;font-size: 40px;color: #9cf;font-weight: bolder; }#score_num{height: 130px; width: 200px; text-align: center;color: #9cf; font-size: 100px;}#rank_num{height: 130px; width: 200px; text-align: center;color: #9cf; font-size: 100px;}#notice{width: 200px;color: #9cf; margin-top: 5px;box-shadow: 3px 3px 3px rgba(0,0,0,0.2),5px 5px 10px rgba(0,0,0,0.2);background-color: #ffffe0; border-radius: 5px;margin-top: 90px;}</style><script type="text/javascript" src="base.js"></script><script type="text/javascript">//全局变量var max_scope = 30;//贪吃蛇的移动范围var unit = 13;//每一个单元格的大小var speed = 300;//贪吃蛇移动速度var direction = 'left';//贪吃蛇移动方向var snake_body = null;var interval = null;//计时器var food = null;var score = 0;//分数(每吃一次,分数加一)var rank = 1;//随着分数的增加,等级逐渐增加,速度逐渐增加//初始化游戏,使用表格做贪吃蛇移动的范围function initGame(){snake_body = new Array();for(i = 0 ; i < max_scope; i++){var row = document.createElement("tr");for( j = 0 ; j < max_scope; j++){var cell = document.createElement("td");cell.id = i + "-" + j;cell.width = unit;cell.height = unit;row.appendChild(cell);}$("tbody").appendChild(row);}initSnake();snakeInterval();initFood();}//贪吃蛇身体初始化(随机生成)function initSnake(){var x = parseInt(Math.random()*(max_scope-2));var y = parseInt(Math.random()*(max_scope-2));var now_position = x + "-" + y;snake_body.push(now_position);setCellState(now_position);}// 贪吃蛇身体染色function setCellState(id){$(id).style.background = "#000";}// 食物染色function setFootState(id){$(id).style.background = "#b10000";}// 贪吃蛇尾巴离开位置染色function setCellStateBack(id){$(id).style.background = "";}// 获取贪吃蛇坐标function getSnakePos(i){switch(i){case 'x':return snake_body[0].split('-')[0];case 'y':return snake_body[0].split('-')[1];}}// 计时器function snakeInterval(){interval = window.setInterval('snakeMove()',speed);}// 初始化计时器function resetSnakeInterval(){window.clearInterval(interval);interval = window.setInterval('snakeMove()',speed);}// 设置蛇的移动与移动过程中发生的事件function snakeMove(){foodx = food.split('-')[0];foody = food.split('-')[1];switch(direction){case 'left':_x = getSnakePos('x');_y = parseInt(getSnakePos('y')) -1;break;case 'right':_x = getSnakePos('x');_y = parseInt(getSnakePos('y')) +1;break;case 'up':_x = parseInt(getSnakePos('x')) -1;_y = getSnakePos('y');break;case 'down':_x = parseInt(getSnakePos('x')) +1;_y = getSnakePos('y');break;default:_x = getSnakePos('x');_y = parseInt(getSnakePos('y')) -1;break;}//撞到墙游戏结束if (_x < 0 || _x >= max_scope|| _y < 0 || _y >= max_scope){alert("Game Over! Stupid!");window.clearInterval(interval);}//撞到自己游戏结束else if (eatItself(_x, _y)){alert("Game Over! Stupid!");window.clearInterval(interval);}//蛇吃到食物与吃到食物以后加一分,并设置相应的等级else if (foodx == _x && foody == _y){snake_body.unshift(foodx + '-' + foody);setCellState(snake_body[0]);initFood();score+=1;$('score_num').innerText = score;if (score == 3) {speed = 250; resetSnakeInterval();rank = 2;}if (score == 6) {speed = 200; resetSnakeInterval();rank = 3;}if (score == 10) {speed = 150; resetSnakeInterval();rank = 4;}if (score == 20) {speed = 100;resetSnakeInterval();rank = 5;}if (score == 30) {speed = 70; resetSnakeInterval();rank = 6;}//将等级写到层中$('rank_num').innerText = rank;}//普通的移动else {snake_body.unshift(_x + '-' + _y);setCellState(snake_body[0]);setCellStateBack(snake_body.pop());}}// 判断贪吃蛇头碰到身体的函数function eatItself( x,y){var nowpos = x + '-' + y;for (i = 1 ; i < snake_body.length; i++){if (nowpos == snake_body[i])return true; }}// 设置蛇的移动方向以及键盘控制暂停与继续function setDirction(){// alert(event.keyCode);if (event.keyCode == 81) window.clearInterval(interval);if (event.keyCode == 82) interval = window.setInterval('snakeMove()',speed);switch (event.keyCode){case 37:if (direction != "right")direction = "left";break;case 38:if (direction != "down")direction = "up";break;case 39:if (direction != "left")direction = "right";break;case 40:if (direction != "up")direction = "down";break;}}// 初始化食物function initFood(){var temp = new Array();for (i = 0 ; i < max_scope ; i++){for (j = 0 ; j < max_scope; j++){temp.push(i + '-' + j);}}var addFoodString = temp.join(',')+',';for(k = 0 ; k <snake_body.length; k++){addFoodString = addFoodString.replace(snake_body[k]+',',"")}var food_array = addFoodString.split(',');food = food_array[parseInt(Math.random()*(food_array.length - 1))]setFootState(food);// $('display').innerText = addFoodString;}// function pause(){// if (event.keyCode == 81) // window.clearInterval(interval);// }</script></head><body onload="initGame()" onkeydown="setDirction()" ><div id = "page"><div id = "left"><table><tbody id = "tbody"></tbody></table></div><div id = "right"><div id = "score"><div class = "tag">Score</div><div id = "score_num">0</div></div><div id = "rank"><div class = "tag">Rank</div><div id = "rank_num">1</div></div><div id = "notice">NOTICE:按'Q'暂停,'E'继续</div></div></div><!-- <div id = "display"> </div> --></body>
</html>
以下是效果图:
转载于:https://www.cnblogs.com/neveslalala/p/7442574.html
使用JavaScript实现简单的小游戏-贪吃蛇相关推荐
- 用javascript+jquery编写的小游戏-贪吃蛇(双人对战版)
前言 这是我在多年前初学jquery, 并结合javascript, 编写的一个小游戏.那洋洋洒洒几千行的js代码时刻提醒着我"不忘初心!". 效果演示 代码 引入文件 由于用到了 ...
- 敲简单前端小游戏——贪吃蛇
学了ts课程之后,跟着视频教程做了一个贪吃蛇小游戏,好好体会了一番面向对象的编程思想,顺便捡起来了一些操作dom的知识,加强了ts练习.HAPPY
- 用pygame做一个简单的python小游戏---贪吃蛇
用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...
- 做一个简单的java小游戏--贪吃蛇
做一个简单的java小游戏–贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/article/detail ...
- Java经典小游戏——贪吃蛇简单实现(附源码)
文章目录 一.使用知识 二.使用工具 三.开发过程 3.1素材准备 3.2 开发过程 3.2.1 创建项目 3.2.2 页面设计 3.23 画蛇 3.24创建蛇的食物 3.2.5增加蛇的存活状态 3. ...
- 微信小游戏——贪吃蛇
博客简介 本篇博客介绍的是微信小游戏贪吃蛇的案例,详细的开发过程,并且提供代码压缩包下载. 案例简介 布局 构建对象 响应事件 蛇头对象的移动 蛇身的移动 食物刷新 绘制得分 碰撞检验 开始界面和结束 ...
- JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)
目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1 ...
- 小游戏贪吃蛇的c++源代码
小游戏贪吃蛇的c++源代码,快来看看,还带解释 #include #include #include #include #include <conio.h> #include #inclu ...
- Python命令行小游戏—贪吃蛇
Python命令行小游戏-贪吃蛇 前言 一.贪吃蛇游戏初始界面及地图 1.游戏初始界面 2.游戏地图 二.命令符的设置.输出刷新和按键检测 1.库支持 2.c语言代码 3.Python代码(变量初始化 ...
最新文章
- ArrayList与LinkedList区别
- Linux应用层的定时器Timer使用详解【转】
- python3 整除 取模
- 夜晚 十点 React-Native 源码 暴力畜 系列
- Coursera在线学习---第十节.大规模机器学习(Large Scale Machine Learning)
- 使用 Android 实现联网
- web-packwebpack .\src\main.js .\dist\bundle.js 报错
- tomcat的基本使用
- 基于Nginx的媒体服务器技术
- jQuery hash 插件
- 利润太薄甚至亏损?小米卢伟冰解释红米Note7线下缺货问题
- 设置matlab默认工作路径
- python对文本数据进行采样_Python对wav文件的重采样实例
- OpenSSL 1.1.1 新特性: 全面支持国密SM2/SM3/SM4加密算法
- 阶段3 1.Mybatis_12.Mybatis注解开发_4 mybatis注解开发CRUD的其他操作
- [Python从零到壹] 三十四.OpenCV入门详解——显示读取修改及保存图像
- 【软工】week3-个人阅读作业-软件案例分析
- Qt界面程序中嵌入其他可执行exe程序
- 信息系统项目管理-项目变更管理-十六
- L 2 聚焦和发散思维模式
热门文章
- 如何算三角形的cotangent
- 【Python】简单实现显示图片的高斯和中值滤波效果
- python可以在windows运行吗_在Windows中,如何运行这个python脚本呢?
- redis客户端mac_推荐一款神仙颜值的Redis客户端工具
- rust石头墙几个c4_从安顺自驾石头寨一日游
- win10一直正在检查更新_教你解决“Win10系统更新失败后循环重启安装”的解决方法...
- 《深度学习工程师》听课笔记,编程作业和课后练习
- MSCNN算法:饭堂人群密度检测实现
- 藏红花怎么推广?百度下拉词|抖音下拉词框|信息流推广-三剑合璧
- tranmac不能识别_U盘插入苹果mac系统不能识别的解决方法