ErikBooy007
Terugkerende gebruiker
- Lid geworden
- 24 mei 2007
- Berichten
- 3.814
Ik ben maar eens weer begonnen met een beetje javascript om mijn javascriptkennis bij te spijkeren. Uiteindelijk heb ik het spel Sokoban in JavaScript geschreven. Ik heb nu niet bepaald de mooiste technieken gebruikt (ga het waarschijnlijk nog een keer doen, maar dan met een canvas), maar het was vooral om het OOP een beetje onder de knie te krijgen.
Daarover heb ik een vraag. Ik heb de volgende klasse:
[JS]var Game = function() {
this.properties = [];
this.properties.width = 600;
this.properties.height = 400;
this.properties.resolution = 25;
this.properties.x = this.properties.width / this.properties.resolution;
this.properties.y = this.properties.height / this.properties.resolution;
this.player = [];
this.player.pos = [10,2];
this.player.prevpos = [10,2];
this.player.nextpos = [0,0];
this.moveblock = false;
this.map = [
w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,b,f,b,f,b,f,b,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,s,s,s,s,w,
w,w,w,w,w,w,w,w,f,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w
];
this.curmap = [
w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,b,f,b,f,b,f,b,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,s,s,s,s,w,
w,w,w,w,w,w,w,w,f,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w
];
var map = this.map;
this.getSpots = function(){
var spots = [];
for ( var i in map ) {
if ( map == s ) {
spots.push(i);
}
}
return spots;
}
}[/JS]
Het punt is zoals je kunt zien dat ik de map hier twee keer definieer. De reden daarvoor is dat ik een reference naar de map in de huidige staat wil hebben en een reference naar de oorspronkelijke map. Ik had eerst
[JS]
this.curmap = this.map;
[/JS]
gebruikt, maar het vreemde (althans in mijn ogen) was, dat als ik een waarde in de curmap array overschreef, deze ook in de map array werd overschreven.
Nu bedacht ik mij net, dat ik natuurlijk ook een private var van die array kan maken en dan aan beide public vars kan toewijzen. Toch ben ik benieuwd waarom het zo werkt dat deze vars als het ware synchroniseren.
[EDIT]
Het staat overigens hier: www.uselessapps.net/JS_Games/Sokoban
[/EDIT]
Daarover heb ik een vraag. Ik heb de volgende klasse:
[JS]var Game = function() {
this.properties = [];
this.properties.width = 600;
this.properties.height = 400;
this.properties.resolution = 25;
this.properties.x = this.properties.width / this.properties.resolution;
this.properties.y = this.properties.height / this.properties.resolution;
this.player = [];
this.player.pos = [10,2];
this.player.prevpos = [10,2];
this.player.nextpos = [0,0];
this.moveblock = false;
this.map = [
w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,b,f,b,f,b,f,b,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,s,s,s,s,w,
w,w,w,w,w,w,w,w,f,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w
];
this.curmap = [
w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,
w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,b,f,b,f,b,f,b,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,w,
w,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,s,s,s,s,w,
w,w,w,w,w,w,w,w,f,w,w,w,w,w,w,w,w,w,w,w,w,w,w,w
];
var map = this.map;
this.getSpots = function(){
var spots = [];
for ( var i in map ) {
if ( map == s ) {
spots.push(i);
}
}
return spots;
}
}[/JS]
Het punt is zoals je kunt zien dat ik de map hier twee keer definieer. De reden daarvoor is dat ik een reference naar de map in de huidige staat wil hebben en een reference naar de oorspronkelijke map. Ik had eerst
[JS]
this.curmap = this.map;
[/JS]
gebruikt, maar het vreemde (althans in mijn ogen) was, dat als ik een waarde in de curmap array overschreef, deze ook in de map array werd overschreven.
Nu bedacht ik mij net, dat ik natuurlijk ook een private var van die array kan maken en dan aan beide public vars kan toewijzen. Toch ben ik benieuwd waarom het zo werkt dat deze vars als het ware synchroniseren.
[EDIT]
Het staat overigens hier: www.uselessapps.net/JS_Games/Sokoban
[/EDIT]
Laatst bewerkt: