將程式碼進行優化,今天改得比較可以見人。
參考:Fisher-Yates Shuffle(不安全)簡稱Fisher
一開始地圖會隨機放7顆棋,
這邊原先用Fisher排序。
不過這方法適合資料間差異性大,
裡面重複數量越少越好,
最好都不相同。
而貓圍棋有121個板塊,
空地113個、棋子7顆、貓1隻,
重複資料實在太多。
假如用Fisher排序,
會從最尾端排到第一個,
固定要排序121次。
當貓和棋子都被抽出來,
剩下的全部都是空地。
基本上繼續排下去,
有點花時間。
參考:ccutmis大介紹JS: 快速建立2維陣列(stackoverflow)
程式碼說明
/** initMap(){
*create mapArray init empty
*1D convert 2D
*add cat
*random add chess to map
*/
var mapSize= 11;
const mapData={
"em":"empty",
"ch":"chess",
"ca":"cat",
};
這邊先建立11x11地圖,
然後全部設定為「空地」。
var mapArr,mapArr2D;
function initMap(){
//create mapArray
mapArr=new Array(mapSize);
mapArr2D=new Array(mapSize);
//1D Array convert 2D
console.log("create mapArray init empty:");
for(let col=0; col<mapSize; col++){
mapArr[col]= "em";
}
for(let row=0; row<mapSize; row++){
mapArr2D[row] = mapArr.slice(0);
}
放入「貓咪」
//add cat
mapArr2D[catRow][catCol]="ca";
console.log(mapArr2D);
隨機抽出一個板塊,
如果這個板塊是「空地」,
則放入「棋子」。
//random add chess to map
console.log("random add chess to map:")
var chess= 0;
while(chess<chessSize){
let row = Math.floor(Math.random()*(mapSize));
let col = Math.floor(Math.random()*(mapSize));
if(mapArr2D[row][col]=="em"){
chess+=1;
mapArr2D[row][col]= "ch";
}
}
console.log(mapArr2D);
}
建立陣列方法改成參考,
速度會比較快,
整段程式也變得清楚許多。
隨機方法改善,
運氣好的話抽7次就可以結束。
這陣子常常修壞檔案,
讓我學會一句話git checkout --catGO.html
,
它可以回到檔案還活著的時候。
感謝撥冗閱讀,
有錯誤地方請多指教。