iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 24
0
自我挑戰組

學習 canvas 日記系列 第 24

第 24 天 練習畫遊戲場地 二

  • 分享至 

  • xImage
  •  

建立二維陣列和變數

var size = 200;
var offset = size / 3;

var map = [
   [0, 1, 2],
   [1, 2, 3],
   [2, 3, 0]
]

加上 FOR 迴圈就會依序排列成場地
排列可以依照陣列中的值用 IF 判斷

  • 填入顏色的方式
for( ... ){
    for( ... ){
        if(set == 0){
          ctx.fillStyle = '#333'
          ctx.fillRect(col * offset, row * offset, offset, offset)
        }
        ...
    }
}
  • 放入圖片的方式
var img = new Image(); 
img.src = 'img.jpg';
for( ... ){
    for( ... ){
        if(set == 1){
        ctx.drawImage(img, 10, 10, 150, 150, col*offset, row*offset, offset, offset);
        }
    }
}
  • 或是用圖形的方式
for( ... ){
    for( ... ){
        if(set == 2){
          ctx.fillStyle = '#333'
          ctx.fillRect(col*offset, row*offset, offset, offset);
          // 底色

          ctx.beginPath(); 
          ctx.fillStyle= "#aaa";
          ctx.moveTo(col*offset+33,row*offset+5);
          ctx.lineTo(col*offset+60,row*offset+60);
          ctx.lineTo(col*offset+6,row*offset+60);
          ctx.fill();
          // 圖形
        }
    }
}

https://ithelp.ithome.com.tw/upload/images/20181107/20107496Dzh3oK4ArX.jpg


二維陣列用亂數產生時

for(var col_i=0; col_i<3; col_i++){
  for(var row_i=0; row_i<3; row_i++){
    map[row_i][col_i] = Math.floor(Math.random()*3);
    console.log(map)
  }
}

https://ithelp.ithome.com.tw/upload/images/20181107/20107496KLsjkf9cBe.jpg
或是設定四個角落以外的用亂數產生
在陣列中先設定不產生亂數的部分

var map = [
   [0, 1, 0],
   [1, 1, 1],
   [0, 1, 0]
];

再用迴圈依序判斷是 "跳過" 或是 "放入隨機產生新的亂數"

for(var col=0; col<3; col++){
  for(var row=0; row<3; row++){
    if(map[col][row] !== 0){
      map[col][row] = Math.floor(Math.random()*4);
      console.log(map)
    }
  }
}

https://ithelp.ithome.com.tw/upload/images/20181107/201074964Yy6fb5bJ8.jpg


上一篇
第 23 天 練習畫遊戲場地 一
下一篇
第 25 天 練習畫遊戲場地 三
系列文
學習 canvas 日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言