基于AT89C51单片机的贪吃蛇电子游戏(仿真)
有关贪吃蛇的历史发展可以看一下这个网址,贪吃蛇最初的设计和现在并不相同。。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 ^ ; // 右
- sbit P01 = P0 ^ ; // 左
- sbit P02 = P0 ^ ; // 上
- sbit P03 = P0 ^ ; // 下
- sbit P04 = P0 ^ ; // 开始/暂停
- #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 = ; // 游戏速度调节
- uchar level = ; // 难度
- uchar s1[] = ""; // 保存显示难度的汉子
- // uchar = unsigned char
- // 食物的结构体
- struct Food
- {
- uchar x; // 食物的横坐标
- uchar y; // 食物的纵坐标
- }food;
- // 贪吃蛇主体的结构体
- struct Snake
- {
- uchar x[];
- uchar y[];
- uchar node; // 蛇的节数
- uchar direction; // 蛇移动方向
- }snake;
其中食物的数据结构采用结构体定义,两个unsigned char变量分别定义为食物的横纵坐标;蛇的身体定义为长度最大值为39的数组,游戏中贪吃蛇长度达到39,游戏通关结束。
游戏处理模块为贪吃蛇在游玩过程中遇到的需要被处理的情况,主要实现的功能包括以下四个方面,即移动、食物、死亡和更新。
- 移动
流程与运行仿真如上图,按下“开始”键后,游戏开始启动,初始化完毕后,屏幕会显示“贪吃蛇”、“食物”和游戏的边界框,“贪吃蛇”在固定的周期内会向前移动一格,此时“贪吃蛇”身体从尾巴至头部每一个后序节点会向前序节点移动,后序节点移动完毕后,头部会根据此时按键的方向对相应的横纵坐标进行加减。
- 食物
“贪吃蛇”向前移动后,此时要判断蛇头是否与“食物”的横纵坐标一一对应,如果不是则退出该模块,进入下一模块;如果是,则“贪吃蛇”的节数增加一。节数增加后判断蛇的节数是否为10的倍数,如果是则提升“贪吃蛇”的等级,并对游戏增加难度,加快贪吃蛇移动的速度。退出了游戏升级的模块后将进入创建新的“食物”模块,为了避免“食物”与“贪吃蛇”的节点坐标重复,“食物”在创建后要与“贪吃蛇”的每个节点的坐标一一比较,如果重合则重新创建“食物”的坐标,直到创建成功为止。
- 结束
“贪吃蛇”在向前移动后,有可能撞到墙壁或自己的身体,也有可能吃到食物,或者只是向前移动一格,移动完毕后如果吃到了食物,如果“贪吃蛇”的node(节数)达到了最大值(39),那么玩家将会通关游戏,并且游戏退出,此时需要判断游戏是否结束,一共有三种判别,前两种为失败结局,即撞到了墙壁或自己的身体,最后一种为通关结局,将在屏幕上打印“Congratulations”祝贺玩家成功通关游戏。
- 更新
游戏在判断结束后,如果没有结束,那么更新屏幕上的“贪吃蛇”的状态。
四个模块的核心代码如下:
- // 运行游戏的具体实现
- void gamePlay(void)
- {
- bit hero = FALSE; // 完成游戏
- while() {
- EA = ;
- if (ESC == FALSE) {
- gameSpeed = ;
- level = ;
- s1[] = '';
- start();
- }
- while(ESC == FALSE) {
- EA = ;
- move(); // 贪吃蛇向前移动
- if(snake.x[] == food.x && snake.y[] == food.y) { // 判断蛇头吃到食物以后
- RectArea(food.x, food.y, food.x + , food.y + , ERASE); // 把画面上的食物去掉
- snake.node++; // 蛇的身体长一节
- if (increaseLevel()) { // 根据难度变化判断是否要重新开始
- restart();
- continue;
- }
- while (!createNewFood()) { // 如果创建失败则继续创建,直到成功
- ;
- }
- RectArea(food.x, food.y, food.x + , food.y + , REWRITTEN); // 在画面上显示食物
- }
- if (isOver()) { // 判断游戏是否结束
- if(snake.node == )
- hero = TRUE;
- }
- ESC = TRUE;
- hero = gameOver(hero);
- break;
- }
- // 打印贪吃蛇
- updataSnakeHead(); // 更新头部
- delay(gameSpeed); // 速度设置
- eraseSnakeTail(); // 删除尾巴
- } // 退出循环(!ESC)
- }
- }
其余的函数代码编写如下:
- // 随机数产生
- int rand(void)
- {
- int i;
- i = ((TH0 << ) | TL0) & 0x7fff;
- return(i);
- }
- // 延时
- void delay(uchar ms) // 10毫秒
- {
- uchar i, j, k;
- while(ms--) {
- for(i = ; i > ; i--) {
- for(j = ; j > ; j--) {
- for(k = ; k > ; k--)
- ;
- }
- }
- }
- }
- void mulDelay(int s) // 1秒
- {
- int i;
- uchar j;
- for (i = ; i < s; ++i) {
- for (j = ; j < ; ++j) {
- delay();
- }
- }
- }
- // 键扫描函数
- void KeyScan()
- {
- P0 = 0xff;
- if(P00 == && snake.direction != LEFT) {
- snake.direction = RIGHT;
- }
- if(P01 == && snake.direction != RIGHT) {
- snake.direction = LEFT;
- }
- if(P02 == && snake.direction != DOWN) {
- snake.direction = UP;
- }
- if(P03 == && snake.direction != UP) {
- snake.direction = DOWN;
- }
- if(P04 == ) {
- ESC = ~ESC;
- }
- }
- void int_0(void) interrupt
- {
- EA = ;
- KeyScan();
- }
- void snakeInit()
- {
- snake.direction = RIGHT; // 方向往右
- snake.x[] = ; // 蛇头坐标
- snake.y[] = ;
- snake.x[] = ; // 蛇尾坐标
- snake.y[] = ;
- snake.node = ; // 节数
- }
- void init(void)
- {
- EX0 = ; // 开中断
- IT0 = ; // 设置电平触发方式
- EA = ; // 开所有中断
- TMOD = 0x01;
- TH0 = / ;
- TL0 = % ;
- TR0 = ;
- hz_disp(, , , snaker, );
- snakeInit();
- }
- // 需要出现新食物
- bit createNewFood()
- {
- uchar i;
- uchar size = snake.node;
- bit flag = TRUE; // 标记创建的新事物与贪吃蛇的身体冲突
- food.x = rand() % + ;
- food.y = rand() % + ;
- // 食物的坐标必须为3的倍数才会在显示屏先被显示
- for (; food.x % != ; ++food.x) {
- ;
- }
- for (; food.y % != ; ++food.y) {
- ;
- }
- for (i = ; i < size; ++i) {
- if (food.x == snake.x[i] && food.y == snake.y[i]) {
- flag = FALSE;
- break;
- }
- }
- return flag;
- }
- void start()
- {
- ClearLCD();
- hz_disp(, , , gameLevel, REWRITTEN); // 显示汉子“难度”
- en_disp(, , , Asc, s1, REWRITTEN); // 显示s1数组的内容
- delay();
- ClearLCD();
- rectBoundary(, , , , REWRITTEN); // 显示边框
- while (!createNewFood()) { // 如果创建失败则继续创建,直到成功
- ;
- }
- RectArea(food.x, food.y, food.x + , food.y + , REWRITTEN); // 在画面上显示食物
- }
- // 重新开始
- void restart()
- {
- start();
- }
- // 是否增加难度
- // 如果是,那么要重新开始
- bit increaseLevel()
- {
- bit res = NO;
- // 每次蛇的长度超过10个增加一次难度,level最高4级
- if(snake.node % == ) {
- level += ;
- switch (level) {
- case :
- s1[] = '';
- gameSpeed = ;
- break;
- case :
- s1[] = '';
- gameSpeed = ;
- break;
- case :
- s1[] = '';
- gameSpeed = ;
- break;
- }
- res = YES;
- }
- return res;
- }
- // 贪吃蛇移动
- void move()
- {
- uchar i;
- // 将蛇从最后个节点向前一个节点移动
- for(i = snake.node - ; i > ; i--) {
- snake.x[i] = snake.x[i - ];
- snake.y[i] = snake.y[i - ];
- }
- // 根据此时贪吃蛇的方向,设置蛇头的位置
- switch(snake.direction) {
- case RIGHT:
- snake.x[] += ;
- break;
- case LEFT:
- snake.x[] -= ;
- break;
- case UP:
- snake.y[] -= ;
- break;
- case DOWN:
- snake.y[] += ;
- break;
- }
- }
- // 游戏是否结束
- bit isOver()
- {
- bit overFlag = ;
- uchar i;
- // 判断蛇是否吃到自己了
- // 从蛇的第四节开始判断是否撞到自己了
- for (i = ; i < snake.node; i++) {
- if (snake.x[i] == snake.x[] && snake.y[i] == snake.y[]) {
- overFlag = ;
- break;
- }
- }
- if(snake.x[] < || snake.x[] >
- || snake.y[] < || snake.y[] > ) { // 判断蛇是否撞到墙壁
- overFlag = ;
- }
- if(snake.node == ) {
- overFlag = ;
- }
- return overFlag;
- }
- void congratulations()
- {
- idata uchar str[] = "Congratulations";
- uchar tmp[];
- uchar len = ;
- uchar i;
- s1[] = 's';
- for (i = ; i < ; ++i) {
- tmp[] = str[i];
- en_disp(, i * + , , Asc, tmp, REWRITTEN);
- // en_disp(3, 80, 1, Asc, s1, REWRITTEN);
- }
- }
- // 游戏结束后的画面
- void theEndGraph()
- {
- uchar i, j;
- for (i = ; i < ; ++i) {
- for (j = ; j < ; ++j) {
- hz_disp(i * , j * , , mySchool[i*+j], );
- }
- }
- for (i = ; i < ; ++i) {
- hz_disp(, i * , , myName[i], );
- }
- }
- // 游戏结束
- bit gameOver(bit hero)
- {
- // ClearLCD();
- if (hero == TRUE) { // 当玩家贪吃蛇的节点达到了39个后显示恭喜通关画面
- hero = FALSE;
- congratulations();
- mulDelay();
- } else {
- hz_disp(, , , theEnd, );
- mulDelay();
- }
- ClearLCD();
- theEndGraph(); // 打印“毕业设计“
- snakeInit(); // 重新初始化游戏的参数
- return hero;
- }
- // 更新贪吃蛇的头部
- void updataSnakeHead()
- {
- RectArea(snake.x[], snake.y[], snake.x[] + , snake.y[] + , REWRITTEN); // 绘制当前的头部
- RectArea(snake.x[], snake.y[], snake.x[] + , snake.y[] + , REWRITTEN); // 将上一次的头部重新绘制以补全边角
- // 根据蛇的方向擦除蛇的头部中间的一点以确认贪吃蛇的头部
- switch (snake.direction) {
- case RIGHT:
- Dot(snake.x[] + , snake.y[] + , ERASE);
- break;
- case LEFT:
- Dot(snake.x[], snake.y[] + , ERASE);
- break;
- case UP:
- Dot(snake.x[] + , snake.y[], ERASE);
- break;
- case DOWN:
- Dot(snake.x[] + , snake.y[] + , ERASE);
- break;
- }
- }
- // 去除蛇的的最后一节
- void eraseSnakeTail()
- {
- RectArea(snake.x[snake.node - ], snake.y[snake.node - ], snake.x[snake.node - ] + , snake.y[snake.node - ] + , ERASE);
- }
测试函数放在最后
- void main (void)
- {
- LCD12864_init();
- ClearLCD();
- init();
- gamePlay();
- while() {
- ;
- }
- }
以上是贪吃蛇游戏的实现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 ^ ;
- sbit LCD12864_RW = P2 ^ ; // 0:write ; 1:read
- sbit LCD12864_RS = P2 ^ ; // 0:the command .1:the data
- sbit LCD12864_CS_L = P2 ^ ; // select the left of the lcd when 1
- sbit LCD12864_CS_R = P2 ^ ;
- /*--------------------------函数列表-------------------------*/
- 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 :
- LCD12864_CS_L = ;
- LCD12864_CS_R = ;
- break;
- case :
- LCD12864_CS_L = ;
- LCD12864_CS_R = ;
- break; //left
- case :
- LCD12864_CS_L = ;
- LCD12864_CS_R = ;
- break; //right
- default:
- ;
- }
- }
- /*------------------------------------------------------------*/
- void WaitLCD()
- {
- uchar flag;
- LCD12864_DATA_PORT = 0xFF;
- LCD12864_RW = ;
- LCD12864_RS = ;
- LCD12864_EN = ;
- LCD12864_EN = ;
- LCD12864_EN = ;
- LCD12864_DATA_PORT = 0xFF;
- LCD12864_RW = ;
- LCD12864_RS = ;
- LCD12864_EN=;
- do {
- flag=LCD12864_DATA_PORT;
- } while(!((flag & 0x80) == 0x80));
- LCD12864_EN=;
- }
- /*-------------------------------------------------------------*/
- void WriteDatToLCD12864(uchar dat)
- {
- WaitLCD();
- LCD12864_RS = ;
- LCD12864_RW = ;
- LCD12864_DATA_PORT = dat;
- LCD12864_EN = ;
- LCD12864_EN = ;
- }
- /*-------------------------------------------------------------*/
- void WriteCmdToLCD12864(uchar cmd)
- {
- WaitLCD();
- LCD12864_RS = ;
- LCD12864_RW = ;
- LCD12864_DATA_PORT = cmd;
- LCD12864_EN = ;
- LCD12864_EN = ;
- }
- /*-------------------------------------------------------------*/
- uchar ReadDatFromLCD12864(void)
- {
- uchar dat;
- WaitLCD();
- LCD12864_DATA_PORT = 0xFF;
- LCD12864_RS = ;
- LCD12864_RW = ;
- LCD12864_EN = ;
- LCD12864_EN = ;
- LCD12864_EN = ;
- LCD12864_DATA_PORT = 0xFF;
- LCD12864_RS = ;
- LCD12864_RW = ;
- LCD12864_EN = ;
- LCD12864_EN = ;
- dat = LCD12864_DATA_PORT;
- LCD12864_EN = ;
- 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();
- WriteCmdToLCD12864(0x3E); // 分别初始化左半屏和右半屏
- WriteCmdToLCD12864(0X3F);
- }
- // 清屏
- void ClearLCD()
- {
- int i, j;
- LCDSel();
- for(j = ; j < ; j++) {
- WriteCmdToLCD12864(LCD_ON);
- SetX(j);
- WriteCmdToLCD12864(Add_Y);
- SetZ();
- for (i = ; i < ; 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 < ) {
- LCDSel();
- SetX(y / ); // set the page address
- SetY(x); // set the Y adress
- dat = ReadDatFromLCD12864();
- if(flag) {
- dat = dat | (Tab[y % ]);
- } else {
- dat= dat & (~(Tab[y % ]));
- }
- SetX(y / );
- SetY(x); //set the Y adress
- WriteDatToLCD12864(dat);
- } else if (x < ) {
- LCDSel();
- SetX(y / );
- SetY(x - );
- dat=ReadDatFromLCD12864();
- if(flag) {
- dat = dat | (Tab[y % ]);
- } else {
- dat = dat & (~(Tab[y % ]));
- }
- SetY(x - );
- 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 = ; 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 = ; 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 = ; j < n; j++) {
- //显示上半个汉字
- for (i = ; i < ; i++) {
- //点的位置是在左还是右
- if(y + * j + i < ) {
- LCDSel();
- WriteCmdToLCD12864(LCD_ON);
- SetX(x);
- SetZ();
- SetY(y+*j+i);
- if(flag) {
- WriteDatToLCD12864(hz[ * j + i]);
- } else {
- WriteDatToLCD12864(~hz[ * j + i]);
- }
- } else if(y + * j + i < ) {
- LCDSel();
- WriteCmdToLCD12864(LCD_ON);
- SetX(x);
- SetZ();
- SetY(y + * j + i - );
- if(flag) {
- WriteDatToLCD12864(hz[ * j + i]);
- } else {
- WriteDatToLCD12864(~hz[ * j + i]);
- }
- }
- }
- //显示下半个汉字
- for (i = ; i < ; i++) {
- //先判断点是在左还是在右
- if(y + * j + i - < ) {
- if(x + < ) { //最后一行显示上半个字
- LCDSel();
- WriteCmdToLCD12864(LCD_ON);
- SetX(x + );
- SetZ();
- SetY(y + * j + i - );
- if(flag) {
- WriteDatToLCD12864(hz[ * j + i]);
- } else {
- WriteDatToLCD12864(~hz[ * j + i]);
- }
- }
- } else if (y + * j + i - < ) {
- if(x + < ) { //最后一行
- LCDSel();
- WriteCmdToLCD12864(LCD_ON);
- SetX(x + );
- SetZ();
- SetY(y + * j + i - - );
- if(flag) {
- WriteDatToLCD12864(hz[ * j + i]);
- } else {
- WriteDatToLCD12864(~hz[ * 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 = ; j < n; j++) {
- loc = string[j] - 0x20; // 确定要显示的字符在asc表中的位置(乘上16)
- // 显示上半个ASCII字符
- for (i = ; i < ; i++) {
- // 点的位置是在左还是右
- if( y + * j + i < ) {
- LCDSel();
- WriteCmdToLCD12864(LCD_ON);
- SetX(x);
- SetZ();
- SetY(y + * j + i);
- if(flag) {
- WriteDatToLCD12864(asc[ * loc + i]);
- } else {
- WriteDatToLCD12864(~asc[ * loc + i]);
- }
- } else if (y + * j + i < ) {
- LCDSel();
- WriteCmdToLCD12864(LCD_ON);
- SetX(x);
- SetZ();
- SetY(y + * j + i - );
- if(flag) {
- WriteDatToLCD12864(asc[ * loc + i]);
- } else {
- WriteDatToLCD12864(~asc[ * loc + i]);
- }
- }
- }
- // 显示下半个ASCII字符
- for (i = ; i < ; i++) {
- // 先判断点是在左还是在右
- if(y + * j + i - < ) {
- if(x + < ) { // 最后一行
- LCDSel();
- WriteCmdToLCD12864(LCD_ON);
- SetX(x + );
- SetZ();
- SetY(y + * j + i - );
- if(flag) {
- WriteDatToLCD12864(asc[ * loc + i]);
- } else {
- WriteDatToLCD12864(~asc[ * loc + i]);
- }
- }
- } else if (y + * j + i - < ) {
- if(x + < ) { // 最后一行
- LCDSel();
- WriteCmdToLCD12864(LCD_ON);
- SetX(x + );
- SetZ();
- SetY(y + * j + i - - );
- if(flag) {
- WriteDatToLCD12864(asc[ * loc + i]);
- } else {
- WriteDatToLCD12864(~asc[ * 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[][] = {
- 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[][] = {
- 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,
- };
基于AT89C51单片机的贪吃蛇电子游戏(仿真)的更多相关文章
- 基于EasyX库的贪吃蛇游戏——C语言实现
接触编程有段时间了,一直想学习怎么去写个游戏来练练手.在看了B站上的教学终于可以自己试试怎么实现贪吃蛇这个游戏了.好了,废话不多说,我们来看看如何用EasyX库来实现贪吃蛇. 一.准备 工具vc++6 ...
- 基于spec探路者团队贪吃蛇作品的评论
1 运动功能 由以上两图贪吃蛇的位置不同可知,运动功能实现.并且我能够通过使用键盘上的上下左右方位键控制蛇的移动方向,蛇在控制的方向上进行直线前进. 2 吃食物功能 以上两图可知吃食物功能实现.当界面 ...
- 基于AT89C51单片机烟雾传感器
#include <reg51.h> #include <stdio.h> #define uchar unsigned char //宏定义无符号字符型 #define ui ...
- 基于NABCD评论探路者团队贪吃蛇作品及改进建议
1.根据(不限于)NABCD评论作品的选题 N:随着人们生活压力越来越大,需要去去缓解压力,并且也需要不断进步,学习英语知识. A:它是基于java开发的一款软件,采用逐个吃字母,加长蛇身,增强记忆的 ...
- 基于React的贪吃蛇游戏的设计与实现
代码地址如下:http://www.demodashi.com/demo/11818.html 贪吃蛇小游戏(第二版) 一年半前层用react写过贪吃蛇小游戏https://github.com/ca ...
- 小项目特供 贪吃蛇游戏(基于C语言)
C语言写贪吃蛇本来是打算去年暑假写的,结果因为ACM集训给耽搁了,因此借寒假的两天功夫写了这个贪吃蛇小项目,顺带把C语言重温了一次. 是发表博客的前一天开始写的,一共写了三个版本,第一天写了第一版,第 ...
- AI贪吃蛇前瞻——基于Dijkstra算法的最短路径问题
在贪吃蛇流程结构优化之后,我又不满足于亲自操刀控制这条蠢蠢的蛇,干脆就让它升级成AI,我来看程序自己玩,哈哈. 一.Dijkstra算法原理 作为一种广为人知的单源最短路径算法,Dijkstra用于求 ...
- 贪吃蛇—C—基于easyx图形库(下):从画图程序到贪吃蛇【自带穿墙术】
上节我们用方向控制函数写了个小画图程序,它虽然简单好玩,但我们不应该止步于此.革命尚未成功,同志还需努力. 开始撸代码之前,我们先理清一下思路.和前面画图程序不同,贪吃蛇可以有很多节,可以用一个足够大 ...
- 贪吃蛇—C—基于easyx图形库(上):基本控制函数实现 画图程序
自从学了c语言,就一直想做个游戏,今天将之付之行动,第一次写的特别烂,各种bug:就不贴了.今天网上看了好几个贪吃蛇,重新写了一次,做出来的效果还可以. p.s. easyx图形库是为了方便图形学教 ...
随机推荐
- Node的express框架安装
第一步:在cmd命令行下执行npm install -g express,安装全局的express. 第二步:在命令行中输入express,如果出现express不是内部命令时, 输入npm inst ...
- Python 实现Windows开机运行某软件
开机运行:随系统启动的应用程序,当系统启动之后会自动加载的应用 在注册表中添加启动项便可实现开机启动. 代码如下: # -*- coding:utf-8 -*- import win32api imp ...
- maven权威指南学习笔记(二)——安装、运行、获取帮助
这部分在网上很容易找到详细教程,这里就略写了. 基础:系统有配置好的jdk,通过 命令行 java -version,有类似下面的提示,表示java环境以配好 下载maven:官网 http://ma ...
- 数据结构0103汉诺塔&八皇后
主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) ...
- Tween Animation----Translate位置移动动画
布局: 在res/下新建一个anim文件夹用来保存动画xml文件 新建一个translate文件 代码: <?xml version="1.0" encoding=" ...
- spring-aop学习【基于注解】
我个人觉得,这个好像就是用在定制日志输出上,和log4j很像. 用途: 如果业务方法调用每一步都需要详细的日志,那就用这个吧 好处就是: 方便维护,只包含业务代码 下面开始说明: 所需要的jar包: ...
- 转:WaitForSingleObject()函数、WaitForMultipleObject()函数
http://blog.csdn.net/xiaobai1593/article/details/6672193 在多线程下面,有时候我们会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以 ...
- 最详细易懂的CRC-16校验原理(附源程序)(转)
最详细易懂的CRC-16校验原理(附源程序) from:http://www.openhw.org/chudonganjin/blog/12-08/230184_515e6.html 最详细易懂的CR ...
- appzapper注册码
Appzapper for mac是MAC OS上的一款软件,可以非常方便的卸载自己不喜欢的软件,非常的快速便捷,卸载的时候不会有残留. 下载地址:http://www.pc6.com/mac/114 ...
- svn客户端重新设置用户名和密码
在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么以后就不用每次都输入一遍用户名密码了. 不过,如果 ...