full function game

Space-Invader
CalisJI 2024-08-16 17:01:10 +07:00
parent e4480b5333
commit c9ed38122d
3 changed files with 326 additions and 172 deletions

View File

@ -8,12 +8,12 @@
; Please visit documentation for the other options and examples ; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html ; https://docs.platformio.org/page/projectconf.html
[env:nodemcu-32s] [env:esp32-s3-devkitc-1]
platform = espressif32 platform = espressif32
board = nodemcu-32s board = esp32-s3-devkitc-1
board_build.mcu = esp32
framework = arduino framework = arduino
monitor_speed = 230400 monitor_speed = 230400
board_build.mcu = esp32s3
lib_deps = lib_deps =
mrfaptastic/ESP32 HUB75 LED MATRIX PANEL DMA Display@^3.0.12 mrfaptastic/ESP32 HUB75 LED MATRIX PANEL DMA Display@^3.0.12
https://github.com/mrcodetastic/ESP32-HUB75-MatrixPanel-DMA.git https://github.com/mrcodetastic/ESP32-HUB75-MatrixPanel-DMA.git
@ -22,3 +22,6 @@ lib_deps =
mbed-seeed/BluetoothSerial@0.0.0+sha.f56002898ee8 mbed-seeed/BluetoothSerial@0.0.0+sha.f56002898ee8
me-no-dev/AsyncTCP@^1.1.1 me-no-dev/AsyncTCP@^1.1.1
bblanchon/ArduinoJson@^7.1.0 bblanchon/ArduinoJson@^7.1.0
build_flags =
-DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue

View File

