您的位置:首页 > 编程语言

面向对象编程,走迷宫

2015-07-09 14:52 302 查看
建立maze.js, mazespace.js, robot.js

界面逻辑写在robotmazeinterface.js

"use strict";//maze.js

function Maze(width,height){
this.width=width;
this.height=height;

this.startX           = null;
this.startY           = null;
this.startOrientation = null;
this.endX             = null;
this.endY             = null;

this.directions=["north","east","south","west"];
this.spaces=[];
for(var x=1;x<=width;x++){
this.spaces[x]=[];
for(var y=1;y<=height;y++){
this.spaces[x][y]=new MazeSpace(this.directions);
}
}
}

Maze.prototype.setStart=function(x,y,orientation){
if(this.isInBounds(x,y)&&this.isValidDirection(orientation)){
this.startX=x;
this.startY=y;
this.startOrientation=orientation;
return true;
}

}

Maze.prototype.setEnd=function(x,y){
this.endX=x;
this.endY=y;
}
Maze.prototype.setWall=function(x,y,direction){
if(this.isInBounds(x,y)&&this.isValidDirection(direction)){
this.spaces[x][y].setWall(direction);
return true;
}
return false;

}
Maze.prototype.isValidDirection=function(direction){
return  this.directions.indexOf(direction)!==-1;
}
Maze.prototype.isInBounds=function(x,y){
return  x>0&&x<=this.width&&y>0&&y<=this.height;
}
Maze.prototype.canMove=function(x,y,direction){
if(!this.isValidDirection(direction)){
return false;
}
if(!this.isInBounds(x,y)){
return false;
}
var forwardX,forwardY;
switch(direction){
case "north":
forwardX=x;
forwardY=y+1;
break;
case "east":
forwardX=x+1;
forwardY=y;
break;
case "south":
forwardX=x;
forwardY=y-1;
break;
case "west":
forwardX=x-1;
forwardY=y;
break;
}
if(!this.isInBounds(forwardX,forwardY)){
return false;
}

if(this.spaces[x][y][direction]){
return false;
}

var opposites={
north:"south",
east:"west",
south:"north",
west:"east"
};
if(this.spaces[forwardX][forwardY][opposites[direction]]){
return false;
}

return true;
}
// "use strict";

// function Maze(width,height) {
//     this.width = width;
//     this.height = height;

//     this.startX           = null;
//     this.startY           = null;
//     this.startOrientation = null;
//     this.endX             = null;
//     this.endY             = null;

//     this.directions = ["north","east","south","west"];
//     this.spaces = [];

//     var x, y;
//     for (x=1; x <= width; x += 1) {
//         this.spaces[x] = [];
//         for (y=1; y <= height; y += 1) {
//             this.spaces[x][y] = new MazeSpace(this.directions);
//         }
//     }
// }

// Maze.prototype.setStart = function(x, y, orientation) {
//     if (this.isInBounds(x, y) && this.isValidDirection(orientation)) {
//         this.startX = x;
//         this.startY = y;
//         this.startOrientation = orientation;
//         return true;
//     }
//     return false;
// }

// Maze.prototype.setEnd = function (x, y) {
//     if (!this.isInBounds(x, y)) {
//         return false;
//     }
//     this.endX = x;
//     this.endY = y;
//     return true;
// }

// Maze.prototype.setWall = function (x, y, direction) {
//     if (this.isInBounds(x, y) && this.isValidDirection(direction)) {
//         this.spaces[x][y].setWall(direction);
//         return true;
//     }
//     return false;
// }

// Maze.prototype.isValidDirection = function(direction) {
//     return this.directions.indexOf(direction) !== -1;
// }

// Maze.prototype.isInBounds = function (x, y) {
//     return x > 0 && x <= this.width && y > 0 && y <= this.height;
// }


  

"use strict";
function MazeSpace(directions){
for(var i=0;i<directions.length;i++){
this[directions[i]]=false;
}
}

MazeSpace.prototype.setWall=function(direction){
this[direction]=true;
}


  

"use strict";
function Robot(){
this.x=null;
this.y=null;
this.orientation=null;
this.maze=null;
}

Robot.prototype.setMaze=function(maze){
this.maze=maze;
this.x=maze.startX;
this.y=maze.startY;
this.orientation=maze.startOrientation;
}
Robot.prototype.turnRight=function(){
if(!this.maze||!this.maze.isValidDirection(this.orientation)){
return false;
}
var rights={
north:"east",
east:"south",
south:"west",
west:"north"
}
this.orientation=rights[this.orientation];
return true;
}

Robot.prototype.turnLeft=function(){
if(!this.maze||!this.maze.isValidDirection(this.orientation)){
return false;
}
var lefts={
north:"west",
east:"north",
south:"east",
west:"south"
}
this.orientation=lefts[this.orientation];
return true;
}

Robot.prototype.moveForward=function(){
if(!this.canMoveForward()){
return false;
}
switch(this.orientation){
case "north":
this.y++;
break;
case "east":
this.x++;
break;
case "south":
this.y--;
break;
case "west":
this.x--;
break;
}
return true;
}

Robot.prototype.canMoveForward=function(){
if(!this.maze){
return false;
}
return this.maze.canMove(this.x,this.y,this.orientation);
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: