WEB 八

作者: A_9c74 | 来源:发表于2018-06-06 23:07 被阅读0次

JS 面向对象编程

利用JS面向对象编程写一个贪吃蛇小游戏

思路:地图->蛇->让蛇运动->用键盘控制蛇运动->食物->食物随机->蛇吃食物并让蛇边长->添加死亡判定

首先创建一个地图类

function Map(){
            this.width=1200;
            this.height=600;
            this.margin="0 auto";
            this.bgcolor="black";
            this._map=null;
            this.createMap=function(){
                if(this._map==null){
                    this._map=document.createElement("div");
                    this._map.style.width=this.width+"px";
                    this._map.style.height=this.height+"px";
                    this._map.style.backgroundColor=this.bgcolor;
                    this._map.style.margin=this.margin;
                    this._map.style.position="relative";
                    this._map.style.overflow="hidden";
                    document.body.appendChild(this._map);
                }
            }
        }

然后在window.onload事件里面新建一个MAP实例,调用createMap方法;

创建一个蛇类

function Snake(){
            this.width=30;
            this.height=30;
            this.direct=r="right";
            this.position="absolute";
            this.snakebody=[[1,1,"white",null],[2,1,"white",null],[3,1,"blue",null]];
            this.createSnake=function(){
                for(i=0;i<this.snakebody.length;i++){
                    if(this.snakebody[i][3]==null){
                        this.snakebody[i][3]=document.createElement("div");
                        this.snakebody[i][3].style.width=this.width+"px";
                        this.snakebody[i][3].style.height=this.height+"px";
                        this.snakebody[i][3].style.position=this.position;
                        this.snakebody[i][3].style.backgroundColor=this.snakebody[i][2];
                        map._map.appendChild(this.snakebody[i][3]);
                    }
                    this.snakebody[i][3].style.left=this.snakebody[i][0]*30+"px";
                    this.snakebody[i][3].style.top=this.snakebody[i][1]*30+"px";
                }
            }
            this.moveSnake=function(){
                for(var i=0;i<this.snakebody.length-1;i++){
                    this.snakebody[i][0]=this.snakebody[i+1][0];
                    this.snakebody[i][1]=this.snakebody[i+1][1];
                }
                    switch (this.direct){
                        case"right":this.snakebody[this.snakebody.length-1][0]+=1;break;
                        case"left":this.snakebody[this.snakebody.length-1][0]-=1;break;
                        case"top":this.snakebody[this.snakebody.length-1][1]-=1;break;
                        case"down":this.snakebody[this.snakebody.length-1][1]+=1;break;
                    }
                this.snackCollider();
                if(this.snakebody[this.snakebody.length-1][0]>=40){
                    this.snakebody[this.snakebody.length-1][0]=0;
                }
                if(this.snakebody[this.snakebody.length-1][0]<0){
                    this.snakebody[this.snakebody.length-1][0]=39;
                }if(this.snakebody[this.snakebody.length-1][1]>=20){
                    this.snakebody[this.snakebody.length-1][1]=0;
                }
                if(this.snakebody[this.snakebody.length-1][1]<0){
                    this.snakebody[this.snakebody.length-1][1]=19;
                }


                if(this.snakebody[this.snakebody.length-1][0]==food.x&&this.snakebody[this.snakebody.length-1][1]==food.y){
                    this.snakebody.unshift([
                        this.snakebody[this.snakebody.length-1][0],
                        this.snakebody[this.snakebody.length-1][1],
                        "white",
                        null
                    ]);
                    food.createFood();
                }
                this.createSnake();

            }
this.snackCollider=function(){
                for(var i=1;i<this.snakebody.length-1;i++){
                    if(this.snakebody[this.snakebody.length-1][0]==this.snakebody[i][0]&&this.snakebody[this.snakebody.length-1][1]==this.snakebody[i][1])
                    {
                        clearInterval(time);
                        alert("撞死了");
                    }
                }
            }
        }

蛇类里面包括了蛇的运动方法 创建方法 死亡判定;

同再window.onload里新建并调用方法;

创建食物类,在createFOOD方法里面添加随机产生的函数;

function Food() {
this.x = 0;
this.y = 0;
this.width = 30;
this.height = 30;
this.bgcolor = "red";
this._food = null;
this.createFood = function () {

                        this.x = Math.floor(Math.random() * 40);
                        this.y = Math.floor(Math.random() * 20);
                if (this._food == null) {
                    this._food = document.createElement("div");
                    this._food.style.position = "absolute";
                    this._food.style.width = this.width + "px";
                    this._food.style.height = this.height + "px";
                    this._food.style.backgroundColor = this.bgcolor;
                    map._map.appendChild(this._food);
                }

                this._food.style.left = this.x * this.width + "px";
                this._food.style.top = this.y * this.height + "px";
            }
    }

实例化对象并调用方法

添加计时器让蛇一直在运动;

有一个BUG食物可能会出现在蛇的身体里面

[图片上传失败...(image-65ff1c-1528297648579)]

在createfood里面添加了判断函数

但是经过测试无法实现;

相关文章

网友评论

      本文标题:WEB 八

      本文链接:https://www.haomeiwen.com/subject/tzzisftx.html