From c9ed38122d9e96d62998ccdac41635ee4262b025 Mon Sep 17 00:00:00 2001 From: CalisJI Date: Fri, 16 Aug 2024 17:01:10 +0700 Subject: [PATCH] full function game --- platformio.ini | 9 +- src/main.cpp | 352 ++++++++++++++++++++++++++++++----------------- src/spacecraft.h | 137 ++++++++++++------ 3 files changed, 326 insertions(+), 172 deletions(-) diff --git a/platformio.ini b/platformio.ini index dac9771..aa01876 100644 --- a/platformio.ini +++ b/platformio.ini @@ -8,12 +8,12 @@ ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html -[env:nodemcu-32s] +[env:esp32-s3-devkitc-1] platform = espressif32 -board = nodemcu-32s -board_build.mcu = esp32 +board = esp32-s3-devkitc-1 framework = arduino monitor_speed = 230400 +board_build.mcu = esp32s3 lib_deps = mrfaptastic/ESP32 HUB75 LED MATRIX PANEL DMA Display@^3.0.12 https://github.com/mrcodetastic/ESP32-HUB75-MatrixPanel-DMA.git @@ -22,3 +22,6 @@ lib_deps = mbed-seeed/BluetoothSerial@0.0.0+sha.f56002898ee8 me-no-dev/AsyncTCP@^1.1.1 bblanchon/ArduinoJson@^7.1.0 +build_flags = + -DBOARD_HAS_PSRAM + -mfix-esp32-psram-cache-issue \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index f281ad0..c8cdef7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -256,7 +256,7 @@ bool created_shot = false; bool direction = false; // false = left, true = right; int lastpoint_shot[2]; unsigned long period_shot = millis(); -int speed_shot = 100; +int speed_shot = 50; void Drawbullet(bool deleted = false) { // measure x dimension @@ -430,50 +430,229 @@ void Defend() } } } + +bool mode = false; +int reset_stickman = 2000; +bool Mode_game = true; +int width = 26; +int height = 26; +int X_craft = 0; +int Y_craft = 0; +bool exist = false; +const int num_rocket = 15; +int rockets[num_rocket][4] = + { + {0, -2, 0, -2}, + {0, -14, 0, -14}, + {0, -26, 0, -26}, + {0, -38, 0, -38}, + {0, -50, 0, -50}, + {0, -62, 0, -62}, + {0, -74, 0, -74}, + {0, -86, 0, -86}, + {0, -98, 0, -98}, + {0, -110, 0, -110}}; +const int enemies_numX = 15; +const int enemies_numY = 3; +const int enemies_num = enemies_numX * enemies_numY; +int enemies[enemies_num][2]; +int x_step = 8; +int y_step = 6; +int live_enemies = 0; +void create_enemies() +{ + live_enemies = enemies_num; + for (int i = 1; i < enemies_numX + 1; i++) + { + for (int j = 1; j < enemies_numY + 1; j++) + { + int x = i * x_step; + int y = j * y_step; + + enemies[(i - 1) * 3 + (j - 1)][0] = x; + enemies[(i - 1) * 3 + (j - 1)][1] = y; + } + } +} + +void draw_enemies() +{ + for (int i = 0; i < enemies_num; i++) + { + uint16_t color = 0x03FF; + int x = enemies[i][0]; + int y = enemies[i][1]; + if (x == 0 && y == 0) + continue; + dma_display->drawCircle(enemies[i][0], enemies[i][1], 1, color); + } +} + +void destroy_enemy() +{ + if (!exist) + return; + for (int i = 0; i < enemies_num; i++) + { + for (int x = 0; x < num_rocket; x++) + { + int x1_rocket = rockets[x][0]; + int y1_rocket = rockets[x][1]; + int x2_rocket = rockets[x][2]; + int y2_rocket = rockets[x][3]; + + int x_enemy = enemies[i][0]; + int y_enemy = enemies[i][1]; + bool check_init = x1_rocket!=0&&x2_rocket!=0&&x_enemy!=0&&y_enemy!=0; + if (((x1_rocket == x_enemy && y1_rocket + 100 == y_enemy) || (x2_rocket == x_enemy && y2_rocket + 100 == y_enemy)) && live_enemies > 0 && check_init) + { + dma_display->drawCircle(enemies[i][0], enemies[i][1], 1, 0x0000); + enemies[i][0] = 0; + enemies[i][1] = 0; + live_enemies--; + Serial.println(live_enemies); + break; + } + } + } + draw_enemies(); +} +void draw_enemy(int x, int y) +{ + uint16_t color = 0x03FF; + int _x = x; + int _y = y; + if (_y <= 64) + { + dma_display->fillCircle(_x, _y, 1, color); + } + else + { + _y = _y - 64; + _x = _x + 128; + + dma_display->drawPixel(_x, _y, color); + } +} +void draw_rocket(int x_craft, int y_craft = 100) +{ + unsigned long now = millis(); + if (now - period_shot >= speed_shot) + { + period_shot = now; + // Serial.println("clear"); + for (int row = 0; row < num_rocket; row++) + { + for (int col = 0; col < 2; col++) + { + int x = rockets[row][col * 2]; + int y = rockets[row][col * 2 + 1] + y_craft; + // dma_display->drawPixel(x,y,0x0000); + uint16_t color = 0x0000; + + int _x = x; + int _y = y; + if (_y <= 64) + { + dma_display->drawPixel(_x, _y, color); + } + else + { + _y = _y - 64; + _x = _x + 128; + + dma_display->drawPixel(_x, _y, color); + } + rockets[row][col * 2 + 1] -= 1; + if (rockets[row][col * 2 + 1] <= -110) + { + rockets[row][col * 2 + 1] = -2; + } + } + } + } + // Draw + for (int row = 0; row < num_rocket; row++) + { + for (int col = 0; col < 2; col++) + { + if (rockets[row][col * 2 + 1] == -2) + { + rockets[row][0] = x_craft + 4; + rockets[row][2] = x_craft + 21; + } + + int x = rockets[row][col * 2]; + int y = rockets[row][col * 2 + 1] + y_craft; + if (y <= 0 || x == 0) + continue; + uint16_t color = 0xF9A0; + + int _x = x; + int _y = y; + if (_y <= 64) + { + dma_display->drawPixel(_x, _y, color); + } + else + { + _y = _y - 64; + _x = _x + 128; + + dma_display->drawPixel(_x, _y, color); + } + } + } +} +void draw_spacecraft(int x, int y = 100) +{ + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + uint16_t color = aircraft[j * width + i]; + if (color == 0xFFFF || color == 0xFFDF || color == 0xFFFE || color == 0xFFBD || color == 0xFFBF) + color = 0x0000; + int _x = x + i; + int _y = y + j; + if (_y <= 64) + { + dma_display->drawPixel(_x, _y, color); + } + else + { + _y = _y - 64; + _x = _x + 128; + + dma_display->drawPixel(_x, _y, color); + } + } + } + + exist = true; + // draw_rocket(x,y); +} void setup() { Serial.begin(115200 * 2); // Đảm bảo baud rate khớp với baud rate của Python dma_display = new MatrixPanel_I2S_DMA(mxconfig); - dma_display->begin(); // setup the LED matrix + dma_display->begin(); // setup the LED matrix dma_display->setBrightness8(200); // 0-255 dma_display->clearScreen(); + // draw_spacecraft(32, 32); + Mode_game = true; + // create_enemies(); + // draw_enemies(); + // draw_enemy(32,32); + // draw_rocket(32,100); // draw_cat(10,10,20,20); // drawXbm565(10,10,20,20,CAT_bits,dma_display->color565(100,0,0)); } -bool mode = false; -int reset_stickman = 2000; -bool Mode_game = false; - -void draw_spacecraft(int x, int y){ - for (int i = 0; i < 20; i++) - { - for (int j = 0; j < 20; j++) - { - uint16_t color = aircraft[j*20+i]; - int _x = x+i; - int _y = y+i; - if (_y <= 64) - { - dma_display->drawPixel(_x, _y, color); - } - else - { - _y = _y - 64; - _x = _x + 128; - - dma_display->drawPixel(_x, _y, color); - } - dma_display->drawPixel(_X,_y,color); - } - - } - -} - void loop() { // server.handleClient(); + #pragma region Serial processing while (Serial.available() > 0) { @@ -500,16 +679,16 @@ void loop() if (numRows == 1 && numCols == 0) { Mode_game = true; - //dma_display->clearScreen(); - // Serial.println("Stick Man"); + // dma_display->clearScreen(); + // Serial.println("Stick Man"); } else if (numRows == 0 && numCols == 0) { Mode_game = false; // Serial.println("HungVat"); - //dma_display->clearScreen(); + // dma_display->clearScreen(); } - + int expectedSize = numRows * numCols * floatSize; if (bufferIndex >= (2 * sizeof(int) + expectedSize)) { @@ -532,33 +711,28 @@ void loop() } else { - if (!game_over) - drawStickMan(int(data[0][0]), int(data[0][1]), int(data[0][2])); + X_craft = int(data[0][0]); + draw_spacecraft(X_craft); + draw_rocket(X_craft); } // Reset chỉ số chỉ mục sau khi xử lý - } bufferIndex = 0; } - if (Mode_game) - { - if (game_over) - { - if (millis() - period_gameover >= reset_stickman) - { - game_over = false; - dma_display->clearScreen(); - - } - } - } - // Stickman region if (Mode_game) { - Drawbullet(); - Defend(); + if (exist) + { + draw_rocket(X_craft); + if (live_enemies <= 0) + { + create_enemies(); + } + draw_enemies(); + destroy_enemy(); + } } else // Hung Vat { @@ -570,73 +744,3 @@ void loop() // readDataFromSerial(); } - -// int x = int(data[row][0]); -// int y = int(data[row][1]); -// int x_in = int(data[0][0]); -// int y_in = int(data[0][1]); - -// if (x_in == 0 && y_in == 0) -// { -// mode = true; -// } -// else if (x_in == 255 && y_in == 255) -// { -// mode = false; -// } -// if (mode) -// { -// int *_range; -// _range = drawStickMan(x, y); -// } -// else -// { -// // measure x dimension -// int min_x = x - 1 - ((num_moi * 3) / 3); -// int max_x = x + 1 + ((num_moi * 3) / 3); -// int min_y = y - 1; -// int max_y = y + 1; -// for (int i = min_x; i <= max_x; i++) -// { -// for (int j = y - 1; j <= y + 1; j++) -// { -// if (j <= 32) -// dma_display->drawPixelRGB888(i, j, 214, 24, 192); -// else -// dma_display->drawPixelRGB888(i, j, 214, 192, 24); -// // reach moi -// if (gen_moi == false && y<255) -// { -// drawRandomPoint(x, y, 5 + (num_moi * 3), false); - -// gen_moi = true; -// } -// if (min_x <= x_moi + 1 && max_x > x_moi - 1 && min_y <= y_moi + 1 && max_y >= y_moi - 1) -// { -// reached = true; -// num_moi += 1; -// gen_moi = false; -// } -// } -// } -// if (reached) -// { -// min_x = x - 1 - ((num_moi * 3) / 3); -// max_x = x + 1 + ((num_moi * 3) / 3); -// for (int i = min_x; i <= max_x; i++) -// { -// for (int j = y - 1; j <= y + 1; j++) -// { -// if (j <= 32) -// dma_display->drawPixelRGB888(i, j, 214, 24, 192); -// else -// dma_display->drawPixelRGB888(i, j, 214, 192, 24); -// } -// } -// reached = false; -// } -// if (gen_moi) -// { -// drawRandomPoint(x, y, 5 + (num_moi * 3), gen_moi); -// } -// } \ No newline at end of file diff --git a/src/spacecraft.h b/src/spacecraft.h index 99f24e6..2046637 100644 --- a/src/spacecraft.h +++ b/src/spacecraft.h @@ -1,53 +1,100 @@ #include -const uint16_t aircraft[20 * 20] = { -0xFFFF, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFDF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, + +const uint16_t aircraft[26 * 26] = { +0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, +0xFFFF, 0xA4F2, 0xA4B1, 0xB28B, 0xDAAC, 0xDAAC, 0xB28B, 0xA491, +0xA533, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, +0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, +0xFFFF, 0xFFFF, 0xFFFF, 0xAD13, 0x9D12, 0xA4B1, 0xD20B, 0xD20B, +0xA4B1, 0x9512, 0xA513, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, +0xFFFF, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, +0xFFFF, 0xFFFF, 0xFFFF, 0xD3CD, 0xDBCD, 0xAC0E, 0x842E, 0x7BAC, +0xC1EA, 0xC1EA, 0x7B8C, 0x840F, 0xAC0E, 0xDBAE, 0xDBAD, 0xFFFF, +0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xECB3, 0xDBEE, 0xDC2E, 0xBC2E, +0x7C2F, 0x62C8, 0xC20A, 0xC1EA, 0x62A9, 0x842F, 0xC40E, 0xDC0E, +0xDBEE, 0xD24A, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA800, 0xDA09, +0xE2CC, 0xBB0C, 0x6BAC, 0x9B0B, 0x924C, 0x9A6D, 0x9B0B, 0x73AC, +0xBB0B, 0xE2CC, 0xD9C8, 0xC846, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, +0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDBD0, +0xDB6F, 0xDBAF, 0xDA0B, 0xBA4A, 0x62C9, 0xA26A, 0x5270, 0x6BB5, +0xA28B, 0x62E9, 0xBA4A, 0xDA0B, 0xDBB0, 0xDB6F, 0xE4D2, 0xFE38, +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFDF, 0xE472, +0xE3D0, 0xD26B, 0xC989, 0xDA6C, 0xD98A, 0xC2CC, 0x92AA, 0xA9A9, +0x81EC, 0x8AD0, 0xB1EA, 0x92AA, 0xC2CC, 0xD98A, 0xDA6C, 0xC989, +0xD26B, 0xE3B0, 0xDB0D, 0xD451, 0xFFFF, 0xFFFF, 0xFFFF, 0xE2CD, +0xE38F, 0xE24B, 0xECB2, 0xCACC, 0xC28B, 0xD9CA, 0xD16A, 0xBA6A, +0xB9C9, 0xB129, 0x5A2E, 0x7374, 0xB16A, 0xB9C9, 0xB26A, 0xD169, +0xD9CA, 0xC28C, 0xCACC, 0xECB2, 0xE26B, 0xE3B0, 0xE32E, 0xFFFF, +0xE3AF, 0xDA2B, 0xE491, 0xE2AC, 0xDA0B, 0xB9A8, 0xB989, 0xC149, +0xC149, 0xC22A, 0xC169, 0xC169, 0xA22C, 0xB30F, 0xC1AA, 0xC149, +0xC20A, 0xC149, 0xC149, 0xB989, 0xB9A9, 0xDA0B, 0xE2AC, 0xE4B2, +0xD22B, 0xE3F0, 0xE411, 0xDA8C, 0xD1EB, 0xD18A, 0xD169, 0xB168, +0xC989, 0xB908, 0xC149, 0xE26B, 0xD9C9, 0xC168, 0xA927, 0xA926, +0xC168, 0xD9C9, 0xE26B, 0xC149, 0xB908, 0xC989, 0xB168, 0xD169, +0xD98A, 0xD20B, 0xD2AC, 0xEC51, 0xDA4A, 0xC9A9, 0xB948, 0xC148, +0xB148, 0xA147, 0xC969, 0xC929, 0xD149, 0xC168, 0x9907, 0x7885, +0xA107, 0xA127, 0x7885, 0x9906, 0xC188, 0xD149, 0xC929, 0xC969, +0xA147, 0xB148, 0xC149, 0xB948, 0xC9A9, 0xDA4A, 0x9967, 0x9106, +0xB1A7, 0xA967, 0x7906, 0x8146, 0xA927, 0xB948, 0xB908, 0xA907, +0xB128, 0xA107, 0xB167, 0xB168, 0xA107, 0xB128, 0xA927, 0xB908, +0xB948, 0xA127, 0x8146, 0x8106, 0xA987, 0xB9A7, 0x9106, 0x9967, +0xFB2D, 0x7126, 0xC2E7, 0xBAA7, 0x0006, 0x40C4, 0x68C5, 0x8906, +0xB148, 0x9947, 0xB148, 0xB148, 0xB9A7, 0xB187, 0xB128, 0xB148, +0xA147, 0xB148, 0x8906, 0x68C5, 0x38A4, 0x1805, 0xBAA6, 0xC2E7, +0x7126, 0xFB0C, 0x7579, 0x6DBB, 0x95F9, 0x95F9, 0x2D7E, 0x5A0A, +0x7085, 0x38A4, 0x7906, 0x7106, 0x88E6, 0xA967, 0xB206, 0xB206, +0xA967, 0x88E6, 0x6906, 0x7906, 0x40A4, 0x7084, 0x5A0B, 0x2DBE, +0x95D9, 0x9DF9, 0x6DBA, 0x7559, 0x657A, 0x657A, 0x7E1C, 0x7DFC, +0x5D19, 0x759A, 0x4800, 0x50E5, 0x10A3, 0x0003, 0xA226, 0xC2E6, +0xAA05, 0xAA05, 0xC2E6, 0xA227, 0x0024, 0x20E4, 0x50C5, 0x5800, +0x759A, 0x5D39, 0x7DFC, 0x7E1C, 0x655A, 0x6D5A, 0x6D7A, 0x7579, +0x555C, 0x5D5B, 0x2CFE, 0x8DFB, 0xFFFF, 0x7ACC, 0x48E5, 0x5A08, +0x6B6A, 0x7493, 0x9514, 0x94F4, 0x7493, 0x634A, 0x5A08, 0x4905, +0x4905, 0xFFFF, 0x85DA, 0x2D3E, 0x555B, 0x555B, 0x7579, 0x6D7A, +0x0011, 0x551B, 0x657A, 0x655A, 0x655A, 0x961B, 0xFFFF, 0xFFFF, +0xFFFF, 0x6D9B, 0x6D7B, 0x9E9D, 0xD77F, 0xD77F, 0xA69D, 0x657A, +0x6D9B, 0xFFFF, 0xFFFF, 0xFFFF, 0x85FB, 0x5D5A, 0x655A, 0x655A, +0x555B, 0x34FB, 0xEFBF, 0x7D99, 0x85B9, 0x85B9, 0x85B9, 0xFFFF, +0xFFFF, 0xFFFF, 0xFFFF, 0x6D9B, 0x6D9B, 0xBEFD, 0xEFBF, 0xEFBF, +0xBEFD, 0x6D9B, 0x6D9B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7D78, +0x7D78, 0x7D78, 0x7558, 0xCEFC, 0xFFFF, 0xE6B9, 0xF6D9, 0xDEB9, +0xDE99, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0x7DBA, 0x757A, 0x861C, +0xAEDE, 0xAEDE, 0x861C, 0x6D59, 0x759A, 0xFFFF, 0xFFFF, 0xFFFF, +0xFFFF, 0xE699, 0xE699, 0xFF5A, 0xE698, 0xFFFF, 0x0000, 0xCE9A, +0xCE9A, 0xCE9A, 0xCE9A, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0x5CD7, +0x555B, 0x657B, 0x557C, 0x557C, 0x657B, 0x555C, 0x551A, 0xFFFF, +0xFFFF, 0xFFFF, 0xFFFF, 0xC67A, 0xC659, 0xC67A, 0x63F0, 0xFFFF, +0xFFFF, 0xD6BA, 0xD6BA, 0xD6DB, 0xC679, 0xFFFF, 0x0000, 0x0000, +0x0000, 0xA6BD, 0x75BB, 0x75BB, 0x557C, 0x557C, 0x759B, 0x6D9B, +0xA67B, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x63F1, 0xCEBB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xFFBF, 0xFFBE, 0xFFFF, -0xFFFF, 0xFFBE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, +0x0000, 0x0000, 0x0000, 0x0000, 0x8DB8, 0x045F, 0x5D7B, 0x5D7C, +0x041F, 0x95B8, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBE17, 0xC658, 0xFFFF, +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x7579, 0x5D7B, +0x6D9B, 0x6D9B, 0x5D7B, 0x7558, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, -0xCEBA, 0x636D, 0x740F, 0xC699, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, -0xFFDF, 0xFFBF, 0xFFFF, 0xFFFF, 0x8491, 0x8CF2, 0x8D13, 0x8491, -0xEF9E, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFBF, 0xFFFF, 0xFFFF, 0xD6FB, -0x7C70, 0xA5F6, 0x9DB5, 0x84B2, 0xDF3C, 0xFFFF, 0xF77D, 0xFFDF, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, -0xFFFF, 0xFFFF, 0xEF7D, 0x94F2, 0x84B1, 0x63CD, 0x5BAD, 0x7C91, -0x8CB2, 0xFFDF, 0xFFFF, 0xFF9E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x7C0F, -0x744F, 0x5BAC, 0x536C, 0x744F, 0x8470, 0xEFBE, 0xFFFF, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9E, 0xFFFF, 0xFFDF, 0xFFFF, -0xFFDF, 0xFFFF, 0xD699, 0xC678, 0x84B1, 0x744F, 0x84B1, 0x8491, -0xBE37, 0xD6BA, 0xFFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xF7BF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE58, 0xAD95, 0xCE99, -0x4AA9, 0x638C, 0x52EA, 0x530A, 0xD6DA, 0xADB5, 0xCE59, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, -0xEF9D, 0x5AEA, 0xAD95, 0x8470, 0x73AD, 0x5B0A, 0x5AEA, 0x73AD, -0x8450, 0xA554, 0x52EA, 0xEFBE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFFF, 0xF7FE, 0xC678, 0x31E6, 0x8470, 0x9D12, -0x5289, 0x5268, 0x5268, 0x5289, 0x9D13, 0x9D13, 0x3A47, 0xBE37, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEFBE, 0xF7FF, -0xB616, 0x4AC9, 0xADB5, 0x73CD, 0x8C2F, 0x41C6, 0x49C6, 0x83AE, -0x8C50, 0xAD94, 0x3A47, 0xBE58, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFDF, 0xFFFF, 0xFFFF, 0xEFFE, 0xAE16, 0x21A4, 0x8CD1, 0xFFFE, -0xFF9D, 0xC595, 0xC554, 0xFFDE, 0xFFDE, 0x9D12, 0x21C5, 0xAE16, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xF7DE, 0xF7FF, -0xBE57, 0x8490, 0xFFFE, 0xF7BD, 0xFFFE, 0xEEFA, 0xFF7D, 0xFFBD, -0xFFFF, 0xFFFF, 0x84B1, 0xBE58, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, +0xFFFF, 0x7D9A, 0x85BA, 0x85BA, 0x7D9A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, +0x0000, 0xFFFF, 0xFFFF, 0x85B9, 0x8DD9, 0x8DDA, 0x8599, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, -}; \ No newline at end of file +0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xDEBA, 0xDEBA, 0xE6DA, +0xDEDA, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, +0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, +}; + +const uint16_t enemy[8 * 8] = { +0x6B0B, 0x4A07, 0x320A, 0x62E9, 0x5267, 0x2187, 0x41E6, 0x62EA, +0x39A6, 0x5A07, 0x3985, 0x83CC, 0x6B2A, 0x3985, 0x5227, 0x3185, +0x1987, 0x49A4, 0x6A44, 0xAC29, 0x8B67, 0x51A3, 0x3964, 0x21A7, +0x4964, 0x7AC8, 0x7329, 0xBC05, 0x9B43, 0x5246, 0x6A67, 0x5184, +0x4164, 0x732A, 0x6B2A, 0xAB64, 0x8B03, 0x4A47, 0x6288, 0x4964, +0x5ACA, 0x4A06, 0x2923, 0x6A43, 0x6243, 0x2944, 0x3984, 0x41E6, +0xB554, 0x7269, 0x3104, 0x28E2, 0x2902, 0x39A5, 0x5123, 0x5164, +0x83AE, 0x49C6, 0x15FD, 0x6984, 0x6964, 0xF800, 0x41A5, 0x5A27, +};