JS编写贪吃蛇(面向对象思想)

效果图:(抱歉,由于本人能力有限,只能暂时放静态图。后期会把动态图更新上去)

<!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8">    <title></title>    <style>        #map {            width: 500px;            height:500px;            position:relative;            background: #ccc;        }    </style></head><body><div id="map"></div><script src="Food.js"></script><script src="Snake.js"></script><script src="Game.js"></script><script>    var map = document.getElementById("map");    var game = new Game(map);    game.init();</script></body></html>

Food.js内容:
(function(){    function Food(width,height,top,left,background){            this.width = width || 20;            this.height = height || 20;            this.top = top || 0 ;            this.left = left || 0;            this.background = background || "green";    }    var newFood = null;    Food.prototype.init = function(map){        removeFood(map);        newFood = document.createElement("div");        newFood.style.width = this.width + "px";        newFood.style.height = this.height + "px";        newFood.style.background = this.background;        this.top = parseInt(Math.random()*(map.offsetHeight-this.height)/this.height)*this.height;        this.left = parseInt(Math.random()*(map.offsetWidth-this.width)/this.width)*this.width;        newFood.style.top = this.top + "px";        newFood.style.left = this.left  + "px";        newFood.style.position  = "absolute";        map.appendChild(newFood);    }    function removeFood(map){        if(newFood){            map.removeChild(newFood);        }    }    window.Food = Food;})();

