https://www.gamasutra.com/blogs/AAdonaac/20150903/252889/Procedural_Dungeon_Generation_Algorithm.php地牢發電機jQuery中
我試着做一些像jQuery的鏈接,但我有一些麻煩促成這件事情。
1)創建10(X)不同的矩形,並放置在畫布在彼此都混了中間 - 沒問題
2)單獨的房間,讓每一個房間發現畫布上空白的地方 - 大問題
計劃1:我比較兩個房間,如果他們相互接觸,然後將其中一個移動到另一個的最短路徑。但是如果在那裏已經有一個房間了呢?然後,我剛剛有兩個新的房間相互接觸...
計劃2:製作一個空/被佔據的地方陣列,並將每個房間移動到一個空的地方。但是,我怎麼知道哪個方向移動,所以所有的房間都放在中心?
Plz help!
試用代碼:
<canvas id="cnvs" width="500" height="500" style="background-color: #333;"></canvas>
var rooms = [],
gw = 25, //grid width
gh = 25; //grid height
//Room
function Room(x,y,w,h){
this.x = x; this.y = y;
this.w = w; this.h = h;
};
//Setup
for(var i=0; i<10; i++){
var w = Math.floor(2+Math.random()*3),
h = Math.floor(2+Math.random()*3),
x = Math.floor(gw/2)-Math.floor(w/2),
y = Math.floor(gh/2)-Math.floor(h/2),
room = new Room(x,y,w,h);
rooms.push(room);
};
//Draw in canvas
var ctx = $("#cnvs")[0].getContext("2d"),
sz = 20;
ctx.lineWidth = "2";
ctx.strokeStyle = 'white';
for(var i=0; i<rooms.length; i++){
ctx.rect(rooms[i].x*sz,rooms[i].y*sz,rooms[i].w*sz,rooms[i].h*sz);
ctx.stroke();
};
你能解釋什麼不工作嗎?哪裏有問題? – ventiseis
第1步工作,但我很困惑如何做第2步(單獨的房間)。如何將房間分隔成鏈接,所以沒有空間覆蓋另一個房間? –