構建乙個地圖,
1.需要乙個世界類,包含兩個屬性,乙個圖例屬性,乙個儲存地圖的屬性。
2.需要乙個地圖類,地圖類封裝儲存,取出地圖元素的方法,以及儲存地圖。
乙個格仔類,該類為該格仔,x,y座標。
3.動物類,儲存動物能用方向等資訊。
流程:給世界類輸入地圖和圖例(物件),1,世界類儲存輸入的地圖為地圖類,2,儲存圖例。通過乙個foreach函式給該世界物件裡的地圖屬性設定上每個元素,通過乙個elementfromchar函式把非空的格仔設定成動物類。
給世界新增了以乙個屬性tostring,獲取每個地圖類的格仔元素,通過charfromelement函式輸出成字串。
4,新增乙個view類為小動物的可視範圍。該類會在世界類呼叫turn方法裡面的letact方法時呼叫,也就是在動物移動的時候的才會去看往哪個方向可以移動。
整個過程大概是這樣:通過傳入地圖字串和圖例,構建乙個世界類的物件,世界類物件world有兩個屬性,grid是乙個地圖類,用來儲存地圖,legend儲存圖例物件。在world建構函式中會執行乙個地圖類(三個屬性和四個方法,屬性分別為space地圖陣列,為一維陣列,另外2個為地圖的寬和高,get方法,讀取某個位置字元,set設定某個位置的字元,isinside方法判斷該位置是否出界,並且實現了乙個自己的foreach方法,目的是頂乙個遍歷grid的方法),可以使用call傳遞context)的方法,根據地圖字串設定好這個地圖類,使用turn方法讓world進行移動,移動規則為首先找到所有的動物即圓圈,根據已經建好的動物類的方法,使用worldletact方法讓其移動,未來避免重複移動,在每次的移動中呼叫動物的act方法,呼叫的同時傳入乙個該位置的view類,同的view的方法檢查可以移動的位置,移動是隨機移動,移動方向根據view的look檢視是否可以移動,不能的話找乙個空位置移動,然後通過world tostring列印輸出。
var plan = [
"############################",
"# # # o ##",
"# #",
"# ##### #",
"## # # ## #",
"### ## # #",
"# ### # #",
"# #### #",
"# ## o #",
"# o # o ### #",
"# # #",
"############################"];
function vector(x,y)
vector.prototype.plus=function (other) ;
//網格類
function grid(width,height)
grid.prototype.isinside=function(vector);
grid.prototype.get=function(vector)
grid.prototype.set=function(vector,value)
grid.prototype.foreach=function(f,context)}}
}var grid=new grid(5,5);
grid.set(new vector(1,2),"x");
console.log(grid);
//對映方向
var directions = ;
//蠢萌小動物物件
function randomelement(array)
var directionnames = "n ne e se s sw w nw".split(" ");
function bouncingcritter();
bouncingcritter.prototype.act=function(view);
};function elementfromchar(legend, ch)
//world物件
function world(map,legend)
});}//wall物件佔據空間
function wall(){}
//轉化字串
function charfromelement(element)
world.prototype.tostring = function()
output+="\n";
}return output;
} //world 新增turn方法
world.prototype.turn = function()
},this);
};world.prototype.letact=function(critter, vector)
}};world.prototype.checkdestination = function(action, vector)
}var world=new world(plan,);
console.log(world.tostring());
//定義乙個view類為小動物的可視範圍
function view(world,vector)
view.prototype.look=function(dir);
view.prototype.findall=function(ch)
view.prototype.find=function(ch);
for(var i=0;i<5;i++)
js建立物件例項
js建立物件例項 早期版本 建立物件 var person new object person.name zzl1011 person.age 28 person.job php person.sayname function 後來 工廠模式 function createperson name,a...
js物件導向例項
json方式來編寫物件 簡單 不適合多個物件 var json json.show 理所當然彈出的是object this指的是json call函式 function show show window show call 和上面的一樣也是彈出window call 其實就是呼叫函式 但又和普通的函...
原生js例項物件方法
array中的方法 tostring 把陣列轉換為字串,使用逗號分隔 valueof 返回陣列物件本身 棧方法 先進後出 ary.push 該方法有乙個返回值,表示陣列最新的長度,該方法中可以設定多個引數 ary.pop 返回陣列中最後乙個字,且會修改陣列的長度 佇列方法 先進先出 ary.shif...