今天想把一个小游戏分享给大家,那就是贪吃蛇
我想应该没有人会未曾玩过吧
其实我这个人也很懒写教程,但本着人人为我,我为人人的精神和自己
以前学javascript的路途如此艰辛和看了这么多人用javascript写游戏
却没有人认真的写过一个教程,都是把代码拿上来就算,这样让初学者看的
很辛苦和教程一点意思都没有
所以本教程确定先不放源码上来,先把思路给大家
先上图吧

大家可以看到玩这个游戏不外符有三样东西,一个是蛇,食物,同地图
就这样简单
好了,我们再分析一下游戏有什么规则,其实自己以前都没想这么多
但实现起来才发觉这个东西挺重要的
1,蛇不能碰自己,也就是蛇的头不能和自己的身体接触,还有不能碰墙
不然就game over
2,,蛇在运动的时候如果方向是向左的话就不能向右,如果是向下的话就不能
向上运动,其他两种情况一样
3蛇身越长的时候,运动的速度就越快
好了,就这么多了,应该就没有了
分析了这些,就可以进一步的思考代码应该怎么写
1,地图生成
2,蛇身和食物的构造
3,运动函数的构造
4,控制 上下左右和加速(长按就是加速)根据上图,大家就很容易想到地图可以用表格生成对不对
但还有一个每一个表格应该都有他的坐标
下面贴出代码var table = $('<table></table>');var tr = '<tr></tr>';var td = '<td style="width:40px;height:40px;background:white"></td>';for (var i = 0;i<8 ;i++ ){var tr_obj = $(tr);for(var j=0; j<20;j++){tr_obj.append($(td).attr('id',i+'_'+j));}table.append(tr_obj);}$(body).append(table);
上面用了一下简单的jquery 写法 上面生成了一个 长20 高8 的表格table
和为每个td分配了Id 值为自身的坐标,张来用来索引地图生成以后,我们再考虑一下蛇身和食物的构造
如果能看出上图的话就很容易想到蛇身和食物单位都是td
但他们的颜色都不一样,我们需要用一个数组来记录蛇身
内容就是td的坐标 如果大家再仔细想的话,就可以能会
发现一个问题,就是蛇吃完食物的时候,系统都会分配一个
新的食物出现,但食物一定不会出现在蛇身上面
那就是在判断分配食物出现的位置之前,先确定一下位置的x,y是否在蛇身
好简单的 用inArray()来判断,下面贴出代码
var food_random = function(){var x =parseInt( Math.random()*19);var y =parseInt( Math.random()*8);var tem =['#',y,'_', x].join('');if($.inArray(tem, snake_body)>-1){food_random();}else{draw($(tem),'yellow');food_loaction = tem;}}
上面的代码用了就是这个判断,随机的生成x,y 位置再和蛇身比较,如果存在的
则递归的再来一次,递归的效率有点差,不知道大家有没有深入研究一下
递归是怎样实现的,如果不幸运的话,栈会撑爆的
好了,下一步到就运动函数的构造了
其实如果读者仔细的话看一下上面的图片就可以知道
蛇的运动其实可以用背景色变化来模拟,就好似动画一样
一个动作就要画1000多张图,然后翻起来,人物就好像真的
动了,哈哈,又如赛车一样,你觉得快只是他不动地车道往后拉一样
回到蛇运动这里,我们可以这样构造
向那个方向的话,都是它的蛇身最后一格往前面放
如果不明看一下上面的规则
代码就是蛇身 一个简单的数组操作
举一个例子就是蛇向右运动
var moveRight = function() {if(current_location.x==19){$(document).unbind('keydown'); //游戏结束return false;}else{current_location.x++; //记录蛇头的位置var tem = ['#',current_location.y,'_', current_location.x].join('');if($.inArray(tem, snake_body)>-1){ //自己撞自己啊$(document).unbind('keydown'); //游戏结束return false;}snake_body.push(tem);if(food_loaction==tem){//你知道为什么这里要这样做吗tem =  ['#',current_location.y,'_', ++current_location.x].join('');snake_body.push(tem);food_random();}draw($(snake_body.shift()),'white')draw($(tem),'yellow');return true;}}代码分析,首先就是用一个 current_location变量记录每个时刻蛇的位置方便边界检查,如果撞墙和撞自己的话就gameover,还有正好下一个位置是食物的话就把食物放进蛇身draw($(snake_body.shift()),'white')draw($(tem),'yellow');这里就是填充背景色啦,把蛇身的最后一个变为白色 把新的变成黄色,用js十分容易 实现
下面就是轮到控制按键的实现$(document).keydown(function(e){window.clearInterval(timer);var goon = true;switch(e.keyCode){case 37:  goon=moveleft(); current_direction = 'left';break;case 38: goon= moveup(); current_direction = 'up';break;case 39: goon= moveRight() ;current_direction = 'right';break;case 40: goon= movedown(); current_direction = 'down';break;}if(goon)system_action()});var system_action = function(){timer =      window.setInterval(function(){switch( current_direction){case 'left':moveleft();break;case 'right':moveRight();break;case 'up':moveup();break;case 'down':movedown();break;}}, speed);//speed为600比较流畅
   }下面分析程序
上面的很简单绑定一下按键事件上下左右的按键,读者会发现有一个current_direction 变量,无错,这就是保存当前的运动方向因为用户按键完成以后系统就会为蛇自动运动,明白吗还有避免用户一直长按,所以在代码之前先清除定时器按完键再恢复定时器!!!!代码就这么多,是不是觉得很简单的,其实你也可以一定要自己动手啊记住tem =  ['#',current_location.y,'_', ++current_location.x].join('');比用+号连接字符串效率高多了,有兴趣的探究一下汇编的实现如果多人支持的话我会贴出源码的,大家要积极啊var draw = function(obj, c) {obj.css('background',c)} 非常简单的填充背景色代码,学过window创建窗口和消息机制的人一定觉得很相似好拉,下次再说

转载于:https://www.cnblogs.com/simonlu/archive/2012/06/09/2543401.html

人人都可以写贪吃蛇(白话javascript版)相关推荐

  1. Linux下的图形库curses写贪吃蛇,酷

    最近看到大神在Linux下写的贪吃蛇代码,用到了curses图形库,可能很多人都没有用过,分享出来给大家. 在ubuntu下安装curses图形库命令 sudo apt-get install lib ...

  2. c++贪吃蛇_细致的C语言写贪吃蛇教程+详细思路-适合新手附源码

    在有用C写贪吃蛇的一个想法之后,上网查了几个教程,觉得不是很能看懂.恩...或者说不是一下子就能看出来思路+具体怎么实现.所以,我花了早自习的时间想了想如何用最简单的方法实现,晚上大约两个小时写了出来 ...

  3. c语言写贪吃蛇什么水平_细致的C语言写贪吃蛇教程+详细思路-适合新手附源码...

    #史上最详细的C语言贪吃蛇教程 #前言 在有用C写贪吃蛇的一个想法之后,上网查了几个教程,觉得不是很能看懂.恩...或者说不是一下子就能看出来思路+具体怎么实现.所以,我花了早自习的时间想了想如何用最 ...

  4. 【课件】使用Python写贪吃蛇游戏(pygame)

    使用Python写贪吃蛇游戏(pygame) 课件地址:https://blog.csdn.net/a772304419/article/details/130087202 本地路径: cd /D/W ...

  5. 致敬科比,JS 手写贪吃蛇

    用 JS 手写贪吃蛇,致敬黑曼巴科比,实现功能有: 开始/暂停/继续游戏 简单/一般/困难选择 游戏积分榜 暗黑/紫金模式切换 在本场 Chat 中,会讲到如下内容: Bootstrap 组件使用 页 ...

  6. 自己动手写贪吃蛇AI——附源码和程序

    从第一次构想写贪吃蛇AI,到现在两个学期才落实下来.其实之前用手机C4droid控制台写过一次,不是很理想,这次把这个坑填了吧,非要问有什么意义的话,自娱自乐罢了. 再来回顾一下这张动图,非常的流畅, ...

  7. python编程可视化小程序_人人都可以写的可视化Python小程序第二篇:旋转的烟花...

    兴趣是最好的老师 枯燥的编程容易让人放弃,兴趣才是最好的老师.无论孩子还是大人,只有发现这件事情真的有趣,我们才会非常执着的去做这件事,比如打游戏.如果编程能像玩游戏一样变得有趣,我相信很多人就特别愿 ...

  8. 使用python完成的一个烟花小程序-人人都可以写的可视化Python小程序第二篇:旋转的烟花...

    兴趣是最好的老师 枯燥的编程容易让人放弃,兴趣才是最好的老师.无论孩子还是大人,只有发现这件事情真的有趣,我们才会非常执着的去做这件事,比如打游戏.如果编程能像玩游戏一样变得有趣,我相信很多人就特别愿 ...

  9. python100行代码-怎样写贪吃蛇小游戏?用100行python代码轻松解决!

    大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的贪吃蛇.在网上,贪吃蛇教程蛮多的,但要安装蛮多库的,而且也不够清晰,今天的代码比较短, ...

  10. python制作贪吃蛇游戏_用Python写贪吃蛇游戏的代码实例

    这篇文章主要为大家详细介绍了Python贪吃蛇游戏的编写代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近在学Python,想做点什么来练练手,命令行的贪吃蛇一般是C的练手项目,但是一时之间 ...

最新文章

  1. 计算机书籍-Python机器学习算法大全
  2. 【总结】有三AI秋季划模型优化组3月直播讲了哪些内容,为什么每一个从事深度学习的同学都应该掌握模型优化的内容...
  3. WCF技术剖析之二十一:WCF基本异常处理模式[中篇]
  4. Kubernetes:全面了解 Deployment
  5. Java引用类型——强引用、软引用、弱引用和虚引用
  6. 十天学会PHP(第五版),十天学会php之第五天
  7. java相等_Java 判断相等
  8. nginx启动与停止
  9. 【C++】C++标准中定义的名字和标识符
  10. 今日早上出来还是阴天
  11. 转:windows 蓝屏代码 .
  12. LeetCode-外观数列-纯C递归
  13. KEPServerEX 6 之 EX 6.11.718.0 发布说明
  14. Word编辑页码不从第一页开始
  15. GhostXP_SP3雨林木风纯净版Y7.0(09年12月更新版) 【雪豹】
  16. 常用API——Object、Objects、StringBuilder
  17. BL0940电能计量 设计
  18. 达里奥:我阅人无数,没有一个成功人士天赋异禀 |【经纬低调分享】
  19. jmeter创建快捷方式到桌面
  20. SQL Anywhere(ASA) 数据库“File is shorter than expected -- transaction rolled back”错误修复...

热门文章

  1. java内部类简单解析
  2. LeetCode--026--删除排序数组中的重复项(java)
  3. MySQL系列(三)
  4. Golang学习(12)——regex包
  5. 《Lua程序设计》第1章 开始 学习笔记
  6. iOS开发之控制器之间传值
  7. 如何将文章列表用li分两列显示
  8. 在Hadoop集群实施成功后再次格式化名称节点,datanode无法加入集群的处理办法...
  9. ISA 2004 Site-To-Site ×××截图详解
  10. 一个发人深省的经典理财故事