{"id":6976,"date":"2025-07-28T14:17:18","date_gmt":"2025-07-28T05:17:18","guid":{"rendered":"https:\/\/blog.smartlight.co.jp\/?p=6976"},"modified":"2025-07-28T14:17:20","modified_gmt":"2025-07-28T05:17:20","slug":"m5stack%e3%81%a7%e3%83%86%e3%83%88%e3%83%aa%e3%82%b9","status":"publish","type":"post","link":"https:\/\/blog.smartlight.co.jp\/?p=6976","title":{"rendered":"M5Stack\u3067\u30c6\u30c8\u30ea\u30b9"},"content":{"rendered":"\n<p>\u4eca\u56de\u306fM5STACK\u3092\u4f7f\u3063\u3066\u30c6\u30c8\u30ea\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4f7f\u3046\u3082\u306e\u306fVScode\u3068M5Stack\u3001\u305d\u308c\u3092\u7e4b\u3050\u30b3\u30fc\u30c9\u3067\u3059\u3002<\/p>\n\n\n\n<p>VScode\u306b\u3066\u30c6\u30c8\u30ea\u30b9\u3092\u3059\u308b\u305f\u3081\u306e\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u307e\u3059\u3002<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">#include &lt;M5Stack.h&gt;<\/span>\n\n<span class=\"hljs-comment\">#define SCREEN_WIDTH 320<\/span>\n<span class=\"hljs-comment\">#define SCREEN_HEIGHT 240<\/span>\n<span class=\"hljs-comment\">#define BLOCK_SIZE 20<\/span>\n<span class=\"hljs-comment\">#define GRID_WIDTH 10<\/span>\n<span class=\"hljs-comment\">#define GRID_HEIGHT 12<\/span>\n<span class=\"hljs-comment\">#define OFFSET_X ((SCREEN_WIDTH - GRID_WIDTH * BLOCK_SIZE) \/ 2)<\/span>\n<span class=\"hljs-comment\">#define OFFSET_Y ((SCREEN_HEIGHT - GRID_HEIGHT * BLOCK_SIZE) \/ 2)<\/span>\n\nuint8_t grid&#91;GRID_HEIGHT]&#91;GRID_WIDTH] = {<span class=\"hljs-number\">0<\/span>};\n\n<span class=\"hljs-keyword\">const<\/span> uint16_t colors&#91;] = {\n  BLACK, RED, GREEN, BLUE, YELLOW, CYAN, MAGENTA, ORANGE\n};\n\nint tetromino&#91;<span class=\"hljs-number\">4<\/span>]&#91;<span class=\"hljs-number\">4<\/span>];\nint tX = <span class=\"hljs-number\">3<\/span>, tY = <span class=\"hljs-number\">0<\/span>;\nint type = <span class=\"hljs-number\">0<\/span>;\nint score = <span class=\"hljs-number\">0<\/span>;\n\nvoid drawGrid();\nvoid drawScore(); \n\n<span class=\"hljs-keyword\">const<\/span> int shapes&#91;<span class=\"hljs-number\">7<\/span>]&#91;<span class=\"hljs-number\">4<\/span>]&#91;<span class=\"hljs-number\">4<\/span>] = {\n  {{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>}}, <span class=\"hljs-comment\">\/\/ T<\/span>\n  {{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>}}, <span class=\"hljs-comment\">\/\/ I<\/span>\n  {{<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>}}, <span class=\"hljs-comment\">\/\/ Z<\/span>\n  {{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>}}, <span class=\"hljs-comment\">\/\/ S<\/span>\n  {{<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>}}, <span class=\"hljs-comment\">\/\/ J<\/span>\n  {{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>}}, <span class=\"hljs-comment\">\/\/ L<\/span>\n  {{<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>},{<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>}}  <span class=\"hljs-comment\">\/\/ O<\/span>\n};\n\nvoid drawBlock(int x, int y, int color) {\n  M5.Lcd.fillRect(OFFSET_X + x * BLOCK_SIZE, OFFSET_Y + y * BLOCK_SIZE, BLOCK_SIZE - <span class=\"hljs-number\">1<\/span>, BLOCK_SIZE - <span class=\"hljs-number\">1<\/span>, colors&#91;color]);\n}\n\nvoid drawFrame() {\n  M5.Lcd.drawRect(OFFSET_X - <span class=\"hljs-number\">1<\/span>, OFFSET_Y - <span class=\"hljs-number\">1<\/span>, GRID_WIDTH * BLOCK_SIZE + <span class=\"hljs-number\">2<\/span>, GRID_HEIGHT * BLOCK_SIZE + <span class=\"hljs-number\">2<\/span>, WHITE);\n}\n\nbool checkCollision(int newX, int newY, int shape&#91;<span class=\"hljs-number\">4<\/span>]&#91;<span class=\"hljs-number\">4<\/span>]) {\n  <span class=\"hljs-keyword\">for<\/span> (int y = <span class=\"hljs-number\">0<\/span>; y &lt; <span class=\"hljs-number\">4<\/span>; y++) {\n    <span class=\"hljs-keyword\">for<\/span> (int x = <span class=\"hljs-number\">0<\/span>; x &lt; <span class=\"hljs-number\">4<\/span>; x++) {\n      <span class=\"hljs-keyword\">if<\/span> (shape&#91;y]&#91;x]) {\n        int gx = newX + x;\n        int gy = newY + y;\n        <span class=\"hljs-keyword\">if<\/span> (gx &lt; <span class=\"hljs-number\">0<\/span> || gx &gt;= GRID_WIDTH || gy &gt;= GRID_HEIGHT || (gy &gt;= <span class=\"hljs-number\">0<\/span> &amp;&amp; grid&#91;gy]&#91;gx])) {\n          <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">true<\/span>;\n        }\n      }\n    }\n  }\n  <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">false<\/span>;\n}\n\nvoid mergeBlock() {\n  <span class=\"hljs-keyword\">for<\/span> (int y = <span class=\"hljs-number\">0<\/span>; y &lt; <span class=\"hljs-number\">4<\/span>; y++) {\n    <span class=\"hljs-keyword\">for<\/span> (int x = <span class=\"hljs-number\">0<\/span>; x &lt; <span class=\"hljs-number\">4<\/span>; x++) {\n      <span class=\"hljs-keyword\">if<\/span> (tetromino&#91;y]&#91;x]) {\n        grid&#91;tY + y]&#91;tX + x] = type + <span class=\"hljs-number\">1<\/span>;\n      }\n    }\n  }\n}\n\nvoid rotate() {\n  int temp&#91;<span class=\"hljs-number\">4<\/span>]&#91;<span class=\"hljs-number\">4<\/span>];\n  <span class=\"hljs-keyword\">for<\/span> (int y = <span class=\"hljs-number\">0<\/span>; y &lt; <span class=\"hljs-number\">4<\/span>; y++)\n    <span class=\"hljs-keyword\">for<\/span> (int x = <span class=\"hljs-number\">0<\/span>; x &lt; <span class=\"hljs-number\">4<\/span>; x++)\n      temp&#91;y]&#91;x] = tetromino&#91;<span class=\"hljs-number\">3<\/span> - x]&#91;y];\n  <span class=\"hljs-keyword\">if<\/span> (!checkCollision(tX, tY, temp))\n    memcpy(tetromino, temp, sizeof(tetromino));\n}\n\nvoid clearLines() {\n  int linesCleared = <span class=\"hljs-number\">0<\/span>;\n  <span class=\"hljs-keyword\">for<\/span> (int y = GRID_HEIGHT - <span class=\"hljs-number\">1<\/span>; y &gt;= <span class=\"hljs-number\">0<\/span>; y--) {\n    bool full = <span class=\"hljs-keyword\">true<\/span>;\n    <span class=\"hljs-keyword\">for<\/span> (int x = <span class=\"hljs-number\">0<\/span>; x &lt; GRID_WIDTH; x++) {\n      <span class=\"hljs-keyword\">if<\/span> (!grid&#91;y]&#91;x]) {\n        full = <span class=\"hljs-keyword\">false<\/span>;\n        <span class=\"hljs-keyword\">break<\/span>;\n      }\n    }\n    <span class=\"hljs-keyword\">if<\/span> (full) {\n      linesCleared++;\n      <span class=\"hljs-keyword\">for<\/span> (int yy = y; yy &gt; <span class=\"hljs-number\">0<\/span>; yy--) {\n        <span class=\"hljs-keyword\">for<\/span> (int x = <span class=\"hljs-number\">0<\/span>; x &lt; GRID_WIDTH; x++) {\n          grid&#91;yy]&#91;x] = grid&#91;yy - <span class=\"hljs-number\">1<\/span>]&#91;x];\n        }\n      }\n      <span class=\"hljs-keyword\">for<\/span> (int x = <span class=\"hljs-number\">0<\/span>; x &lt; GRID_WIDTH; x++) {\n        grid&#91;<span class=\"hljs-number\">0<\/span>]&#91;x] = <span class=\"hljs-number\">0<\/span>;\n      }\n      y++;  <span class=\"hljs-comment\">\/\/ \u540c\u3058\u884c\u3092\u518d\u30c1\u30a7\u30c3\u30af<\/span>\n    }\n  }\n\n  <span class=\"hljs-keyword\">switch<\/span> (linesCleared) {\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">1<\/span>: score += <span class=\"hljs-number\">100<\/span>; <span class=\"hljs-keyword\">break<\/span>;\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">2<\/span>: score += <span class=\"hljs-number\">300<\/span>; <span class=\"hljs-keyword\">break<\/span>;\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">3<\/span>: score += <span class=\"hljs-number\">500<\/span>; <span class=\"hljs-keyword\">break<\/span>;\n    <span class=\"hljs-keyword\">case<\/span> <span class=\"hljs-number\">4<\/span>: score += <span class=\"hljs-number\">800<\/span>; <span class=\"hljs-keyword\">break<\/span>;\n  }\n\n  <span class=\"hljs-keyword\">if<\/span> (linesCleared &gt; <span class=\"hljs-number\">0<\/span>) {\n    drawGrid();\n    drawScore();\n  }\n}\n\nvoid drawGrid() {\n  <span class=\"hljs-keyword\">for<\/span> (int y = <span class=\"hljs-number\">0<\/span>; y &lt; GRID_HEIGHT; y++) {\n    <span class=\"hljs-keyword\">for<\/span> (int x = <span class=\"hljs-number\">0<\/span>; x &lt; GRID_WIDTH; x++) {\n      drawBlock(x, y, grid&#91;y]&#91;x]);\n    }\n  }\n}\n\nvoid drawCurrent() {\n  <span class=\"hljs-keyword\">for<\/span> (int y = <span class=\"hljs-number\">0<\/span>; y &lt; <span class=\"hljs-number\">4<\/span>; y++) {\n    <span class=\"hljs-keyword\">for<\/span> (int x = <span class=\"hljs-number\">0<\/span>; x &lt; <span class=\"hljs-number\">4<\/span>; x++) {\n      <span class=\"hljs-keyword\">if<\/span> (tetromino&#91;y]&#91;x]) {\n        drawBlock(tX + x, tY + y, type + <span class=\"hljs-number\">1<\/span>);\n      }\n    }\n  }\n}\n\nvoid drawScore() {\n  M5.Lcd.fillRect(<span class=\"hljs-number\">200<\/span>, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">120<\/span>, <span class=\"hljs-number\">30<\/span>, BLACK);  <span class=\"hljs-comment\">\/\/ \u30b9\u30b3\u30a2\u8868\u793a\u30a8\u30ea\u30a2\u3092\u5e83\u304f\u78ba\u4fdd<\/span>\n  M5.Lcd.setCursor(<span class=\"hljs-number\">205<\/span>, <span class=\"hljs-number\">5<\/span>);                 <span class=\"hljs-comment\">\/\/ \u5de6\u4e0a\u306b\u8868\u793a<\/span>\n  M5.Lcd.setTextColor(WHITE);\n  M5.Lcd.setTextSize(<span class=\"hljs-number\">2<\/span>);\n  M5.Lcd.printf(<span class=\"hljs-string\">\"Score:%d\"<\/span>, score);\n}\n\nvoid spawn() {\n  type = random(<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">7<\/span>);\n  memcpy(tetromino, shapes&#91;type], sizeof(tetromino));\n  tX = <span class=\"hljs-number\">3<\/span>;\n  tY = <span class=\"hljs-number\">0<\/span>;\n  <span class=\"hljs-keyword\">if<\/span> (checkCollision(tX, tY, tetromino)) {\n    M5.Lcd.setTextColor(RED);\n    M5.Lcd.setTextSize(<span class=\"hljs-number\">3<\/span>);\n    M5.Lcd.setCursor(SCREEN_WIDTH\/<span class=\"hljs-number\">2<\/span> - <span class=\"hljs-number\">80<\/span>, SCREEN_HEIGHT\/<span class=\"hljs-number\">2<\/span> - <span class=\"hljs-number\">10<\/span>);\n    M5.Lcd.<span class=\"hljs-keyword\">print<\/span>(<span class=\"hljs-string\">\"Game Over\"<\/span>);\n    <span class=\"hljs-keyword\">while<\/span> (<span class=\"hljs-keyword\">true<\/span>) delay(<span class=\"hljs-number\">1000<\/span>);\n  }\n}\n\nvoid setup() {\n  M5.begin();\n  M5.Lcd.fillScreen(BLACK);\n  M5.Lcd.setRotation(<span class=\"hljs-number\">1<\/span>);\n  randomSeed(esp_random());\n  drawScore();  <span class=\"hljs-comment\">\/\/ \u521d\u671f\u30b9\u30b3\u30a2\u63cf\u753b<\/span>\n  spawn();\n}\n\nunsigned long lastFall = <span class=\"hljs-number\">0<\/span>;\nint fallDelay = <span class=\"hljs-number\">500<\/span>;\n\nvoid loop() {\n  M5.update();\n\n  <span class=\"hljs-keyword\">if<\/span> (millis() - lastFall &gt; fallDelay) {\n    lastFall = millis();\n    <span class=\"hljs-keyword\">if<\/span> (!checkCollision(tX, tY + <span class=\"hljs-number\">1<\/span>, tetromino)) {\n      tY++;\n    } <span class=\"hljs-keyword\">else<\/span> {\n      mergeBlock();\n      clearLines();\n      spawn();\n    }\n  }\n\n  <span class=\"hljs-keyword\">if<\/span> (M5.BtnA.wasPressed()) {\n    <span class=\"hljs-keyword\">if<\/span> (!checkCollision(tX - <span class=\"hljs-number\">1<\/span>, tY, tetromino)) tX--;\n  }\n  <span class=\"hljs-keyword\">if<\/span> (M5.BtnC.wasPressed()) {\n    <span class=\"hljs-keyword\">if<\/span> (!checkCollision(tX + <span class=\"hljs-number\">1<\/span>, tY, tetromino)) tX++;\n  }\n  <span class=\"hljs-keyword\">if<\/span> (M5.BtnB.wasPressed()) {\n    rotate();\n  }\n\n  M5.Lcd.fillScreen(BLACK);\n  drawFrame();\n  drawGrid();\n  drawCurrent();\n  drawScore();  <span class=\"hljs-comment\">\/\/ \u2190 \u6bce\u30d5\u30ec\u30fc\u30e0\u63cf\u753b\u3067\u3082OK<\/span>\n  delay(<span class=\"hljs-number\">50<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">\u63cf\u753b\u51e6\u7406<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><code>drawBlock(int x, int y, int color)<\/code><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5358\u4e00\u306e\u30d6\u30ed\u30c3\u30af\uff08\u56db\u89d2\uff09\u3092\u63cf\u753b<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><code>drawGrid()<\/code><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u73fe\u5728\u914d\u7f6e\u6e08\u307f\u306e\u30d6\u30ed\u30c3\u30af\u5168\u4f53\u3092\u63cf\u753b\uff08<code>grid<\/code> \u914d\u5217\u3092\u5143\u306b\uff09<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><code>drawCurrent()<\/code><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u73fe\u5728\u843d\u4e0b\u4e2d\u306e\u30d6\u30ed\u30c3\u30af\u3092\u63cf\u753b<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><code>drawFrame()<\/code><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a3\u30fc\u30eb\u30c9\uff08\u67a0\uff09\u3092\u767d\u3067\u56f2\u3080<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><code>drawScore()<\/code><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30b3\u30a2\u3092\u53f3\u4e0a\u306b\u8868\u793a\uff08\u5e45120px\u30fb\u9ad8\u305530px\u5206\u306e\u30a8\u30ea\u30a2\u3092\u6bce\u56de\u30af\u30ea\u30a2\u3057\u3066\u66f4\u65b0\uff09<\/li>\n<\/ul>\n\n\n\n<p>drawFrame();\u3067\u3069\u3053\u304b\u3089\u3069\u3053\u307e\u3067\u306e\u7bc4\u56f2\u306b\u30d6\u30ed\u30c3\u30af\u3092\u7f6e\u3051\u308b\u306e\u304b\u3092\u53ef\u8996\u5316\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>if (M5.BtnB.wasPressed())\u306e\u51e6\u7406\u3067\u30dc\u30bf\u30f3B\uff08\u771f\u3093\u4e2d\u306e\u7269\u7406\u30dc\u30bf\u30f3\uff09\u304c\u62bc\u3055\u308c\u305f\u3068\u304d\u30d6\u30ed\u30c3\u30af\u304c\u56de\u8ee2\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u30ed\u30b8\u30c3\u30af\u51e6\u7406\uff08\u843d\u4e0b\u30fb\u56de\u8ee2\u30fb\u5408\u4f53\u30fb\u885d\u7a81\u5224\u5b9a\uff09<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><code>checkCollision(newX, newY, shape)<\/code><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6307\u5b9a\u5ea7\u6a19\u3067\u30d6\u30ed\u30c3\u30af\u3092\u7f6e\u3051\u308b\u304b\u30c1\u30a7\u30c3\u30af\uff08\u58c1\u30fb\u5e8a\u30fb\u4ed6\u30d6\u30ed\u30c3\u30af\u3068\u306e\u885d\u7a81\uff09<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><code>mergeBlock()<\/code><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u843d\u4e0b\u3057\u3066\u7740\u5730\u3057\u305f\u30d6\u30ed\u30c3\u30af\u3092 <code>grid<\/code> \u306b\u56fa\u5b9a<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><code>rotate()<\/code><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c6\u30c8\u30ed\u30df\u30ce\u3092\u53f3\u56de\u8ee2\uff08\u56de\u8ee2\u5f8c\u3082 <code>checkCollision<\/code> \u3067\u885d\u7a81\u78ba\u8a8d\uff09<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u30e9\u30a4\u30f3\u6d88\u53bb\u51e6\u7406<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><code>clearLines()<\/code><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6a2a\u4e00\u5217\u304c\u5168\u3066\u57cb\u307e\u3063\u305f\u3089\u524a\u9664<\/li>\n\n\n\n<li>\u4e0a\u306e\u6bb5\u3092\u4e00\u6bb5\u305a\u3064\u4e0b\u306b\u305a\u3089\u3059<\/li>\n\n\n\n<li>\u8907\u6570\u884c\u6d88\u3057\u306b\u5fdc\u3058\u3066\u30b9\u30b3\u30a2\u3092\u52a0\u7b97<\/li>\n\n\n\n<li>\u6d88\u53bb\u5f8c\u306b <code>drawGrid()<\/code> \u3068 <code>drawScore()<\/code> \u3067\u753b\u9762\u66f4\u65b0<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u30d6\u30ed\u30c3\u30af\u306e\u751f\u6210\u3068\u30b2\u30fc\u30e0\u30aa\u30fc\u30d0\u30fc<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><code>spawn()<\/code><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u65b0\u3057\u3044\u30c6\u30c8\u30ed\u30df\u30ce\u3092\u30e9\u30f3\u30c0\u30e0\u751f\u6210\u3057\u3001\u521d\u671f\u4f4d\u7f6e\u306b\u914d\u7f6e<\/li>\n\n\n\n<li>\u958b\u59cb\u4f4d\u7f6e\u3067 <code>checkCollision()<\/code> \u304c <code>true<\/code> \u306a\u3089 <strong>\u30b2\u30fc\u30e0\u30aa\u30fc\u30d0\u30fc<\/strong><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"772\" height=\"1024\" src=\"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/07\/IMG_8022-772x1024.jpg\" alt=\"\" class=\"wp-image-6982\" style=\"width:226px;height:auto\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u307e\u3068\u3081<\/h2>\n\n\n\n<p>\u30b9\u30b3\u30a2\u3092\u3064\u3051\u308b\u3053\u3068\u3067\u30b2\u30fc\u30e0\u6027\u304c\u51fa\u305f\u3088\u3046\u306b\u611f\u3058\u307e\u3059\u3002\u6b21\u306b\u6765\u308b\u30d6\u30ed\u30c3\u30af\u306e\u8868\u793a\u306a\u3069\u307e\u3060\u307e\u3060\u62e1\u5f35\u6027\u304c\u3042\u308b\u3068\u601d\u3044\u307e\u3057\u305f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4eca\u56de\u306fM5STACK\u3092\u4f7f\u3063\u3066\u30c6\u30c8\u30ea\u30b9\u3092\u4f5c\u3063\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u307e\u3059\u3002 \u4f7f\u3046\u3082\u306e\u306fVScode\u3068M5Stack\u3001\u305d\u308c\u3092\u7e4b\u3050\u30b3\u30fc\u30c9\u3067\u3059\u3002 VScode\u306b\u3066\u30c6\u30c8\u30ea\u30b9\u3092\u3059\u308b\u305f\u3081\u306e\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u307e\u3059\u3002 \u63cf\u753b\u51e6\u7406 drawBlock(int<\/p>\n","protected":false},"author":22,"featured_media":6979,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jin_ogp_image_url":"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/07\/thumbnails-ogp-6976.png","_jin_last_featured_id":6979,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-6976","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-intern"],"jetpack_featured_media_url":"https:\/\/blog.smartlight.co.jp\/wp-content\/uploads\/2025\/07\/thumbnails-featured-6976.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/6976","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6976"}],"version-history":[{"count":2,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/6976\/revisions"}],"predecessor-version":[{"id":6984,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/posts\/6976\/revisions\/6984"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=\/wp\/v2\/media\/6979"}],"wp:attachment":[{"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6976"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6976"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.smartlight.co.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}