Snake.js内容:
(function(){    function Snake(width,height,direction){        this.width = width ||20;        this.height = height || 20;        this.direction = direction || "right";        this.body = [            {top:1,left: 3,color: "red"},            {top:1,left: 2,color: "gold"},            {top:1,left: 1,color: "gold"}        ]    }    var newSnake = [];    Snake.prototype.init = function(map) {        removeSnake(map);        for (var i = 0; i < this.body.length; i++) {            var snake = document.createElement("div");            snake.style.width =this.width+ "px";            snake.style.height= this.height +"px";            snake.style.background = this.direction;            snake.style.position ="absolute";            snake.style.top = this.body[i].top*this.height +"px";            snake.style.left  = this.body[i].left*this.width+ "px";            snake.style.background = this.body[i].color;            map.appendChild(snake);            newSnake.push(snake);        }    }    Snake.prototype.move = function(map,food){        //移动过程中,删除原来的,创建新的;中间加上位置移动        removeSnake(map);        for(var j=this.body.length-1;j>=1;j--){            this.body[j].left = this.body[j-1].left;            this.body[j].top = this.body[j-1].top;        }        switch(this.direction){            case "right":                this.body[0].left +=1;                break;            case "left":                this.body[0].left -=1;                break;            case "top":                this.body[0].top -=1;                break;            case "bottom":                this.body[0].top +=1;        }        //移动过程中,如果蛇头的位置同食物相同,则1、创建新食物  2、蛇身体增加一部分        var last = this.body[this.body.length-1];        var x = this.body[0].left*food.width;        var y = this.body[0].top * food.height;        if(x == food.left && y == food.top){            food.init(map);            var newBo = {                top: last.top,                left:last.left,                color:"gold"            }            this.body.push(newBo);        }        this.init(map);    }    function removeSnake(map){        for(var i=0;i<newSnake.length;){            map.removeChild(newSnake[i]);            newSnake.shift();        }    }    window.Snake = Snake;})();

Game.js内容:
(function(){   function Game(map){       var food = new Food();       this.food = food;       var snake = new Snake();       this.snake = snake;       this.map = map;   }    Game.prototype.init= function(){        this.snake.init(this.map);        this.food.init(this.map);        snakeMove(this.map,this.food,this.snake);        changeDire(this.snake);    }    function snakeMove(map,food,snake){        //设置定时器,蛇移动        timer = setInterval(function(){            snake.move(map,food);            //判断蛇头位置有没有超出范围            var x = map.offsetWidth/parseInt(food.width) -1;            var y = map.offsetHeight/parseInt(food.height) -1;            if(snake.body[0].left<0 || snake.body[0].left>x){                clearInterval(timer);                alert("Game over");            }            if(snake.body[0].top<0 || snake.body[0].top>y){                clearInterval(timer);                alert("Game over");            }

},200);

}    //根据输入值改变方向    function changeDire(snake){        document.onkeydown = function(event){            event = event || window.event;            var num = event.keyCode;            switch(num){                case 37:snake.direction ="left";break;                case 38:snake.direction = "top";break;                case 39:snake.direction = "right";break;                case 40:snake.direction = "bottom";break;            }        }    }

window.Game = Game;})();
时间: 2024-10-28 11:33:47

JS编写贪吃蛇(面向对象思想)的相关文章

JS仿贪吃蛇:一串跟着鼠标的Div

贪吃蛇是一款80后.90后比较熟悉的经典游戏,下面通过简单的JS代码来实现低仿版贪吃蛇效果:随着鼠标的移动,在页面中呈现所有Div块跟随鼠标依次移动,效果如下图所示. <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>习题-仿select下拉框</title> <style> div {

使用前端原生 js,贪吃蛇小游戏

好久好久,真的是好久好久没来写过了,因为最近有点小忙.不过即使是忙,也也还是写了两个小游戏,其中一个就是这个,贪吃蛇啦. 算是一个小练手了,这个是在有点太简单了,只是第一次写这种小游戏,还是零零星星花了三五天时间,下面就是这个小游戏的gif小动画,比较简单,对比过网上其他用来写出来练手的贪吃蛇作品,这个在颜值还是功能上,都还是不错的,霍霍. 这里讲解一下功能: 空格控制开始和暂停. 方向键控制移动方向. Q 键加速,再按一次恢复常规速度(在加速状态时,按下或者方向键,或者吃到了白色小食物,速度自

JS实现——贪吃蛇

把以下代码保存成Snake.html文件,使用Google或360浏览器打开 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> <title>Snake</title> <style> </style> </head> <body> <div style="position: relative

原生JS实现贪吃蛇项目,附源码下载!

运行于谷歌浏览器.主要是利用了函数的封装思想,把每一个小功能分别封装在一个函数中,大大提高了代码的可扩展性!!提高了代码的可维护性!!!提高了代码的可阅读性!!!项目要求:1:有边界,碰到边界就game over.2:猎物没3秒增加一个,而且位置随机产生.3:吃一个猎物自身就增加一个元素.4:按上下左右控制移动方向,按空格决定暂停和前进. 实现思路:主要是一开始就把实现的功能封装在了一个先函数中去了,所以后续的功能增加就比较容易了.1:先画出了边界,就是实现了设置边界的函数.2:实现判断按键功能

13行js写贪吃蛇游戏

先上源码,版本是ES6 13行常规(700bytes) shortest snake game.html 压缩后的500bytes(当然两处document还是可以用eval压缩的) index.500bytes.html 之前很火的20行代码地址(有BUG)(900bytes) hj7jay/article/details/51011269 一维数组700char (0,0)位置的蛇身用0表示,(0,1)用1,(1,0)用10表示,以此类推 因为就13行js, 第4行 是声明 第5行 比较难理

javascript:用原生js模拟贪吃蛇游戏练习

本次练习所有的代码:可以直接复制全部然后运行看效果~ 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>title</title> 6 <style> 7 .map { 8 width: 800px; 9 height: 600px; 10 background-color:

js制作贪吃蛇小游戏

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> #map{ width: 800px; height: 800px; background-color: black; position: relative; } </style> <

实现贪吃蛇部分功能

贪吃蛇又名贪食蛇,是一款经典的小游戏.玩家使用方向键操控一条长长的蛇不断吞下豆子,同时蛇身随着吞下的豆子不断变长,当蛇头撞到蛇身或障壁时游戏结束.贪吃蛇最初为人们所知的是诺基亚手机附带的一个小游戏,它伴随着诺基亚手机走向世界.现在的贪吃蛇出现了许多衍生版本,并被移植到各种平台上.但我今天所实现的功能是蛇的移动与增长. 知识点: 1.理解android应用的基本架构,面向对象的思想,以及代码的简洁明了. 2.了解整个程序的结构. 3.理解每一行代码的意思. 操作步骤: 1.首先创建一个类,类名Ku

OC版贪吃蛇

昨天写了一个js版贪吃蛇,今天突然想写一个OC版的,来对比一下两种语言的区别 oc版功能,适配所有尺寸iphone,可暂停,可设置地图和蛇的比例,可加速 对比一下会发现js版的相对OC版的会简单一些,有想看js版的可以看我上一篇随笔 程序中没用到任何素材,效果图如下: github源码地址:https://github.com/masterChunlinHan/snake_OC 下面开始,跟js版一样,为了方便学习,所有代码都写在一个controller中,所以头文件中什么也不用写 #impor