隨機放入棋子,設置貓咪出生地。
初始地圖完成,
下棋功能尚未完成。
六角形地圖難度有點高,
因為後續要加上onclick
事件,
有點怕只有中間變色。
仔細想想原作是圓形按鈕,
六角形之後再研究。
有一個貓咪合戰(app已下架)很好玩,
同樣也是六角形地圖,
不過功能更複雜,
HTML
#map:用來放地圖
#tool:用來放計步器、下一局
<div id="map"></div>
<div id="tool"></div>
<script>
initMap();
createMap();
</script>
JavaScript
設定檔
var map = document.getElementById("map");
//地圖大小,棋數量,格子大小
var mapSize, chessSize,polySize;
var catRow,catCol;//貓咪出生地
var mapArr=[],mapArr2D=[];//地圖
//地圖狀態
const mapData={
"em":"empty",
"ch":"chess",
"ca":"cat",
};
//...設定數值略過
logMap()是印出地圖資料
function initMap(){
//建陣列
console.log("create array:");
for(let numi =0; numi<mapSize**2; numi++){
if(numi<chessSize){
mapArr.push("ch");}//放入棋子
else{
mapArr.push("em");}//或空地
}
logMap();
//洗牌
console.log("randMap:")
for(let i =mapArr.length-1; numi>0; --numi){
let rand = Math.floor(Math.random()*(numi+1));
[mapArr[i],mapArr[rand]]=[mapArr[rand],mapArr[i]];
}
logMap();
}
createMap()
function createMap(){
//1D Array convert 2D
console.log("createMap:")
for(let len=0; len<mapSize; ++len){
mapArr2D.push(mapArr.splice(0,mapSize));//每列放n個
}
mapArr2D[catRow][catCol]="ca";//貓咪出生地
console.log(mapArr2D);
//add map
for(let len=0; len<mapSize**2; ++len){
let row = Math.floor(len/mapSize);
let col = len%mapSize;
//出血線+ 地圖上下間距離
let top = 10+ row*polySize*(3/4);
//出血線+ 偶數列縮排+ 地圖左右間距離
let left = 10+ (row%2)*polySize/2+ col*polySize*(3/4);
map.innerHTML+=`<button
class="${mapData[mapArr2D[row][col]]}"
style="float: left; position: absolute;
top:${top}px;
left:${left}px;">
${mapArr2D[row][col]}
</button>`;
}
}
時鐘表示法
上下左右沒辦法說明六個方位,
所以這裡用時鐘表示法。
例如:一點鐘方向、三點鐘方向。
六個方向,每個夾角60度;
昨天文章有點短,
今天就多寫一點。
貓咪AI打算從n元樹下手,
當玩家下棋就移除該節點。
感謝撥冗閱讀,
有錯誤地方請多指教。