有關貪吃蛇的歷史發展可以看一下這個網址,貪吃蛇最初的設計和現在並不相同。。http://www.techweb.com.cn/internet/2013-02-21/1278055.shtml
該項目設計硬件平台選擇了簡單易用的AT89C51單片機,顯示屏選擇的是AMPIRE128X64液晶屏幕顯示器,按照一定順序連接后,如下圖:
軟件方面采用了C51編寫代碼,代碼編寫模塊如下圖:
除去網上已有的圖形驅動代碼外,其核心代碼主要為游戲處理、信息處理和按鍵處理。
編寫游戲的功能代碼,先定義游戲的數據結構和常量。
#define uchar unsigned char #define uint unsigned int sbit P00 = P0 ^ 0; // 右 sbit P01 = P0 ^ 1; // 左 sbit P02 = P0 ^ 2; // 上 sbit P03 = P0 ^ 3; // 下 sbit P04 = P0 ^ 4; // 開始/暫停 #define RIGHT 1 #define LEFT 2 #define UP 3 #define DOWN 4 #define ERASE 0 #define REWRITTEN 1 #define NO 0 #define YES 1 #define FALSE 0 #define TRUE 1 bit ESC = TRUE; // 開始 暫停標志位 uchar gameSpeed = 20; // 游戲速度調節 uchar level = 1; // 難度 uchar s1[] = "1"; // 保存顯示難度的漢子 // uchar = unsigned char // 食物的結構體 struct Food { uchar x; // 食物的橫坐標 uchar y; // 食物的縱坐標 }food; // 貪吃蛇主體的結構體 struct Snake { uchar x[39]; uchar y[39]; uchar node; // 蛇的節數 uchar direction; // 蛇移動方向 }snake;
其中食物的數據結構采用結構體定義,兩個unsigned char變量分別定義為食物的橫縱坐標;蛇的身體定義為長度最大值為39的數組,游戲中貪吃蛇長度達到39,游戲通關結束。
游戲處理模塊為貪吃蛇在游玩過程中遇到的需要被處理的情況,主要實現的功能包括以下四個方面,即移動、食物、死亡和更新。
- 移動
流程與運行仿真如上圖,按下“開始”鍵后,游戲開始啟動,初始化完畢后,屏幕會顯示“貪吃蛇”、“食物”和游戲的邊界框,“貪吃蛇”在固定的周期內會向前移動一格,此時“貪吃蛇”身體從尾巴至頭部每一個后序節點會向前序節點移動,后序節點移動完畢后,頭部會根據此時按鍵的方向對相應的橫縱坐標進行加減。
- 食物
“貪吃蛇”向前移動后,此時要判斷蛇頭是否與“食物”的橫縱坐標一一對應,如果不是則退出該模塊,進入下一模塊;如果是,則“貪吃蛇”的節數增加一。節數增加后判斷蛇的節數是否為10的倍數,如果是則提升“貪吃蛇”的等級,並對游戲增加難度,加快貪吃蛇移動的速度。退出了游戲升級的模塊后將進入創建新的“食物”模塊,為了避免“食物”與“貪吃蛇”的節點坐標重復,“食物”在創建后要與“貪吃蛇”的每個節點的坐標一一比較,如果重合則重新創建“食物”的坐標,直到創建成功為止。
- 結束
“貪吃蛇”在向前移動后,有可能撞到牆壁或自己的身體,也有可能吃到食物,或者只是向前移動一格,移動完畢后如果吃到了食物,如果“貪吃蛇”的node(節數)達到了最大值(39),那么玩家將會通關游戲,並且游戲退出,此時需要判斷游戲是否結束,一共有三種判別,前兩種為失敗結局,即撞到了牆壁或自己的身體,最后一種為通關結局,將在屏幕上打印“Congratulations”祝賀玩家成功通關游戲。
- 更新
游戲在判斷結束后,如果沒有結束,那么更新屏幕上的“貪吃蛇”的狀態。
四個模塊的核心代碼如下:
// 運行游戲的具體實現 void gamePlay(void) { bit hero = FALSE; // 完成游戲 while(1) { EA = 1; if (ESC == FALSE) { gameSpeed = 20; level = 1; s1[0] = '1'; start(); } while(ESC == FALSE) { EA = 1; move(); // 貪吃蛇向前移動 if(snake.x[0] == food.x && snake.y[0] == food.y) { // 判斷蛇頭吃到食物以后 RectArea(food.x, food.y, food.x + 2, food.y + 2, ERASE); // 把畫面上的食物去掉 snake.node++; // 蛇的身體長一節 if (increaseLevel()) { // 根據難度變化判斷是否要重新開始 restart(); continue; } while (!createNewFood()) { // 如果創建失敗則繼續創建,直到成功 ; } RectArea(food.x, food.y, food.x + 2, food.y + 2, REWRITTEN); // 在畫面上顯示食物 } if (isOver()) { // 判斷游戲是否結束 if(snake.node == 39) hero = TRUE; } ESC = TRUE; hero = gameOver(hero); break; } // 打印貪吃蛇 updataSnakeHead(); // 更新頭部 delay(gameSpeed); // 速度設置 eraseSnakeTail(); // 刪除尾巴 } // 退出循環(!ESC) } }
其余的函數代碼編寫如下:
// 隨機數產生 int rand(void) { int i; i = ((TH0 << 8) | TL0) & 0x7fff; return(i); } // 延時 void delay(uchar ms) // 10毫秒 { uchar i, j, k; while(ms--) { for(i = 5; i > 0; i--) { for(j = 4; j > 0; j--) { for(k = 248; k > 0; k--) ; } } } } void mulDelay(int s) // 1秒 { int i; uchar j; for (i = 0; i < s; ++i) { for (j = 0; j < 100; ++j) { delay(1); } } } // 鍵掃描函數 void KeyScan() { P0 = 0xff; if(P00 == 0 && snake.direction != LEFT) { snake.direction = RIGHT; } if(P01 == 0 && snake.direction != RIGHT) { snake.direction = LEFT; } if(P02 == 0 && snake.direction != DOWN) { snake.direction = UP; } if(P03 == 0 && snake.direction != UP) { snake.direction = DOWN; } if(P04 == 0) { ESC = ~ESC; } } void int_0(void) interrupt 0 { EA = 0; KeyScan(); } void snakeInit() { snake.direction = RIGHT; // 方向往右 snake.x[0] = 9; // 蛇頭坐標 snake.y[0] = 33; snake.x[1] = 6; // 蛇尾坐標 snake.y[1] = 33; snake.node = 2; // 節數 } void init(void) { EX0 = 1; // 開中斷 IT0 = 1; // 設置電平觸發方式 EA = 1; // 開所有中斷 TMOD = 0x01; TH0 = 65536 / 256; TL0 = 65536 % 256; TR0 = 1; hz_disp(3, 40, 3, snaker, 1); snakeInit(); } // 需要出現新食物 bit createNewFood() { uchar i; uchar size = snake.node; bit flag = TRUE; // 標記創建的新事物與貪吃蛇的身體沖突 food.x = rand() % 114 + 6; food.y = rand() % 51 + 6; // 食物的坐標必須為3的倍數才會在顯示屏先被顯示 for (; food.x % 3 != 0; ++food.x) { ; } for (; food.y % 3 != 0; ++food.y) { ; } for (i = 0; i < size; ++i) { if (food.x == snake.x[i] && food.y == snake.y[i]) { flag = FALSE; break; } } return flag; } void start() { ClearLCD(); hz_disp(3, 40, 2, gameLevel, REWRITTEN); // 顯示漢子“難度” en_disp(3, 80, 1, Asc, s1, REWRITTEN); // 顯示s1數組的內容 delay(150); ClearLCD(); rectBoundary(5, 5, 123, 60, REWRITTEN); // 顯示邊框 while (!createNewFood()) { // 如果創建失敗則繼續創建,直到成功 ; } RectArea(food.x, food.y, food.x + 2, food.y + 2, REWRITTEN); // 在畫面上顯示食物 } // 重新開始 void restart() { start(); } // 是否增加難度 // 如果是,那么要重新開始 bit increaseLevel() { bit res = NO; // 每次蛇的長度超過10個增加一次難度,level最高4級 if(snake.node % 10 == 0) { level += 1; switch (level) { case 2: s1[0] = '2'; gameSpeed = 15; break; case 3: s1[0] = '3'; gameSpeed = 10; break; case 4: s1[0] = '4'; gameSpeed = 5; break; } res = YES; } return res; } // 貪吃蛇移動 void move() { uchar i; // 將蛇從最后個節點向前一個節點移動 for(i = snake.node - 1; i > 0; i--) { snake.x[i] = snake.x[i - 1]; snake.y[i] = snake.y[i - 1]; } // 根據此時貪吃蛇的方向,設置蛇頭的位置 switch(snake.direction) { case RIGHT: snake.x[0] += 3; break; case LEFT: snake.x[0] -= 3; break; case UP: snake.y[0] -= 3; break; case DOWN: snake.y[0] += 3; break; } } // 游戲是否結束 bit isOver() { bit overFlag = 0; uchar i; // 判斷蛇是否吃到自己了 // 從蛇的第四節開始判斷是否撞到自己了 for (i = 3; i < snake.node; i++) { if (snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0]) { overFlag = 1; break; } } if(snake.x[0] < 6 || snake.x[0] > 120 || snake.y[0] < 6 || snake.y[0] > 57) { // 判斷蛇是否撞到牆壁 overFlag = 1; } if(snake.node == 39) { overFlag = 1; } return overFlag; } void congratulations() { idata uchar str[] = "Congratulations"; uchar tmp[1]; uchar len = 15; uchar i; s1[0] = 's'; for (i = 0; i < 15; ++i) { tmp[0] = str[i]; en_disp(3, i * 8 + 1, 1, Asc, tmp, REWRITTEN); // en_disp(3, 80, 1, Asc, s1, REWRITTEN); } } // 游戲結束后的畫面 void theEndGraph() { uchar i, j; for (i = 0; i < 2; ++i) { for (j = 0; j < 6; ++j) { hz_disp(i * 2, j * 21, 1, mySchool[i*6+j], 1); } } for (i = 0; i < 6; ++i) { hz_disp(6, i * 21, 1, myName[i], 1); } } // 游戲結束 bit gameOver(bit hero) { // ClearLCD(); if (hero == TRUE) { // 當玩家貪吃蛇的節點達到了39個后顯示恭喜通關畫面 hero = FALSE; congratulations(); mulDelay(2); } else { hz_disp(3, 25, 4, theEnd, 1); mulDelay(2); } ClearLCD(); theEndGraph(); // 打印“畢業設計“ snakeInit(); // 重新初始化游戲的參數 return hero; } // 更新貪吃蛇的頭部 void updataSnakeHead() { RectArea(snake.x[0], snake.y[0], snake.x[0] + 2, snake.y[0] + 2, REWRITTEN); // 繪制當前的頭部 RectArea(snake.x[1], snake.y[1], snake.x[1] + 2, snake.y[1] + 2, REWRITTEN); // 將上一次的頭部重新繪制以補全邊角 // 根據蛇的方向擦除蛇的頭部中間的一點以確認貪吃蛇的頭部 switch (snake.direction) { case RIGHT: Dot(snake.x[0] + 2, snake.y[0] + 1, ERASE); break; case LEFT: Dot(snake.x[0], snake.y[0] + 1, ERASE); break; case UP: Dot(snake.x[0] + 1, snake.y[0], ERASE); break; case DOWN: Dot(snake.x[0] + 1, snake.y[0] + 2, ERASE); break; } } // 去除蛇的的最后一節 void eraseSnakeTail() { RectArea(snake.x[snake.node - 1], snake.y[snake.node - 1], snake.x[snake.node - 1] + 2, snake.y[snake.node - 1] + 2, ERASE); }
測試函數放在最后
void main (void) { LCD12864_init(); ClearLCD(); init(); gamePlay(); while(1) { ; } }
以上是貪吃蛇游戲的實現snake.c,游戲的圖形驅動12864.h和打印的字符代碼asc.h如下:
// 12864.h /*-----------------------------------------------------------*/ #define LCD_OFF 0x3E #define LCD_ON 0x3F #define Add_X 0xB8 // the start address of the page 0 ;(0~7) #define Add_Y 0x40 // the start address of the Y counter ; (0~64) #define Add_Z 0xC0 // the start address of the DDRAM ; (0~64) /*-----------------------------------------------------------*/ #define LCD12864_DATA_PORT P1 typedef unsigned char uchar; sbit LCD12864_EN = P2 ^ 0; sbit LCD12864_RW = P2 ^ 1; // 0:write ; 1:read sbit LCD12864_RS = P2 ^ 2; // 0:the command .1:the data sbit LCD12864_CS_L = P2 ^ 3; // select the left of the lcd when 1 sbit LCD12864_CS_R = P2 ^ 4; /*--------------------------函數列表-------------------------*/ void LCDSel(uchar sel); // 片選 0全選 1左 2右 void WaitLCD(); // 忙等待 void WriteDatToLCD12864(uchar dat); // 寫數據 void WriteCmdToLCD12864(uchar cmd); // 寫命令 uchar ReadDatFromLCD12864(void); // 讀數據 void SetX(uchar x); // 設置頁地址0 - 7 void SetY(uchar y); // 設置列地址0 - 127 void SetZ(uchar z); // 設置首地址0-63 void ClearLCD(); // 清屏 void Dot(char x, char y, bit flag); // x:0~63~127 y:0~63 flag :0:擦除某個點 1:顯示某個點 void Line(uchar x1, uchar y1, uchar x2, uchar y2, bit flag); // (x1,y1) (x2,y2)作直線 flag :0:擦除線 1:顯示線 void Rect(uchar x1, uchar y1, uchar x2, uchar y2, bit flag); // (x1,y1) (x2,y2)作矩形框 flag :0:擦除框 1:顯示框 void RectArea(uchar x1, uchar y1, uchar x2, uchar y2, bit flag); // (x1,y1) (x2,y2)填充矩形 flag :0:擦除矩形 1:顯示矩形 void hz_disp(uchar x, uchar y, uchar n, uchar code * hz, bit flag); // x:行0~7 y:列0~127 顯示n個漢字 flag:0 反白 16*16 void en_disp(uchar x, uchar y, uchar n, uchar code *asc, uchar *string, bit flag); // x:行0~7 y:列0~127 asc:指向標准交換碼 string:指向要顯示的字符串 flag:0 反白顯示 /*--------------------------select the LCD--------------------*/ void LCDSel(uchar sel) { switch(sel) { case 0: LCD12864_CS_L = 0; LCD12864_CS_R = 0; break; case 1: LCD12864_CS_L = 1; LCD12864_CS_R = 0; break; //left case 2: LCD12864_CS_L = 0; LCD12864_CS_R = 1; break; //right default: ; } } /*------------------------------------------------------------*/ void WaitLCD() { uchar flag; LCD12864_DATA_PORT = 0xFF; LCD12864_RW = 1; LCD12864_RS = 0; LCD12864_EN = 1; LCD12864_EN = 1; LCD12864_EN = 0; LCD12864_DATA_PORT = 0xFF; LCD12864_RW = 1; LCD12864_RS = 0; LCD12864_EN=1; do { flag=LCD12864_DATA_PORT; } while(!((flag & 0x80) == 0x80)); LCD12864_EN=0; } /*-------------------------------------------------------------*/ void WriteDatToLCD12864(uchar dat) { WaitLCD(); LCD12864_RS = 1; LCD12864_RW = 0; LCD12864_DATA_PORT = dat; LCD12864_EN = 1; LCD12864_EN = 0; } /*-------------------------------------------------------------*/ void WriteCmdToLCD12864(uchar cmd) { WaitLCD(); LCD12864_RS = 0; LCD12864_RW = 0; LCD12864_DATA_PORT = cmd; LCD12864_EN = 1; LCD12864_EN = 0; } /*-------------------------------------------------------------*/ uchar ReadDatFromLCD12864(void) { uchar dat; WaitLCD(); LCD12864_DATA_PORT = 0xFF; LCD12864_RS = 1; LCD12864_RW = 1; LCD12864_EN = 1; LCD12864_EN = 1; LCD12864_EN = 0; LCD12864_DATA_PORT = 0xFF; LCD12864_RS = 1; LCD12864_RW = 1; LCD12864_EN = 1; LCD12864_EN = 1; dat = LCD12864_DATA_PORT; LCD12864_EN = 0; return dat; } //x:0~7 void SetX(uchar x) { WriteCmdToLCD12864(Add_X + x); } //y:0~127 void SetY(uchar y) { WriteCmdToLCD12864(Add_Y + y); } /*------------------------------------------------------------*/ //z:0~63 void SetZ(uchar z) { WriteCmdToLCD12864(Add_Z + z); } // 12864顯示器初始化 void LCD12864_init(void) { LCDSel(0); WriteCmdToLCD12864(0x3E); // 分別初始化左半屏和右半屏 WriteCmdToLCD12864(0X3F); } // 清屏 void ClearLCD() { int i, j; LCDSel(0); for(j = 0; j < 8; j++) { WriteCmdToLCD12864(LCD_ON); SetX(j); WriteCmdToLCD12864(Add_Y); SetZ(0); for (i = 0; i < 64; i++) { WriteDatToLCD12864(0x00); } } } /*------------------------------------------------------------*/ //左上角第一個點為原點,垂直向下為Y軸,水平向右為X軸 //x:0~63~127 y:0~63 //flag : 0:擦除某個點 // 1:顯示某個點 uchar code Tab[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; void Dot(char x,char y,bit flag) { unsigned char dat; // y=63-y; // 坐標軸的移動和反轉 if (x < 64) { LCDSel(1); SetX(y / 8); // set the page address SetY(x); // set the Y adress dat = ReadDatFromLCD12864(); if(flag) { dat = dat | (Tab[y % 8]); } else { dat= dat & (~(Tab[y % 8])); } SetX(y / 8); SetY(x); //set the Y adress WriteDatToLCD12864(dat); } else if (x < 128) { LCDSel(2); SetX(y / 8); SetY(x - 64); dat=ReadDatFromLCD12864(); if(flag) { dat = dat | (Tab[y % 8]); } else { dat = dat & (~(Tab[y % 8])); } SetY(x - 64); WriteDatToLCD12864(dat); } } void swap(uchar *x, uchar *y) { uchar tmp = *x; *x = *y; *y = tmp; } // draw a line between point(x1,y1) and point(x2,y2) // flag 0: erase the line // 1: draw a line void Line(uchar x1, uchar y1, uchar x2, uchar y2, bit flag) { uchar i; float k; if (x1 == x2) { if (y1 > y2) { swap(&x1, &x2); swap(&y1, &y2); } for (i = y1; i <= y2; i++) { Dot(x1, i, flag); } } else { if ( x1 > x2) { swap(&x1, &x2); swap(&y1, &y2); } k = (float)(y2 - y1) / (float)(x2 - x1); for (i = 0; i < x2 - x1; i++) { Dot(x1 + i, (uchar)(y1 + k * i), flag); } } } void rectBoundary(uchar x1, uchar y1, uchar x2, uchar y2, bit flag) { Line(x1, y1, x2, y1, flag); Line(x1, y1, x1, y2, flag); Line(x2, y1, x2, y2, flag); Line(x1, y2, x2, y2, flag); } void RectArea(uchar x1, uchar y1, uchar x2, uchar y2, bit flag) { uchar i; if (x1 > x2) { swap(&x1, &x2); swap(&y1, &y2); } for (i = 0; i <= x2 - x1; i++) { Line(x1 + i, y1, x1 + i, y2, flag); } } // 16 * 16 // x行 0~7 // y列 0~127 // flag 0:漢字反白顯示 void hz_disp(uchar x, uchar y, uchar n, uchar code * hz, bit flag) { uchar i, j; for (j = 0; j < n; j++) { //顯示上半個漢字 for (i = 0; i < 16; i++) { //點的位置是在左還是右 if(y + 16 * j + i < 64) { LCDSel(1); WriteCmdToLCD12864(LCD_ON); SetX(x); SetZ(0); SetY(y+16*j+i); if(flag) { WriteDatToLCD12864(hz[32 * j + i]); } else { WriteDatToLCD12864(~hz[32 * j + i]); } } else if(y + 16 * j + i < 128) { LCDSel(2); WriteCmdToLCD12864(LCD_ON); SetX(x); SetZ(0); SetY(y + 16 * j + i - 64); if(flag) { WriteDatToLCD12864(hz[32 * j + i]); } else { WriteDatToLCD12864(~hz[32 * j + i]); } } } //顯示下半個漢字 for (i = 16; i < 32; i++) { //先判斷點是在左還是在右 if(y + 16 * j + i - 16 < 64) { if(x + 1 < 8) { //最后一行顯示上半個字 LCDSel(1); WriteCmdToLCD12864(LCD_ON); SetX(x + 1); SetZ(0); SetY(y + 16 * j + i - 16); if(flag) { WriteDatToLCD12864(hz[32 * j + i]); } else { WriteDatToLCD12864(~hz[32 * j + i]); } } } else if (y + 16 * j + i - 16 < 127) { if(x + 1 < 8) { //最后一行 LCDSel(2); WriteCmdToLCD12864(LCD_ON); SetX(x + 1); SetZ(0); SetY(y + 16 * j + i - 16 - 64); if(flag) { WriteDatToLCD12864(hz[32 * j + i]); } else { WriteDatToLCD12864(~hz[32 * j + i]); } } } } } } // x:行0~7 // y:列0~127 // asc: 指向標准交換碼 // string: 指向要顯示的字符串 // flag: 0 反白顯示 void en_disp(uchar x, uchar y, uchar n, uchar code *asc, uchar *string, bit flag) { uchar i, j, loc; for (j = 0; j < n; j++) { loc = string[j] - 0x20; // 確定要顯示的字符在asc表中的位置(乘上16) // 顯示上半個ASCII字符 for (i = 0; i < 8; i++) { // 點的位置是在左還是右 if( y + 8 * j + i < 64) { LCDSel(1); WriteCmdToLCD12864(LCD_ON); SetX(x); SetZ(0); SetY(y + 8 * j + i); if(flag) { WriteDatToLCD12864(asc[16 * loc + i]); } else { WriteDatToLCD12864(~asc[16 * loc + i]); } } else if (y + 8 * j + i < 128) { LCDSel(2); WriteCmdToLCD12864(LCD_ON); SetX(x); SetZ(0); SetY(y + 8 * j + i - 64); if(flag) { WriteDatToLCD12864(asc[16 * loc + i]); } else { WriteDatToLCD12864(~asc[16 * loc + i]); } } } // 顯示下半個ASCII字符 for (i = 8; i < 16; i++) { // 先判斷點是在左還是在右 if(y + 8 * j + i - 8 < 64) { if(x + 1 < 8) { // 最后一行 LCDSel(1); WriteCmdToLCD12864(LCD_ON); SetX(x + 1); SetZ(0); SetY(y + 8 * j + i - 8); if(flag) { WriteDatToLCD12864(asc[16 * loc + i]); } else { WriteDatToLCD12864(~asc[16 * loc + i]); } } } else if (y + 8 * j + i - 8 < 128) { if(x + 1 < 8) { // 最后一行 LCDSel(2); WriteCmdToLCD12864(LCD_ON); SetX(x + 1); SetZ(0); SetY(y + 8 * j + i - 8 - 64); if(flag) { WriteDatToLCD12864(asc[16 * loc + i]); } else { WriteDatToLCD12864(~asc[16 * loc + i]); } } } } } }
// asc.h // 以下均為漢子和字符的代碼,感謝曉奇工作室 www.xiao-qi.com的軟件 // 難度 unsigned char code gameLevel[]= { 0x04,0x34,0xC4,0x04,0xC4,0x3E,0x44,0x20, 0xF8,0x4F,0x49,0xFA,0x48,0x4C,0x08,0x00, 0x20,0x10,0x0C,0x03,0x04,0x18,0x00,0x00, 0xFF,0x22,0x22,0x3F,0x22,0x32,0x20,0x00, 0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0xA5, 0xA6,0xA4,0xFC,0x24,0x34,0x26,0x04,0x00, 0x40,0x20,0x9F,0x80,0x42,0x42,0x26,0x2A, 0x12,0x2A,0x26,0x42,0x40,0xC0,0x40,0x00 }; // 貪吃蛇 unsigned char code snaker[]= { 0x00,0x20,0x10,0xD8,0x88,0x8C,0x96,0x97, 0xDB,0xB2,0x94,0x9C,0xD8,0xB0,0x20,0x20, 0x00,0x00,0x00,0x9F,0x5F,0x60,0x30,0x3E, 0x1C,0x60,0xC0,0xDF,0x5F,0x00,0x00,0x00, 0x00,0xFC,0xF8,0x08,0xF8,0xFC,0x48,0x20, 0xB8,0x9E,0x97,0x92,0x90,0xD0,0x98,0x10, 0x00,0x1F,0x1F,0x08,0x1F,0x1F,0x00,0x70, 0xF8,0xCC,0xC6,0xC2,0xC3,0xC1,0xF0,0x40, 0x00,0xF0,0x20,0xFE,0xFC,0x20,0xF0,0x18, 0x3C,0x08,0xE9,0xCE,0x0C,0x88,0x38,0x1C, 0x00,0x23,0x62,0x3F,0x3F,0x12,0x3B,0x20, 0x10,0x08,0x7F,0xFF,0xC3,0xC3,0x79,0x20 }; // 游戲結束 unsigned char code theEnd[]= { 0x10,0x22,0x6C,0x00,0x08,0x08,0xF9,0x4A, 0xC8,0x18,0x28,0x27,0xA4,0x66,0x24,0x00, 0x04,0x04,0xFE,0x41,0x20,0x18,0x07,0x40, 0x7F,0x02,0x42,0x82,0x7F,0x02,0x02,0x00, 0x00,0x14,0x24,0xC4,0x04,0xE4,0x1C,0x10, 0x10,0xFF,0x10,0x12,0x14,0xD0,0x10,0x00, 0x20,0x10,0x08,0x06,0x01,0x02,0x8C,0x40, 0x20,0x17,0x18,0x24,0x43,0x80,0xE0,0x00, 0x00,0x30,0x28,0xA4,0x63,0x10,0x08,0x48, 0x48,0x48,0x7F,0x48,0x48,0x4C,0x08,0x00, 0x00,0x22,0x63,0x22,0x12,0x12,0x00,0xFE, 0x42,0x42,0x42,0x42,0x42,0xFF,0x02,0x00, 0x04,0x04,0xE4,0x24,0x24,0x24,0x24,0xFF, 0x24,0x24,0x24,0x24,0xF4,0x26,0x04,0x00, 0x40,0x40,0x27,0x22,0x12,0x0A,0x06,0xFF, 0x06,0x0A,0x12,0x12,0x27,0x60,0x20,0x00 }; // 成都理工大學工程技術學院 unsigned char code mySchool[12][32] = { 0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0x08, 0x08,0xFF,0x08,0x09,0x0A,0xC8,0x08,0x00, 0x80,0x60,0x1F,0x00,0x10,0x20,0x1F,0x80, 0x40,0x21,0x16,0x18,0x26,0x41,0xF8,0x00, 0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28, 0x26,0x20,0xFE,0x02,0x22,0xDA,0x06,0x00, 0x04,0x02,0xFF,0x49,0x49,0x49,0x49,0xFF, 0x00,0x00,0xFF,0x08,0x10,0x08,0x07,0x00, 0x04,0x84,0x84,0xFC,0x84,0x84,0x00,0xFE, 0x92,0x92,0xFE,0x92,0x92,0xFE,0x00,0x00, 0x20,0x60,0x20,0x1F,0x10,0x10,0x40,0x44, 0x44,0x44,0x7F,0x44,0x44,0x44,0x40,0x00, 0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC, 0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00, 0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00, 0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96, 0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00, 0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E, 0x06,0x05,0x04,0x04,0x04,0x04,0x04,0x00, 0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC, 0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 0x24,0x24,0xA4,0xFE,0x23,0x22,0x00,0x3E, 0x22,0x22,0x22,0x22,0x22,0x3E,0x00,0x00, 0x08,0x06,0x01,0xFF,0x01,0x06,0x40,0x49, 0x49,0x49,0x7F,0x49,0x49,0x49,0x41,0x00, 0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88, 0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00, 0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40, 0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00, 0x00,0x10,0x10,0x10,0x10,0xD0,0x30,0xFF, 0x30,0xD0,0x12,0x1C,0x10,0x10,0x00,0x00, 0x10,0x08,0x04,0x02,0x01,0x00,0x00,0xFF, 0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x00, 0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96, 0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00, 0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E, 0x06,0x05,0x04,0x04,0x04,0x04,0x04,0x00, 0x00,0xFE,0x22,0x5A,0x86,0x10,0x0C,0x24, 0x24,0x25,0x26,0x24,0x24,0x14,0x0C,0x00, 0x00,0xFF,0x04,0x08,0x07,0x80,0x41,0x31, 0x0F,0x01,0x01,0x3F,0x41,0x41,0x71,0x00 }; // 畢業設計 unsigned char code myName[6][32] = { 0x40,0x48,0x48,0x48,0xFF,0x48,0x48,0x00, 0x04,0x08,0x30,0xC0,0x30,0x0E,0x00,0x00, 0x80,0x60,0x1F,0x20,0x7F,0x44,0x44,0x40, 0x48,0x44,0x43,0x40,0x43,0x4C,0x40,0x00, 0x20,0xC2,0x0C,0x80,0x84,0xA4,0xA4,0xAF, 0xA4,0xF4,0xA4,0xAF,0xA4,0xE4,0x84,0x00, 0x04,0x04,0x7E,0x81,0x40,0x3A,0x22,0x1A, 0x02,0xFF,0x0A,0x32,0x02,0xFB,0x00,0x00, 0x00,0x00,0xFF,0x88,0x88,0x48,0x48,0x00, 0x7F,0x88,0x84,0x84,0x82,0xE0,0x00,0x00, 0x04,0x04,0x05,0x04,0x04,0x04,0x04,0xFF, 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, 0x00,0x10,0x60,0x80,0x00,0xFF,0x00,0x00, 0x00,0xFF,0x00,0x00,0xC0,0x30,0x00,0x00, 0x40,0x40,0x40,0x43,0x40,0x7F,0x40,0x40, 0x40,0x7F,0x42,0x41,0x40,0x40,0x40,0x00, 0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9E, 0x82,0x82,0x82,0x9E,0xA0,0x20,0x20,0x00, 0x00,0x00,0x00,0x3F,0x90,0x88,0x40,0x43, 0x2C,0x10,0x28,0x46,0x41,0x80,0x80,0x00, 0x40,0x40,0x42,0xCC,0x00,0x40,0x40,0x40, 0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x00, 0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x00, 0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00 }; // ASCII值 unsigned char code Asc[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x38,0xFC,0xFC,0x38,0x00,0x00, // -!- 0x00,0x00,0x00,0x0D,0x0D,0x00,0x00,0x00, 0x00,0x0E,0x1E,0x00,0x00,0x1E,0x0E,0x00, // -"- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x20,0xF8,0xF8,0x20,0xF8,0xF8,0x20,0x00, // -#- 0x02,0x0F,0x0F,0x02,0x0F,0x0F,0x02,0x00, 0x38,0x7C,0x44,0x47,0x47,0xCC,0x98,0x00, // -$- 0x03,0x06,0x04,0x1C,0x1C,0x07,0x03,0x00, 0x30,0x30,0x00,0x80,0xC0,0x60,0x30,0x00, // -%- 0x0C,0x06,0x03,0x01,0x00,0x0C,0x0C,0x00, 0x80,0xD8,0x7C,0xE4,0xBC,0xD8,0x40,0x00, // -&- 0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00, 0x00,0x10,0x1E,0x0E,0x00,0x00,0x00,0x00, // -'- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xF0,0xF8,0x0C,0x04,0x00,0x00, // -(- 0x00,0x00,0x03,0x07,0x0C,0x08,0x00,0x00, 0x00,0x00,0x04,0x0C,0xF8,0xF0,0x00,0x00, // -)- 0x00,0x00,0x08,0x0C,0x07,0x03,0x00,0x00, 0x80,0xA0,0xE0,0xC0,0xC0,0xE0,0xA0,0x80, // -*- 0x00,0x02,0x03,0x01,0x01,0x03,0x02,0x00, 0x00,0x80,0x80,0xE0,0xE0,0x80,0x80,0x00, // -+- 0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -,- 0x00,0x00,0x10,0x1E,0x0E,0x00,0x00,0x00, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, // --- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -.- 0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00, 0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x00, // -/- 0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00, 0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00, // -0- 0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00, 0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00, // -1- 0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00, 0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00, // -2- 0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00, 0x08,0x0C,0x44,0x44,0x44,0xFC,0xB8,0x00, // -3- 0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00, 0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00, // -4- 0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00, 0x7C,0x7C,0x44,0x44,0xC4,0xC4,0x84,0x00, // -5- 0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00, 0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00, // -6- 0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00, 0x0C,0x0C,0x04,0x84,0xC4,0x7C,0x3C,0x00, // -7- 0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00, 0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00, // -8- 0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00, 0x38,0x7C,0x44,0x44,0x44,0xFC,0xF8,0x00, // -9- 0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00, 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, // -:- 0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00, 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, // -;- 0x00,0x00,0x08,0x0E,0x06,0x00,0x00,0x00, 0x00,0x80,0xC0,0x60,0x30,0x18,0x08,0x00, // -<- 0x00,0x00,0x01,0x03,0x06,0x0C,0x08,0x00, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, // -=- 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00, 0x00,0x08,0x18,0x30,0x60,0xC0,0x80,0x00, // ->- 0x00,0x08,0x0C,0x06,0x03,0x01,0x00,0x00, 0x18,0x1C,0x04,0xC4,0xE4,0x3C,0x18,0x00, // -?- 0x00,0x00,0x00,0x0D,0x0D,0x00,0x00,0x00, 0xF0,0xF8,0x08,0xC8,0xC8,0xF8,0xF0,0x00, // -@- 0x07,0x0F,0x08,0x0B,0x0B,0x0B,0x01,0x00, 0xE0,0xF0,0x98,0x8C,0x98,0xF0,0xE0,0x00, // -A- 0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00, 0x04,0xFC,0xFC,0x44,0x44,0xFC,0xB8,0x00, // -B- 0x08,0x0F,0x0F,0x08,0x08,0x0F,0x07,0x00, 0xF0,0xF8,0x0C,0x04,0x04,0x0C,0x18,0x00, // -C- 0x03,0x07,0x0C,0x08,0x08,0x0C,0x06,0x00, 0x04,0xFC,0xFC,0x04,0x0C,0xF8,0xF0,0x00, // -D- 0x08,0x0F,0x0F,0x08,0x0C,0x07,0x03,0x00, 0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00, // -E- 0x08,0x0F,0x0F,0x08,0x08,0x0C,0x0E,0x00, 0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00, // -F- 0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00, 0xF0,0xF8,0x0C,0x84,0x84,0x8C,0x98,0x00, // -G- 0x03,0x07,0x0C,0x08,0x08,0x07,0x0F,0x00, 0xFC,0xFC,0x40,0x40,0x40,0xFC,0xFC,0x00, // -H- 0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00, 0x00,0x00,0x04,0xFC,0xFC,0x04,0x00,0x00, // -I- 0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00, 0x00,0x00,0x00,0x04,0xFC,0xFC,0x04,0x00, // -J- 0x07,0x0F,0x08,0x08,0x0F,0x07,0x00,0x00, 0x04,0xFC,0xFC,0xC0,0xF0,0x3C,0x0C,0x00, // -K- 0x08,0x0F,0x0F,0x00,0x01,0x0F,0x0E,0x00, 0x04,0xFC,0xFC,0x04,0x00,0x00,0x00,0x00, // -L- 0x08,0x0F,0x0F,0x08,0x08,0x0C,0x0E,0x00, 0xFC,0xFC,0x38,0x70,0x38,0xFC,0xFC,0x00, // -M- 0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00, 0xFC,0xFC,0x38,0x70,0xE0,0xFC,0xFC,0x00, // -N- 0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00, 0xF0,0xF8,0x0C,0x04,0x0C,0xF8,0xF0,0x00, // -O- 0x03,0x07,0x0C,0x08,0x0C,0x07,0x03,0x00, 0x04,0xFC,0xFC,0x44,0x44,0x7C,0x38,0x00, // -P- 0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00, 0xF8,0xFC,0x04,0x04,0x04,0xFC,0xF8,0x00, // -Q- 0x07,0x0F,0x08,0x0E,0x3C,0x3F,0x27,0x00, 0x04,0xFC,0xFC,0x44,0xC4,0xFC,0x38,0x00, // -R- 0x08,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00, 0x18,0x3C,0x64,0x44,0xC4,0x9C,0x18,0x00, // -S- 0x06,0x0E,0x08,0x08,0x08,0x0F,0x07,0x00, 0x00,0x1C,0x0C,0xFC,0xFC,0x0C,0x1C,0x00, // -T- 0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00, 0xFC,0xFC,0x00,0x00,0x00,0xFC,0xFC,0x00, // -U- 0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00, 0xFC,0xFC,0x00,0x00,0x00,0xFC,0xFC,0x00, // -V- 0x01,0x03,0x06,0x0C,0x06,0x03,0x01,0x00, 0xFC,0xFC,0x00,0x80,0x00,0xFC,0xFC,0x00, // -W- 0x03,0x0F,0x0E,0x03,0x0E,0x0F,0x03,0x00, 0x0C,0x3C,0xF0,0xC0,0xF0,0x3C,0x0C,0x00, // -X- 0x0C,0x0F,0x03,0x00,0x03,0x0F,0x0C,0x00, 0x00,0x3C,0x7C,0xC0,0xC0,0x7C,0x3C,0x00, // -Y- 0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00, 0x1C,0x0C,0x84,0xC4,0x64,0x3C,0x1C,0x00, // -Z- 0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0E,0x00, 0x00,0x00,0xFC,0xFC,0x04,0x04,0x00,0x00, // -[- 0x00,0x00,0x0F,0x0F,0x08,0x08,0x00,0x00, 0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00, // -\- 0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x00, 0x00,0x00,0x04,0x04,0xFC,0xFC,0x00,0x00, // -]- 0x00,0x00,0x08,0x08,0x0F,0x0F,0x00,0x00, 0x08,0x0C,0x06,0x03,0x06,0x0C,0x08,0x00, // -^- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -_- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x00,0x00,0x03,0x07,0x04,0x00,0x00,0x00, // -`- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xA0,0xA0,0xA0,0xE0,0xC0,0x00,0x00, // -a- 0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00, 0x04,0xFC,0xFC,0x20,0x60,0xC0,0x80,0x00, // -b- 0x08,0x0F,0x07,0x08,0x08,0x0F,0x07,0x00, 0xC0,0xE0,0x20,0x20,0x20,0x60,0x40,0x00, // -c- 0x07,0x0F,0x08,0x08,0x08,0x0C,0x04,0x00, 0x80,0xC0,0x60,0x24,0xFC,0xFC,0x00,0x00, // -d- 0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00, 0xC0,0xE0,0xA0,0xA0,0xA0,0xE0,0xC0,0x00, // -e- 0x07,0x0F,0x08,0x08,0x08,0x0C,0x04,0x00, 0x40,0xF8,0xFC,0x44,0x0C,0x18,0x00,0x00, // -f- 0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00, 0xC0,0xE0,0x20,0x20,0xC0,0xE0,0x20,0x00, // -g- 0x27,0x6F,0x48,0x48,0x7F,0x3F,0x00,0x00, 0x04,0xFC,0xFC,0x40,0x20,0xE0,0xC0,0x00, // -h- 0x08,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00, 0x00,0x00,0x20,0xEC,0xEC,0x00,0x00,0x00, // -i- 0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00, 0x00,0x00,0x00,0x00,0x20,0xEC,0xEC,0x00, // -j- 0x00,0x30,0x70,0x40,0x40,0x7F,0x3F,0x00, 0x04,0xFC,0xFC,0x80,0xC0,0x60,0x20,0x00, // -k- 0x08,0x0F,0x0F,0x01,0x03,0x0E,0x0C,0x00, 0x00,0x00,0x04,0xFC,0xFC,0x00,0x00,0x00, // -l- 0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00, 0xE0,0xE0,0x60,0xC0,0x60,0xE0,0xC0,0x00, // -m- 0x0F,0x0F,0x00,0x0F,0x00,0x0F,0x0F,0x00, 0x20,0xE0,0xC0,0x20,0x20,0xE0,0xC0,0x00, // -n- 0x00,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00, 0xC0,0xE0,0x20,0x20,0x20,0xE0,0xC0,0x00, // -o- 0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00, 0x20,0xE0,0xC0,0x20,0x20,0xE0,0xC0,0x00, // -p- 0x40,0x7F,0x7F,0x48,0x08,0x0F,0x07,0x00, 0xC0,0xE0,0x20,0x20,0xC0,0xE0,0x20,0x00, // -q- 0x07,0x0F,0x08,0x48,0x7F,0x7F,0x40,0x00, 0x20,0xE0,0xC0,0x60,0x20,0x60,0xC0,0x00, // -r- 0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00, 0x40,0xE0,0xA0,0x20,0x20,0x60,0x40,0x00, // -s- 0x04,0x0C,0x09,0x09,0x0B,0x0E,0x04,0x00, 0x20,0x20,0xF8,0xFC,0x20,0x20,0x00,0x00, // -t- 0x00,0x00,0x07,0x0F,0x08,0x0C,0x04,0x00, 0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00, // -u- 0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00, 0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00, // -v- 0x00,0x03,0x07,0x0C,0x0C,0x07,0x03,0x00, 0xE0,0xE0,0x00,0x00,0x00,0xE0,0xE0,0x00, // -w- 0x07,0x0F,0x0C,0x07,0x0C,0x0F,0x07,0x00, 0x20,0x60,0xC0,0x80,0xC0,0x60,0x20,0x00, // -x- 0x08,0x0C,0x07,0x03,0x07,0x0C,0x08,0x00, 0xE0,0xE0,0x00,0x00,0x00,0xE0,0xE0,0x00, // -y- 0x47,0x4F,0x48,0x48,0x68,0x3F,0x1F,0x00, 0x60,0x60,0x20,0xA0,0xE0,0x60,0x20,0x00, // -z- 0x0C,0x0E,0x0B,0x09,0x08,0x0C,0x0C,0x00, 0x00,0x40,0x40,0xF8,0xBC,0x04,0x04,0x00, // -{- 0x00,0x00,0x00,0x07,0x0F,0x08,0x08,0x00, 0x00,0x00,0x00,0xBC,0xBC,0x00,0x00,0x00, // -|- 0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00, 0x00,0x04,0x04,0xBC,0xF8,0x40,0x40,0x00, // -}- 0x00,0x08,0x08,0x0F,0x07,0x00,0x00,0x00, 0x08,0x0C,0x04,0x0C,0x08,0x0C,0x04,0x00, // -~- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0xC0,0x60,0x30,0x60,0xC0,0x80,0x00, // -- 0x07,0x07,0x04,0x04,0x04,0x07,0x07,0x00, };