@ -256,7 +256,7 @@ bool created_shot = false;
bool direction = false; // false = left, true = right; bool direction = false; // false = left, true = right;
int lastpoint_shot[2]; int lastpoint_shot[2];
unsigned long period_shot = millis(); unsigned long period_shot = millis();
int speed_shot = 100; int speed_shot = 50;
void Drawbullet(bool deleted = false) void Drawbullet(bool deleted = false)
{ {
// measure x dimension // 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() void setup()
{ {
Serial.begin(115200 * 2); // Đảm bảo baud rate khớp với baud rate của Python 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 = 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->setBrightness8(200); // 0-255
dma_display->clearScreen(); 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); // draw_cat(10,10,20,20);
// drawXbm565(10,10,20,20,CAT_bits,dma_display->color565(100,0,0)); // 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() void loop()
{ {
// server.handleClient(); // server.handleClient();
#pragma region Serial processing #pragma region Serial processing
while (Serial.available() > 0) while (Serial.available() > 0)
{ {
@ -500,14 +679,14 @@ void loop()
if (numRows == 1 && numCols == 0) if (numRows == 1 && numCols == 0)
{ {
Mode_game = true; Mode_game = true;
//dma_display->clearScreen(); // dma_display->clearScreen();
// Serial.println("Stick Man"); // Serial.println("Stick Man");
} }
else if (numRows == 0 && numCols == 0) else if (numRows == 0 && numCols == 0)
{ {
Mode_game = false; Mode_game = false;
// Serial.println("HungVat"); // Serial.println("HungVat");
//dma_display->clearScreen(); // dma_display->clearScreen();
} }
int expectedSize = numRows * numCols * floatSize; int expectedSize = numRows * numCols * floatSize;
@ -532,33 +711,28 @@ void loop()
} }
else else
{ {
if (!game_over) X_craft = int(data[0][0]);
drawStickMan(int(data[0][0]), int(data[0][1]), int(data[0][2])); draw_spacecraft(X_craft);
draw_rocket(X_craft);
} }
// Reset chỉ số chỉ mục sau khi xử lý // Reset chỉ số chỉ mục sau khi xử lý
} }
bufferIndex = 0; bufferIndex = 0;
} }
if (Mode_game)
{
if (game_over)
{
if (millis() - period_gameover >= reset_stickman)
{
game_over = false;
dma_display->clearScreen();
}
}
}
// Stickman region // Stickman region
if (Mode_game) if (Mode_game)
{ {
Drawbullet(); if (exist)
Defend(); {
draw_rocket(X_craft);
if (live_enemies <= 0)
{
create_enemies();
}
draw_enemies();
destroy_enemy();
}
} }
else // Hung Vat else // Hung Vat
{ {
@ -570,73 +744,3 @@ void loop()
// readDataFromSerial(); // 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);
// }
// }

View File

@ -1,53 +1,100 @@
#include <stdint.h> #include <stdint.h>
const uint16_t aircraft[20 * 20] = {
0xFFFF, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, const uint16_t aircraft[26 * 26] = {
0xFFDF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA4F2, 0xA4B1, 0xB28B, 0xDAAC, 0xDAAC, 0xB28B, 0xA491,
0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xFFBF, 0xFFBE, 0xFFFF, 0xA533, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000,
0xFFFF, 0xFFBE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD13, 0x9D12, 0xA4B1, 0xD20B, 0xD20B,
0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xA4B1, 0x9512, 0xA513, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBE17, 0xC658, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD3CD, 0xDBCD, 0xAC0E, 0x842E, 0x7BAC,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC1EA, 0xC1EA, 0x7B8C, 0x840F, 0xAC0E, 0xDBAE, 0xDBAD, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF,
0xCEBA, 0x636D, 0x740F, 0xC699, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xECB3, 0xDBEE, 0xDC2E, 0xBC2E,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x7C2F, 0x62C8, 0xC20A, 0xC1EA, 0x62A9, 0x842F, 0xC40E, 0xDC0E,
0xFFDF, 0xFFBF, 0xFFFF, 0xFFFF, 0x8491, 0x8CF2, 0x8D13, 0x8491, 0xDBEE, 0xD24A, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000,
0xEF9E, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA800, 0xDA09,
0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFBF, 0xFFFF, 0xFFFF, 0xD6FB, 0xE2CC, 0xBB0C, 0x6BAC, 0x9B0B, 0x924C, 0x9A6D, 0x9B0B, 0x73AC,
0x7C70, 0xA5F6, 0x9DB5, 0x84B2, 0xDF3C, 0xFFFF, 0xF77D, 0xFFDF, 0xBB0B, 0xE2CC, 0xD9C8, 0xC846, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDBD0,
0xFFFF, 0xFFFF, 0xEF7D, 0x94F2, 0x84B1, 0x63CD, 0x5BAD, 0x7C91, 0xDB6F, 0xDBAF, 0xDA0B, 0xBA4A, 0x62C9, 0xA26A, 0x5270, 0x6BB5,
0x8CB2, 0xFFDF, 0xFFFF, 0xFF9E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA28B, 0x62E9, 0xBA4A, 0xDA0B, 0xDBB0, 0xDB6F, 0xE4D2, 0xFE38,
0xFFFF, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x7C0F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFDF, 0xE472,
0x744F, 0x5BAC, 0x536C, 0x744F, 0x8470, 0xEFBE, 0xFFFF, 0xFFFF, 0xE3D0, 0xD26B, 0xC989, 0xDA6C, 0xD98A, 0xC2CC, 0x92AA, 0xA9A9,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9E, 0xFFFF, 0xFFDF, 0xFFFF, 0x81EC, 0x8AD0, 0xB1EA, 0x92AA, 0xC2CC, 0xD98A, 0xDA6C, 0xC989,
0xFFDF, 0xFFFF, 0xD699, 0xC678, 0x84B1, 0x744F, 0x84B1, 0x8491, 0xD26B, 0xE3B0, 0xDB0D, 0xD451, 0xFFFF, 0xFFFF, 0xFFFF, 0xE2CD,
0xBE37, 0xD6BA, 0xFFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE38F, 0xE24B, 0xECB2, 0xCACC, 0xC28B, 0xD9CA, 0xD16A, 0xBA6A,
0xFFFF, 0xF7BF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE58, 0xAD95, 0xCE99, 0xB9C9, 0xB129, 0x5A2E, 0x7374, 0xB16A, 0xB9C9, 0xB26A, 0xD169,
0x4AA9, 0x638C, 0x52EA, 0x530A, 0xD6DA, 0xADB5, 0xCE59, 0xFFFF, 0xD9CA, 0xC28C, 0xCACC, 0xECB2, 0xE26B, 0xE3B0, 0xE32E, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE3AF, 0xDA2B, 0xE491, 0xE2AC, 0xDA0B, 0xB9A8, 0xB989, 0xC149,
0xEF9D, 0x5AEA, 0xAD95, 0x8470, 0x73AD, 0x5B0A, 0x5AEA, 0x73AD, 0xC149, 0xC22A, 0xC169, 0xC169, 0xA22C, 0xB30F, 0xC1AA, 0xC149,
0x8450, 0xA554, 0x52EA, 0xEFBE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC20A, 0xC149, 0xC149, 0xB989, 0xB9A9, 0xDA0B, 0xE2AC, 0xE4B2,
0xFFFF, 0xFFFF, 0xFFFF, 0xF7FE, 0xC678, 0x31E6, 0x8470, 0x9D12, 0xD22B, 0xE3F0, 0xE411, 0xDA8C, 0xD1EB, 0xD18A, 0xD169, 0xB168,
0x5289, 0x5268, 0x5268, 0x5289, 0x9D13, 0x9D13, 0x3A47, 0xBE37, 0xC989, 0xB908, 0xC149, 0xE26B, 0xD9C9, 0xC168, 0xA927, 0xA926,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEFBE, 0xF7FF, 0xC168, 0xD9C9, 0xE26B, 0xC149, 0xB908, 0xC989, 0xB168, 0xD169,
0xB616, 0x4AC9, 0xADB5, 0x73CD, 0x8C2F, 0x41C6, 0x49C6, 0x83AE, 0xD98A, 0xD20B, 0xD2AC, 0xEC51, 0xDA4A, 0xC9A9, 0xB948, 0xC148,
0x8C50, 0xAD94, 0x3A47, 0xBE58, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB148, 0xA147, 0xC969, 0xC929, 0xD149, 0xC168, 0x9907, 0x7885,
0xFFDF, 0xFFFF, 0xFFFF, 0xEFFE, 0xAE16, 0x21A4, 0x8CD1, 0xFFFE, 0xA107, 0xA127, 0x7885, 0x9906, 0xC188, 0xD149, 0xC929, 0xC969,
0xFF9D, 0xC595, 0xC554, 0xFFDE, 0xFFDE, 0x9D12, 0x21C5, 0xAE16, 0xA147, 0xB148, 0xC149, 0xB948, 0xC9A9, 0xDA4A, 0x9967, 0x9106,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xF7DE, 0xF7FF, 0xB1A7, 0xA967, 0x7906, 0x8146, 0xA927, 0xB948, 0xB908, 0xA907,
0xBE57, 0x8490, 0xFFFE, 0xF7BD, 0xFFFE, 0xEEFA, 0xFF7D, 0xFFBD, 0xB128, 0xA107, 0xB167, 0xB168, 0xA107, 0xB128, 0xA927, 0xB908,
0xFFFF, 0xFFFF, 0x84B1, 0xBE58, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB948, 0xA127, 0x8146, 0x8106, 0xA987, 0xB9A7, 0x9106, 0x9967,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFB2D, 0x7126, 0xC2E7, 0xBAA7, 0x0006, 0x40C4, 0x68C5, 0x8906,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB148, 0x9947, 0xB148, 0xB148, 0xB9A7, 0xB187, 0xB128, 0xB148,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 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, 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, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 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, 0xFFFF, 0xFFFF, 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,
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, 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,
}; };